LVMで使っていたドライブからデータを救出する

起動しなくなったCentOSのドライブを、同じマシンでCentOS再インストールした環境に接続してみる。
USBコンバータで接続したら、パーティションは見える。

# fdisk -l /dev/sda

Disk /dev/sda: 20.4 GB, 20496236544 bytes
255 heads, 63 sectors/track, 2491 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        2491    19904535   8e  Linux LVM

データはLVMの配下のパーティションに入っているので、内容まではすぐには見えない。
見ているsda1は/bootだ。

# pvscan
  WARNING: Duplicate VG name VolGroup00: Existing NfXxQs-lPIp-v5lD-77PG-rlAS-ZBJx-rEw06o (created here) takes precedence over 3TAHdQ-Ay8B-daPR-yVCf-vKQM-55J6-S908aL
  PV /dev/sda2   VG VolGroup00   lvm2 [18.97 GB / 0    free]
  PV /dev/hda2   VG VolGroup00   lvm2 [465.66 GB / 0    free]
  Total: 2 [484.62 GB] / in use: 2 [484.62 GB] / in no VG: 0 [0   ]

VG nameが重複していると怒られた。
sda2だけ名前変更ってできるのかな?
vgrenameのmanなんかを見ても、デバイス名渡しとかはできなさそう。
指定はVG nameだけなので、重複しているともう手も足もでないか。

# vgscan
  Reading all physical volumes.  This may take a while...
  WARNING: Duplicate VG name VolGroup00: Existing NfXxQs-lPIp-v5lD-77PG-rlAS-ZBJx-rEw06o (created here) takes precedence over 3TAHdQ-Ay8B-daPR-yVCf-vKQM-55J6-S908aL
  Found volume group "VolGroup00" using metadata type lvm2
  Found volume group "VolGroup00" using metadata type lvm2

# lvscan
  WARNING: Duplicate VG name VolGroup00: Existing NfXxQs-lPIp-v5lD-77PG-rlAS-ZBJx-rEw06o (created here) takes precedence over 3TAHdQ-Ay8B-daPR-yVCf-vKQM-55J6-S908aL
  ACTIVE            '/dev/VolGroup00/LogVol00' [465.16 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [512.00 MB] inherit

sdaのVGだけを変更したいが、このままオンザフライではできなさそう。


ぐぐったら、FedoraのレスキューCDでやるようにと書いてあった。
CentOSのCDでも同じだろうとテスト。


VIA C3なFTS-NASでは起動できない。
kernelロード後にリブートしてしまう。
kernelがi686なのに違いない... orz
そういうディストリビューションは嫌いだよ。


しょうがないので、再びマシンをバラして新しいドライブを外す。
サルベージHDDがUSBの場合は、インストーラーでは後でドライバを組み込んで認識させるのがめんどくさいので、自動認識するように最初から挿し込んでおく。
インストーラーCDで起動。
起動プロンプトにはlinux rescueと入力し、レスキューモードで起動。
言語選択は英語に。日本語で設定しても「ない」といわれてどうせ英語になってしまう。
キーボード選択はjp106に。これは日本語にしておかないとあとでやっかい。
もっとも、すでに手が覚えているので、わたしの場合は英語でも困らない。
"Setup Networking"はNo。
"Rescue"ではSkipを選ぶ。ここで他のを選ぶと、勝手にLVM領域をマウントされてしまい、アンマウントできなくなってしまうので、vgrenameができない。
小さいファイルだけなら、この状態で自動マウントさせてどこかにコピーすればいい。
プロンプト画面に落ちるので、そこからコマンド操作する。
VGの名前を確認して、名前変更、変更が反映されているのを確認。

# lvm vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2

# lvm vgrename VolGroup00 VG01
  /dev/hdc: open failed: Read-Only file sysytem
  Attempt to close device '/dev/hdc' which is not open
  Volume group "VolGroup00" successfully renamed to "VG01"

# lvm vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VG01" using metadata type lvm2

変更されたのが確認できた。
exitすると、マシンが再起動されるので、そこで強制終了する。


新しいハードディスクを再接続してマシンを組み上げ、起動する。
古いハードディスクをUSBコンバータ経由で接続する。

# pvscan
  PV /dev/sda2   VG VG01         lvm2 [18.97 GB / 0    free]
  PV /dev/hda2   VG VolGroup00   lvm2 [465.66 GB / 0    free]
  Total: 2 [484.62 GB] / in use: 2 [484.62 GB] / in no VG: 0 [0   ]

# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "VG01" using metadata type lvm2
  Found volume group "VolGroup00" using metadata type lvm2

# lvscan 
  inactive          '/dev/VG01/LogVol00' [18.47 GB] inherit
  inactive          '/dev/VG01/LogVol01' [512.00 MB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol00' [465.16 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [512.00 MB] inherit

ちゃんと見えている。
領域をアクティブにする。

# vgchange -ay VG01
  2 logical volume(s) in volume group "VG01" now active
# lvscan
  ACTIVE            '/dev/VG01/LogVol00' [18.47 GB] inherit
  ACTIVE            '/dev/VG01/LogVol01' [512.00 MB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol00' [465.16 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [512.00 MB] inherit

領域をマウント。目的のデータをコピー。

# mount /dev/VG01/LogVol00 /mnt/
# cp /mnt/root/Desktop/kernel_build.txt /root/Desktop/

このメモだけ助けたかったので、こんな大げさな話でなくてもよかったのだけど。


後始末。

# umount /mnt/
# vgchange -an VG01
  0 logical volume(s) in volume group "VG01" now active
# lvscan
  inactive          '/dev/VG01/LogVol00' [18.47 GB] inherit
  inactive          '/dev/VG01/LogVol01' [512.00 MB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol00' [465.16 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [512.00 MB] inherit

USBを抜いて作業完了。