(Linux)故障したバッファローのLinkStation(RAID1)のデータ復旧
会社で、何故かバッファローのLinkStation LS-WXL/R1シリーズを使ってます。
LS-WXL/R1については〈リンクステーション〉 RAID機能搭載 ネットワーク対応HDD |LS-WXL/R1シリーズ【清水理史の「イニシャルB」】 第380回:高速化され実用性がアップしたRAID 0/1対応NAS バッファロー「LS-WXL/R1シリーズ」 -INTERNET Watchを参考。

信頼性を高めるためにRAID1(ミラーリング)構成で使っていました。

しかし、ある日突然アクセス不能に。。。背面電源スイッチでシャットダウンを試みようとしましたが、シャットダウンが始まる気配が有りません。
バッファローのサポートに電話して、10数分待ってようやくつながったサポート担当者に問い合わせてみました。
ファームウェアが故障したスタンバイモードと、機器の故障のハングアップのどちらかの状態ではないかとのこと。スタンバイモードならNASナビゲータで検知できるようですが、検知できなかったのでコントロールユニットの故障によるハングアップっぽいです。
そうなると強制電源断をして、起動しなければ修理になるとのことでしたが、修理だとデータは消去されるとのこと。(ちなみに、ファームアップデートでもデータ消える可能性があると自信をもって言われました。)

電源断して再投入しましたが、起動中のままで一向に起動完了しません。どうやら完全にお亡くなりになったようです。
バッファローはデータ復元なんぞ一切にしないと自身をもって言いますし、データ復旧業者に頼むと高くつきます。

ということで、ここから本題ですが、このLinkStationのHDDのデータを読めるかどうか挑戦しました。
(一応バックアップはとっていたんですが、設定漏れで一部の共有フォルダが出来てませんでした)


LinkStationのRAIDはLinux標準のソフトウェアRAID(多分mdraid)となっているようです。
なので、LinuxをインストールしたPCを用意します。
今回は Fedora13 LXDE 版をインストールしたPCで試しました。


まず、LS-WXL/R1 のディスク1台目(シールで"1"と書いている方)を取り出し、SATA を USB に変換するケーブルで、FedoraいれたPCにUSB接続します。

下記コマンドでUSB接続したコントローラが認識しているか確認します。


# lsusb
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
↑ちゃんと認識してます。
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# cat /proc/bus/usb/devices
(省略) ↓認識てますね。
T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=152d ProdID=2338 Rev= 1.00
S: Manufacturer=JMicron
S: Product=USB to ATA/ATAPI Bridge
S: SerialNumber=316F4903B009
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms


# cat /proc/scsi/scsi
Attached devices:
↓内蔵のストレージたちです。
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: FUJITSU MHT2040A Rev: 0022
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: TOSHIBA Model: DVD-ROM SD-R2002 Rev: 1F26
Type: CD-ROM ANSI SCSI revision: 05
↓これがUSB接続したHDD。USB接続するとSCSIとして認識します。
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SAMSUNG Model: HD502HI Rev: 1118
Type: Direct-Access ANSI SCSI revision: 02


さて、fdiskでパーティション構成を見てみます。


# fdisk -l
(内蔵HDDは省略)
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa57f4f09

Device Boot Start End Blocks Id System
/dev/sdb1 1 60802 488386583+ ee GPT

どうやら、LS-WXL/R1のパーティションはGPT構成みたいです。
(GPTはMBRに置き換わるパーティション構成です。詳しくは、GUIDパーティションテーブル - Wikipedia,GPTパーティション - 個人的健忘録 from 2009 - 楽天ブログ(Blog)を参照。)
GPTのパーティションは fdisk では管理できないので、parted を使えと言ってますね。

parted でパーティション構成を覗いてみます。

