RAID1(ミラーリング)のデータをディスク1つから復旧する
・状況
ソフトウェアRAID1(ミラーリング)構成していたHP ProLiant MicroServer(CentOS)が停電でダメになったのでディスク内のデータを取り出した際の記録.
・対処
手元にノートパソコンしかなかったので,RAID1を再構成して取り出す方法がとれなかった.1つのディスクからデータを取り出す.ディスクをSATA-USB変換アダプタでlinuxが動作するPCに接続し,マウントすればデータを取り出せる,と思いきやそう簡単には行かなかった.
まずディスクをUSBで接続しデバイス名を確認する.
$ dmesg | tail
[ 83.891133] sd 6:0:0:0: [sdc] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[ 83.891430] sd 6:0:0:0: [sdc] Write Protect is off
[ 83.891437] sd 6:0:0:0: [sdc] Mode Sense: 03 00 00 00
[ 83.891704] sd 6:0:0:0: [sdc] No Caching mode page found
[ 83.891708] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 83.966917] sdc: sdc1 sdc2 sdc3 sdc4 < sdc5 sdc6 sdc7 sdc8 sdc9 >
[ 83.968348] sd 6:0:0:0: [sdc] Attached SCSI disk
デバイスsdcとして認識された模様.
次にパーティションを確認し,どのパーティションがサーバーで/homeにマウントされていたのかを確認する.
$ fdisk -l /dev/sdc
Disk /dev/sdc: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000b6926
Device Boot Start End Blocks Id System
/dev/sdc1 * 2048 616447 307200 fd Linux raid autodetect
/dev/sdc2 616448 4712447 2048000 fd Linux raid autodetect
/dev/sdc3 4712448 8808447 2048000 fd Linux raid autodetect
/dev/sdc4 8808448 976773119 483982336 5 Extended
/dev/sdc5 8812544 25196543 8192000 fd Linux raid autodetect
/dev/sdc6 25198592 35438591 5120000 fd Linux raid autodetect
/dev/sdc7 35440640 36055039 307200 fd Linux raid autodetect
/dev/sdc8 36057088 56537087 10240000 fd Linux raid autodetect
/dev/sdc9 56539136 957659135 450560000 fd Linux raid autodetect
一番サイズが大きいsdc9が目的のデバイスだろうと検討をつける.あとはこれを適当なディレクトリにマウントすれば良いはず……だが
# mount /dev/sdc9 /media
mount: unknown filesystem type 'linux_raid_member'
問題発生.あれ?マウントできない.ファイルシステムがイカンと言っているので
以下のも試してみる.
# mount -t ext4 /dev/sdc9 /media
mount: /dev/sdc9 is already mounted or /media busy
already mount?? ここでGoogle先生に聞いてみると,どうやらディスク1つでRAIDボリュームを作成し,その上で マウントする必要があるらしい.そこでRAID構成コマンドmdadmを使う.
# mdadm --assemble /dev/md0 /dev/sdc9
mdadm: /dev/sdc9 is busy - skipping
問題発生.RAIDアレイmd0が作れない.
このあたりでかなり焦り始める.落ち着いて現在の状態を確認.
# cat /proc/diskstats
8 0 sda 10323 10334 642128 29573 9511 8888 427468 37530 0 25283 67103
8 1 sda1 303 3288 4914 240 1 0 2 0 0 233 240
8 2 sda2 109 863 1980 103 0 0 0 0 0 103 103
8 3 sda3 9894 6179 635066 29230 9499 8888 427466 37486 0 25203 66716
8 16 sdb 323 332 5240 170 0 0 0 0 0 110 170
8 17 sdb1 106 110 1728 83 0 0 0 0 0 73 83
8 18 sdb2 100 112 1696 80 0 0 0 0 0 80 80
8 32 sdc 720 108 5333 6173 0 0 0 0 0 1146 6173
8 33 sdc1 61 0 432 636 0 0 0 0 0 633 636
8 34 sdc2 57 0 400 606 0 0 0 0 0 606 606
8 35 sdc3 79 0 422 513 0 0 0 0 0 513 513
8 36 sdc4 5 0 16 376 0 0 0 0 0 376 376
8 37 sdc5 79 0 422 773 0 0 0 0 0 773 773
8 38 sdc6 79 0 422 816 0 0 0 0 0 756 816
8 39 sdc7 57 0 400 630 0 0 0 0 0 623 630
8 40 sdc8 79 0 422 733 0 0 0 0 0 710 733
8 41 sdc9 98 0 525 773 0 0 0 0 0 730 773
9 127 md127 0 0 0 0 0 0 0 0 0 0 0
9 126 md126 0 0 0 0 0 0 0 0 0 0 0
9 125 md125 0 0 0 0 0 0 0 0 0 0 0
9 124 md124 0 0 0 0 0 0 0 0 0 0 0
9 123 md123 0 0 0 0 0 0 0 0 0 0 0
9 122 md122 0 0 0 0 0 0 0 0 0 0 0
9 121 md121 0 0 0 0 0 0 0 0 0 0 0
9 120 md120 0 0 0 0 0 0 0 0 0 0 0
md12*ってなんぞや.謎のRAIDアレイが存在する.
データ取り出しに使っているノートPCではRAID構成などしていない.
# cat /proc/mdstat
Personalities :
md120 : inactive sdc5[1](S)
8187904 blocks super 1.1
md121 : inactive sdc1[1](S)
307188 blocks super 1.0
md122 : inactive sdc2[1](S)
2046976 blocks super 1.1
md123 : inactive sdc3[1](S)
2046976 blocks super 1.1
md124 : inactive sdc7[1](S)
306944 blocks super 1.1
md125 : inactive sdc8[1](S)
10231808 blocks super 1.1
md126 : inactive sdc9[1](S)
450428928 blocks super 1.1
md127 : inactive sdc6[1](S)
5115904 blocks super 1.1
unused devices: <none>
なんなんだこいつらは.
inactiveになっているので,activeにしたい.
# mdadm --run /dev/md126
mdadm: started array /dev/md/hogehoge:9
だめ.
一度謎のRAIDアレイを全て停止させる.
# mdadm --stop --scan
再度RAIDを構築に挑戦する.
# mdadm --assemble /dev/md0 /dev/sdc9
mdadm: /dev/md0 assembled from 1 drive - need all 2 to start it (use --run to insist).
# mdadm --run /dev/md0
mdadm: started array /dev/md0
# mount /dev/md0 /media
できました.
ディスクを接続した時点で自動的に生成された
md12*たちが一体何なのか全くわからない.
これが生成されていたために上手くRAIDアレイを構成できなかった.