fu7mu4’s diary

はてなダイアリーから移転しました。

LVM のハードディスクが見れない->なんとかした

前から VineLinux のハードディスクの中身がみれなくなってしまっていたんだけれども、 よくよく考えると、LVMだったから復旧方法が完全に間違っていたことがわかったのでやりなおすことにした。最終的には、全部みることができた。よかった。

準備

まず、ハードディスクのファイルシステムがいってしまって VineLinux 6.2 が起動しなくなってしまった。
dd でハードディスク全体のバックアップをとることができたので、全力でせめることができる。

USBから起動できる、ubuntuを用意して、(インストールせずに)「試す」で起動し、端末を起動する。
まずは情報を収集。

sudo fdisk -l

Disk /dev/sda: 160.0GB,
ヘッド 255, セクタ 63, シリンダ 19457, 合計312581808 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理/物理): 512バイト/512 バイト
I/O サイズ (最小/推奨): 512バイト/512バイト
ディスク識別子: 0x0006c9e6

バイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 63 417689 208813+ 83 Linux
/dev/sda2 417690 31257604 156079507+ 8e Linux LVM

/dev/sdb もあったが、今起動している、ubuntu のはいったUSBなので 省略。

LVM の復旧

sudo modprobe dm-mod
sudo modprobe dm-mirror
sudo modprobe dm-snapshot
sudo vgchange -ay

そうすると、ubuntu が 「sudo: vgchange: コマンドが見つかりません」といってくるので、すぐに

sudo apt-get install lvm2

aptで追加インストールする。USBのLinuxだから、man page関連で文句をいわれたが気にしない。もういちど実行。

sudo vgchange -ay

2 logical volume(s) in volume group "VolGroup00" now activate

これで VolGroup00 が有効になった。

sudo lvscan

ACTIVATE '/dev/VolGroup00/LogVol00' [144.88 GiB] inhert
ACTIVATE '/dev/VolGroup00/LogVol01' [3.94 GiB] inhert

サイズからして LogVol00 が /dev/sda2/ (復旧予定の元/) になるはず。

VineLinux 6.2 のデフォルトファイルシステムext4だから、とりあえず、実行しないフラグつきで。

sudo mkfs.ext4 -n /dev/VolGroup00/LogVol00

mkefs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
9494528 inodes, 37978112 blocks
1898905 blocks (5.00%) reserved for the super user
First data blocks=0
1159 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Superblock が 32768 からはじまっていることがわかり、ブロックサイズは 4096なので、fsckに頼ることにした。もう、バックアップがあればやりたい放題だな。

sudo fsck.ext4 -y -b 32768 -B 4096 /dev/VolGroup00/LogVol00 

だーっと表示がながれて終るのを待つ。おわらないような気がしてびびった。

sudo mount /dev/VolGroup00/LogVol00 /mnt

これで、 /mnt にマウントできた。壊れたファイルが /mnt/Lost+Foundに移動するはずなんだけれど、全くなく、すべて見ることができた。
ユーザーのホームだけが必要だったので、/mnt/home/foo を、chown -Rで所有者を変更してみれるようにしてから、tarにまとめた。
このとき設定ファイルの一部にコロンを使っているのがあったので、別のUSBにそのままコピーしたらエラーがでた。