LinuxでLVMのデータを抜き出す方法
keyword: Linux,LVM,HDD,抜き出し
最近久しぶりにLinux(CentOS)をインストールする機会がありまして、いつの間にかLinuxにもLVM(論理ボリュームマネージャ)という概念が導入されていることを知りました。LVMを使うとソフトウェアRAIDが組めたりパーティションのサイズを変えられたりできるので便利といえば便利です。が、最近ちょっとした事件がありました。オペミスでOSが死亡してしまい、データだけでも救出しようとしたときの話しです。旧来の方法であれば、別HDDにLinuxを入れて、OSが死亡したHDDのデータ用パーティションをmountすれば簡単にデータが抽出できたのですが、LVMだとちょっと面倒くさいです。そこで今回はLinuxでLVMのデータを抜き出す方法をまとめてみました。(今回は多分一部ケアレスミスが含まれていると思います。その場合ご指摘いただけたら幸いです)
【LVMについて】
これからやろうとする作業がちんぷんかんぷんにならないためにも、まずはLVMが何かを知っておいたほうがよいです。とは言えここをご覧になっている方の多くは緊急事態なときでしょうから簡単に触れておきます。
まずLVMには3つの構成要素、PV(PhysicalVolume),VG(Volume Group),LV(Logical Volume)があるのを押さえましょう。意味は読んで字のごとくです。scanしてみるとこんな感じです。
# pvscan
PV /dev/sda2 VG VolGroup00 lvm2 [279.34 GB / 32.00 MB free]
Total: 1 [279.34 GB] / in use: 1 [279.34 GB] / in no VG: 0 [0 ]
# vgscan
Reading all physical volumes. This may take a while...
Found volume group "VolGroup00" using metadata type lvm2
# lvscan
ACTIVE '/dev/VolGroup00/LogVol00' [277.38 GB] inherit
ACTIVE '/dev/VolGroup00/LogVol01' [1.94 GB] inherit
dfを実行してみるとこんな感じです。
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00 286285288 21927512 249815340 9% /
/dev/sda1 101086 19070 76797 20% /boot
none 512528 0 512528 0% /dev/shm
LVMは「/dev/mapper/VolGroup00-LogVol00」のように見えます。すなわちLVMでは、PV作って、VG作って、LVまで作らないとmountできないというわけですね。
【同じVG名がついてしまっている場合】
さて、OS用HDDとデータ用HDDをそれぞれ取り付けてLinux起動し、vgscanをしてみると本来であれば両HDDのVG情報が認識されてくるんですが、もし「VolGroup00」1つしか認識されてこないとしたら、それは両HDDでそれぞれ同じボリュームグループ名が付いてしまっている状態です。OSインストール時に何も考えずにインストールしてしまっている多くの人は大抵ここで問題となります。そのような場合はどちらかのボリュームグループ名を変更してあげる必要があります。
この場合よく行われるのはFedoraCoreのレスキューCDを使う方法です。データ用HDDだけを取り付けレスキューCDを立ち上げます。そして
# lvm vgchange -an VolGroup00" <- VGを無効化する
# lvm vgrename VolGroup00 VolNewGroup00 <- 名前を変更する
# lvm vgchange -ay VolNewGroup00" <- VGを有効化する
とします。
【LVMのマウント】
OS用HDDとデータ用HDDをそれぞれ取り付けてLinux起動し、vgscanをしてみてうまくVG情報が見えれば成功です。そうしたら
# vgchange -ay VolNewGroup00" <- VGを有効化する
# mkdir /mnt/data
# mount /dev/VolNewGroup00/LogVol00 /mnt/data
# ls /mnt/data
でデータが見えたら大成功です。LVM、便利だけど面倒ですね。
「サーバ・OS」カテゴリの記事
- puttyをタブモードで使う (2011.06.17)
- Linuxで突然キー入力が受け付けられなくなる問題の対策(2011.05.26)
- WindowsXP HomeをPro化してリモートデスクトップを有効にする方法(2009.12.08)
- 「生きてる」自宅サーバー運用(2009.07.30)
- 古いログを別のディレクトリに自動的に移動する方法(2010.11.01)

Comments
>【同じVG名がついてしまっている場合】
このエントリがとても助かりました。lv* vg* とかのコマンドがlvmで扱える事を知らなかったので・・・。
# lvm vgrename VolGroup00 VolNewGroup00 <- 名前を変更する
# lvm vgchange -ay VolNewGroup00" <- VGを有効化する
2ヵ所ほどtypoあります(`・ω・´)ゞ
Posted by: wakya | July 14, 2006 at 08:21 PM
大いに参考にさせていただきました.有益な情報をありがとうございます.
>【同じVG名がついてしまっている場合】
私の場合, vgdisplay でデータ用HDDのvolume groupのUUIDを調べ,そのままの状態で(レスキューCDなど使わず)
# vgrename VolGroup_Data
# vgchange -ay VolGroup_Data
# mount /dev/VolGroup_Data/LogVol00 /mnt
だけで済みました.
Posted by: のだ | November 25, 2009 at 01:28 PM
あれ,サニタイズされた?
# vgrename <UUID> VolGroup_Data
と書きたかったです.ここで<UUID>はUUIDの実際の値に置き換えます.
Posted by: のだ | November 25, 2009 at 01:30 PM
壊したvinelinux6からデータ救出するために、大変参考になりました。
本当にありがとうございました。
Posted by: combatsheep | January 21, 2012 at 06:28 PM