RAID5のHDD2本障害が発生したのでデータ復旧を試みた

2025年3月28日

以下の記事でも紹介した、我が家の「裸族のインテリジェントビルNAS」ですが、RAID5のHDDのうち2本に障害が発生しました。
裸族のインテリジェントビルNAS(CRIB35NAS) を買いました
裸族のインテリジェントビルNAS(CRIB35NAS)でRAID5のベンチマークテスト

経緯

3TBのHDD4本のRAID5で運用
HDD1本故障
HDD交換後、リビルド開始
リビルド中に2本目のHDDが故障
NAS管理画面からRAIDディスク自体が見えなくなる
RAID5はHDD1本故障まではセーフだが、2本故障はアウト。
だが、ここであきらめるわけにはいかない。
全部とは言わないが、少しでもデータ復旧を…ということで頑張ってみました。
結果、今回は中に入っていた約4TBのデータのうち、100GBは救出できませんでしたが、残りは救出できました。
(まぁ障害の程度によるんですけどね)
LinuxでソフトウェアRAIDのシステムなら同手順でなんとかなるかもしれません。
特に、TeraStationとかね。
ということで、以下、データ復旧までの技術メモです。

準備物

  • CentOSのLiveDVD
  • SATAディスクが4本以上が接続できるPC(3本が救出元、1本が救出先)
  • データ救出先のHDD

作業の流れ

  1. CentOSのLiveDVDからPCを起動
  2. RAID5のHDD4本のうち、1本に障害が発生した状態の3本のHDDをPCに接続
  3. RAID5のmd(マルチプルデバイス)を強制的に有効にする
  4. 救出先のHDDを接続
  5. データを救出

手順

以下、出力結果等に"★"印でコメントを記載していますので、その部分に着目してください。

1. CentOSのLiveDVDからPCを起動

2. CentOSの公式サイトからダウンロード。

3. RAID5のHDD4本のうち、1本に障害が発生した状態の3本のHDDをPCに接続

4. 接続する

5. ターミナルを起動し、fdisk -l でHDDを確認

# fdisk -l  ★LiveDVD
Disk /dev/mapper/live-rw: 5872 MB, 5872025600 bytes
255 heads, 63 sectors/track, 713 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: 0x00000000

★LiveDVD
Disk /dev/mapper/live-osimg-min: 5872 MB, 5872025600 bytes
255 heads, 63 sectors/track, 713 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: 0x00000000

★HDD1本目
Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdc1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.

★HDD2本目
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x4b8e7289
Device Boot Start End Blocks Id System
/dev/sdd1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.

★HDD3本目
Disk /dev/sde: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sde1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.

6. parted でパーティション情報を確認

# parted /dev/sde ★fdiskで確認した結果をもとに、ディスク1本だけ確認してみる

GNU Parted 2.1
Using /dev/sde
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sde: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 8001kB 7983kB
2 8001kB 1048MB 1040MB xfs ★NASの管理用領域?
3 1048MB 3001GB 3000GB    ★救出したいデータが入っている領域

7. マルチプルデバイスの状態ディスクごとに確認

sdc3を確認

# mdadm --examine /dev/sdc3

/dev/sdc3:
Magic : xxxxxxxx
Version : 1.0
Feature Map : 0x0
Array UUID : a9ea7400:8a721900:43987400:16e3fa00★RAID5アレイのUUID
Name : 1
Creation Time : Mon Nov 14 08:29:49 2011
Raid Level : raid5
Raid Devices : 4
Avail Dev Size : 5858485984 (2793.54 GiB 2999.54 GB)
Array Size : 17575457664 (8380.63 GiB 8998.63 GB)
Used Dev Size : 5858485888 (2793.54 GiB 2999.54 GB)
Super Offset : 5858486240 sectors
State : clean
Device UUID : ca33aexx:ca865cxx:42f27axx:7b2206xx
Update Time : Fri Jan 4 02:09:46 2013
Checksum : d4f167ce - correct
Events : 172381
Layout : left-symmetric
Chunk Size : 64K
Device Role : Active device 3
Array State : AAAA ('A' == active, '.' == missing) ★全ディスクがActiveと認識している
sdd3を確認

# mdadm --examine /dev/sdd3