# parted -s /dev/sdb print
Model: SAMSUNG HD502HI (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 1024MB 1024MB ext3 primary
2 1024MB 6144MB 5120MB xfs primary
3 6144MB 6144MB 512B primary
4 6144MB 6144MB 512B primary
5 6144MB 7168MB 1024MB linux-swap(v1) primary
6 7168MB 492GB 485GB xfs primary

パーティション構造が確認できました。
おそらくユーザデータは6番目のパーティションにあるだろうということで、マウントしてみます。

# mkdir /mnt/hdlan1
# mount -t xfs /dev/sdb6 /mnt/hdlan1/


マウントできました!
マウント先を見ると、ちゃんとユーザデータが残っておりアクセスできます。

これでデータを取り出すことができました。

さて、同時に2台目も接続してみました。
1台目と同じようにマウントしてみます。

# mkdir /mnt/hdlan2
# mount -t xfs /dev/sdc6 /mnt/hdlan2
mount: wrong fs type, bad option, bad superblock on /dev/sdc6,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

エラーになりマウントできないので、エラー内容を見てみます。

# dmesg | tail
sd 4:0:0:0: [sdc] Mode Sense: 00 38 00 00
sd 4:0:0:0: [sdc] Assuming drive cache: write through
sd 4:0:0:0: [sdc] Assuming drive cache: write through
sdc: sdc1 sdc2 sdc3 sdc4 sdc5 sdc6
sd 4:0:0:0: [sdc] Assuming drive cache: write through
sd 4:0:0:0: [sdc] Attached SCSI disk
XFS: Filesystem sdc6 has duplicate UUID - can't mount
XFS: Filesystem sdc6 has duplicate UUID - can't mount
XFS: Filesystem sdc6 has duplicate UUID - can't mount
XFS: Filesystem sdc6 has duplicate UUID - can't mount

UUIDが原因でマウントできないようです。調べるとUUIDを無視したマウント方法があるようなので試してみます。

# mount -t xfs -o nouuid /dev/sdc6 /mnt/hdlan2

うまくいきました!

さて、せっかくなので他のパーティションも覗いてみました。

/sdb1 は ext3 ファイルシステムでどうやらファームのイメージファイルが入っているようです。

# ls -la
total 164040
drwxr-xr-x. 3 root root 4096 May 23 2010 .
drwxr-xr-x. 6 root root 4096 May 18 11:20 ..
-rw-r--r--. 1 root root 136077 May 23 2010 conf_save.tgz
-rw-r--r--. 1 root root 156505342 Dec 3 2009 hddrootfs.buffalo.updated.done
-rw-r--r--. 1 root root 8532824 Dec 3 2009 initrd.buffalo
drwx------. 2 root root 16384 Dec 3 2009 lost+found
-rw-r--r--. 1 root root 403688 Dec 3 2009 u-boot.buffalo
-rw-r--r--. 1 root root 2174552 Dec 3 2009 uImage.buffalo


/sdb2 がOSのルートパーティションみたいですね。

# ls -la
total 40
drwxr-xr-x. 18 root root 4096 May 16 10:39 .
drwxr-xr-x. 8 root root 4096 May 18 15:58 ..
drwxr-xr-x. 2 root root 4096 Oct 23 2009 bin
drwxr-xr-x. 2 root root 6 Oct 23 2009 boot
drwxr-xr-x. 6 root root 8192 May 16 10:39 dev
drwxr-xr-x. 31 root root 4096 May 16 10:39 etc
drwxrwxrwx. 3 root root 17 Oct 23 2009 home
drwxr-xr-x. 2 root root 6 Oct 23 2009 initrd
drwxr-xr-x. 5 root root 4096 Dec 3 2009 lib
drwxrwxrwx. 11 root root 138 May 16 10:39 mnt
drwxr-xr-x. 3 root root 19 May 16 10:39 modules
drwxr-xr-x. 2 root root 6 May 1 2009 proc
drwx------. 3 root root 19 Oct 23 2009 root
drwxr-xr-x. 2 root root 4096 May 16 10:39 sbin
drwxr-xr-x. 2 root root 6 Oct 23 2009 sys
lrwxrwxrwx. 1 root root 8 May 16 10:39 tmp -> /mnt/ram
drwxr-xr-x. 10 root root 95 Oct 23 2009 usr
drwxr-xr-x. 11 root root 131 May 16 10:39 var
drwxr-xr-x. 6 root root 75 Oct 23 2009 www


/var/log/file.smb にSamba経由でアクセしたログが有りました。(700MBほど有りましたが...)
アクセスログを見れるのはTeraStationにならないと見れませんが、実はLinkStationでもログはちゃんと残っていたんですね。
ログは下記のような感じです。

May 15 19:50:25 LS-WXL65B file_smb[23722]: [User:HOGEDOMAIN+user01(10.0.120.21)] File Open(Read/Write) /mnt/array1/共有フォルダA/テスト/test.txt
May 15 19:50:47 LS-WXL65B file_smb[23722]: [User:HOGEDOMAIN+user01(10.0.120.21)] File Open(Read) /mnt/array1/共有フォルダA/テスト/test.txt
May 15 19:50:47 LS-WXL65B file_smb[23722]: [User:HOGEDOMAIN+user01(10.0.120.21)] Remove File /mnt/array1/共有フォルダA/テスト/test.txt

sambaの設定(/etc/samba/smb.conf)見たら、ほんと普通のLinuxのsambaサーバと同じ形式でしたね。

[global]
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8
netbios name = LS-WXL65B
server string = LinkStation
socket options = TCP_NODELAY SO_RCVBUF=262144 SO_SNDBUF=262144
use mmap = yes
use sendfile = yes
os level = 1
wins server = 10.0.0.10

workgroup = HOGEDOMAIN
security = ADS
auth methods = guest sam winbind:ntdomain
realm = HOGEDOMAIN.JP
password server = DC.HOGEDOMAIN.JP
logon path =
logon home =
lm announce = False
local master = No
domain master = False
idmap uid = 10000-11000
idmap gid = 10000-11000
template shell = /bin/bash
template homedir = /home
winbind separator = +
winbind use default domain = yes
winbind enum users = Yes
winbind enum groups = Yes
passdb backend = tdbsam:/etc/samba/smbpasswd.tdb
encrypt passwords = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
unix password sync = yes
unix extensions = no
guest account = nobody
null passwords = yes
guest only = no
password level = 14
map to guest = Bad User

veto files = /.AppleDesktop/Network Trash Folder/TheVolumeSettingsFolder/.AppleDouble/.AppleDB/.com.apple.timemachine.supported/
delete veto files = yes

deadtime = 15
invalid users = mail, deamon
admin users = root
username map = /etc/samba/smbusers

log level = 1
max log size = 0

lock directory = /etc/samba/lock

dos filetimes = Yes
dos filetime resolution = Yes
map archive = Yes
map hidden = No
map system = No
dns proxy = No
show add printer wizard = No
host msdfs = no
disable spoolss = yes
printcap name = /etc/printcap
load printers = yes
printing = lprng

[lp]
comment = Network Printer for Windows
path = /mnt/array1/spool/samba
print command = /usr/bin/lpr -Plp -r %s
printer admin = admin
use client driver = Yes
browsable = yes
printable = yes
public = yes
[info]
comment = LinkStation Utilities
path = /mnt/info
browsable = yes
printable = no
writable = no
guest ok = yes
csc policy = disable
[usbdisk1]
comment = USB Disk1
path = /mnt/usbdisk1
browsable = yes
printable = no
writable = yes
valid users = @HOGEDOMAIN+"admins"
force create mode = 666
force directory mode = 777
csc policy = disable
[ホゲフォルダ]
comment =
path = /mnt/array1/ホゲフォルダ
browsable = yes
printable = no
writable = yes
valid users = @HOGEDOMAIN+"hoge",@HOGEDOMAIN+"admins"
force create mode = 666
force directory mode = 777
csc policy = manual
vfs objects = recycle, audit
recycle:repository = trashbox
recycle:keeptree = 1
recycle:versions = 1
recycle:directory_mode = 777
audit:facility = LOCAL6
audit:priority = INFO
###ホゲフォルダ###

バックアップはcronのログ覗くと、/usr/local/bin/rsbackup.pl で行っているようです。
/usr/local/bin/rsbackup.pl 見てみたら、開発コードらしく修正したデベロッパの名前も載ってました。

バックアップの設定ファイルは /etc/melco/backup1~8 に書いてました。

TeraStaionのRAID5ならこうは行きませんが、RAID1ならディスク2台とも壊れてない限り、簡単にデータ復旧できそうです。

しかし、バッファローのNASの故障率は非常に高いですね。。。LinkStation,復旧で検索すると大量に復旧業者が出てくるくらいです。
まぁ簡易のファイルサーバ的な考えでいないと結構痛い目を見ます。
やはり業務で使うファイルサーバはすべてが冗長化されたちゃんとしたサーバにするのがいいですね。


参考:
@IT:USBのハードディスクを接続するには
ysanolog XFSに関するトラブル対処
partedコマンドで2TB超パーティション作成:Blogっぽいアレ So-net版:So-netブログ
Linkstationで自宅サーバ
Linkstation LS-WS1.0TGL/R1 HDD修復作業: 小物の日記
[PR]
by Jehoshaphat | 2011-10-27 23:54 | Linux | Trackback | Comments(1)
トラックバックURL : http://jehupc.exblog.jp/tb/16242273
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented at 2012-04-08 03:21 x
ブログの持ち主だけに見える非公開コメントです。


<< (Linux)/usr/bin... (Linux)LVMパーティシ... >>