3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(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のRAIDLinux標準のソフトウェア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修復作業: 小物の日記