(2014.12.15)
mdではなく, LVM RAID Logical Volumeでの, ディスククラッシュとその復旧手順。
参考:
次のように, root LV をミラー化して, 2つのHDD で動いているとする。
# lvs -a -o vg_name,name,copy_percent,devices,size VG LV Cpy%Sync Devices LSize fedora root 100.00 root_rimage_0(0),root_rimage_1(0) 15.00g fedora [root_rimage_0] /dev/sda2(512) 15.00g fedora [root_rimage_1] /dev/sdb2(1) 15.00g fedora [root_rmeta_0] /dev/sda2(4352) 4.00m fedora [root_rmeta_1] /dev/sdb2(0) 4.00m fedora swap /dev/sda2(0) 2.00g
エラーが発生した場合の、状況確認、ディスクのエラーチェックについては, こちらのページ; Linuxディスクドライブのエラー検査
ここから, sdb を取り外してみる.
lvsコマンドで見ると, LV は [root_rimage_0], [root_rimage_1] の二つとも生きているようになっているが, sdb のUUID が missing として警告が表示される.
# lvs -a PV Efy2k4-ZdE3-7kLP-Y11c-eKzu-6aBp-sSnXy3 not recognised. Is the device missing? PV Efy2k4-ZdE3-7kLP-Y11c-eKzu-6aBp-sSnXy3 not recognised. Is the device missing? LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert root fedora rwi-aor-p- 15.00g 100.00 [root_rimage_0] fedora iwi-aor--- 15.00g [root_rimage_1] fedora iwi-a-r-p- 15.00g [root_rmeta_0] fedora ewi-aor--- 4.00m [root_rmeta_1] fedora ewi-a-r-p- 4.00m swap fedora -wi-ao---- 2.00g
実際にはあまり想定しにくいが, HDDが復活したケースとして, 同じディスクドライブを接続してみる。
# lvs -a -o vg_name,name,copy_percent,devices,size VG LV Cpy%Sync Devices LSize fedora root 100.00 root_rimage_0(0),root_rimage_1(0) 15.00g fedora [root_rimage_0] /dev/sda2(512) 15.00g fedora [root_rimage_1] /dev/sdb2(1) 15.00g fedora [root_rmeta_0] /dev/sda2(4352) 4.00m fedora [root_rmeta_1] /dev/sdb2(0) 4.00m fedora swap /dev/sda2(0) 2.00g
治った. 1台のときに書き込んだ内容も, 壊れてない.
LV は HDDを取り外してもその段階では除去されないので、元に戻せる。
普通はこちらのケースだろう。
電源をいったん落とし, あたらしいHDDを接続して再起動する.
pvsコマンドで表示すると, 元の sdb が missing. 下で表示されているのは, 新しいHDD.
# pvs -a PV Efy2k4-ZdE3-7kLP-Y11c-eKzu-6aBp-sSnXy3 not recognised. Is the device missing? PV Efy2k4-ZdE3-7kLP-Y11c-eKzu-6aBp-sSnXy3 not recognised. Is the device missing? PV VG Fmt Attr PSize PFree /dev/fedora/root --- 0 0 /dev/fedora/swap --- 0 0 /dev/sda1 --- 0 0 /dev/sda2 fedora lvm2 a-- 19.51g 2.50g /dev/sdb --- 0 0
復旧させるには, 2つのステップを行えばいい. PVの除去と, あたらしいPVのVGへの追加。
PVの除去は pvremoveコマンドではなく, vgreduceコマンド.
# vgreduce --removemissing --force fedora PV Efy2k4-ZdE3-7kLP-Y11c-eKzu-6aBp-sSnXy3 not recognised. Is the device missing? PV Efy2k4-ZdE3-7kLP-Y11c-eKzu-6aBp-sSnXy3 not recognised. Is the device missing? Wrote out consistent volume group fedora
生きてるディスクドライブを参考にして, 必要な領域が取れるようにパーティションを切る。
# fdisk /dev/sdb
もりもり切っていく。
コマンド (m でヘルプ): p Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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: 0x027f8d33 デバイス ブート Start 最後から Blocks Id System /dev/sdb1 * 2048 1026047 512000 83 Linux /dev/sdb2 1026048 41943039 20458496 8e Linux LVM
PVを作る.
# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created
作ったPVをVGに加える. vgextendコマンド.
# vgextend fedora /dev/sdb2 Volume group "fedora" successfully extended
LVは, 元のHDD上にイメージが残ったことになっているので、LVのミラー化をいったん解消して, 再度ミラー化する.
ミラー化を解消。-m 0オプション.
# lvconvert -v -m 0 fedora/root
sda だけに載っていることを確認。
# lvs -a -o vg_name,name,copy_percent,devices,size VG LV Cpy%Sync Devices LSize fedora root /dev/sda2(512) 15.00g fedora swap /dev/sda2(0) 2.00g
再びRAID 1構成に。
# lvconvert -v --type raid1 -m 1 fedora/root
自動的にデータの同期が開始される。
# lvs -a -o vg_name,name,copy_percent,devices,size VG LV Cpy%Sync Devices LSize fedora root 3.57 root_rimage_0(0),root_rimage_1(0) 15.00g fedora [root_rimage_0] /dev/sda2(512) 15.00g fedora [root_rimage_1] /dev/sdb2(1) 15.00g fedora [root_rmeta_0] /dev/sda2(4352) 4.00m fedora [root_rmeta_1] /dev/sdb2(0) 4.00m fedora swap /dev/sda2(0) 2.00g