Memorandum

覚書

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アレイを構成できなかった.