/dev/sdd3:
Magic : xxxxxxxx
Version : 1.0
Feature Map : 0x0
Array UUID : a9ea7400:8a721900:43987400:16e3fa00★RAID5アレイのUUID
Name : 1
Creation Time : Mon Nov 14 08:29:49 2011
Raid Level : raid5
Raid Devices : 4
Avail Dev Size : 5858485984 (2793.54 GiB 2999.54 GB)
Array Size : 17575457664 (8380.63 GiB 8998.63 GB)
Used Dev Size : 5858485888 (2793.54 GiB 2999.54 GB)
Super Offset : 5858486240 sectors
State : clean
Device UUID : f571cbxx:eee097xx:685e08xx:568e85xx
Update Time : Fri Jan 4 02:44:50 2013
Checksum : 4255e068 - correct
Events : 172406
Layout : left-symmetric
Chunk Size : 64K
Device Role : Active device 0
Array State : A.A. ('A' == active, '.' == missing) ★ディスク2本がmissingと認識している
sde3を確認

# mdadm --examine /dev/sde3

/dev/sde3:
Magic : xxxxxxxx
Version : 1.0
Feature Map : 0x0
Array UUID : a9ea7400:8a721900:43987400:16e3fa00★RAID5アレイのUUID
Name : 1
Creation Time : Mon Nov 14 08:29:49 2011
Raid Level : raid5
Raid Devices : 4
Avail Dev Size : 5858485984 (2793.54 GiB 2999.54 GB)
Array Size : 17575457664 (8380.63 GiB 8998.63 GB)
Used Dev Size : 5858485888 (2793.54 GiB 2999.54 GB)
Super Offset : 5858486240 sectors
State : clean
Device UUID : aab50fxx:ed16f8xx:c86194xx:e92654xx
Update Time : Fri Jan 4 02:44:50 2013
Checksum : 6954f612 - correct
Events : 172406
Layout : left-symmetric
Chunk Size : 64K
Device Role : Active device 2
Array State : A.A. ('A' == active, '.' == missing) ★ディスク2本がmissingと認識している

8. マルチプルデバイスの状態確認

# cat /proc/mdstat

md126 : inactive sde3[2](S) sdb3[4](S) sda3[0](S) ★md126というRAID5アレイが故障中
8787728976 blocks super 1.0

9. RAID5のmd(マルチプルデバイス)を強制的に有効にする

10. 故障中のmdを停止

# mdadm --stop /dev/md126

mdadm: stopped /dev/md126

11. mdを強制的に有効にする

# mdadm -A /dev/md126 -u a9ea7400:8a721900:43987400:16e3fa00 --run --force ★2.4で確認したARRAY UUIDを指定

mdadm: /dev/md126 has been started with 3 drives (out of 4).

12. マルチプルデバイスの状態確認

# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md126 : active raid5 sdd3[0] sdc3[4] sde3[2]
8787728832 blocks super 1.0 level 5, 64k chunk, algorithm 2 [4/3] [U_UU]★HDD4台中3台で稼働

13. mdをマウント

# mkdir /a ★/a というマウントポイントを作成
# mount /dev/md126 /a ★md126を/a にマウント

14. マウント状態確認

# df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/live-rw 5.4G 4.5G 907M 84% /
tmpfs 3.9G 272K 3.9G 1% /dev/shm
/dev/sr0 1.7G 1.7G 0 100% /mnt/live
varcacheyum 3.9G 0 3.9G 0% /var/cache/yum
/tmp 3.9G 84K 3.9G 1% /tmp
vartmp 3.9G 1.5M 3.9G 1% /var/tmp
/dev/md126 8.2T 4.1T 4.2T 50% /a ★マウントしている

ちなみに、ファイルシステムはxfsでした。

15. ファイルシステムを修復

# xfs_repair -v /dev/md126
~出力が長いので略~

16. 救出先のHDDを接続

17. 接続しましょう

18. データを救出

19. GUIでコピーするなり、cpコマンドでコピーするなり、がんばりましょう

20. 救出できないファイルや故障セクタにアクセスしようとした場合、mdが再度故障状態になるので、手順3から再実行する。

21. 根気よく繰り返す。

私の場合、上記でなんとかなりましたが、環境や障害状況によると思うので、臨機応変にがんばりましょう。