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を立ち上げます。そして
# vgchange -an VolGroup00" <- VGを無効化する
# vgrename VolGroup00 VolNewGroup00 <- 名前を変更する
# 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、便利だけど面倒ですね。
Comments
>【同じVG名がついてしまっている場合】
このエントリがとても助かりました。lv* vg* とかのコマンドがlvmで扱える事を知らなかったので・・・。
# lvm vgrename VolGroup00 VolNewGroup00 <- 名前を変更する
# lvm vgchange -ay VolNewGroup00" <- VGを有効化する
2ヵ所ほどtypoあります(`・ω・´)ゞ
Posted by: wakya | July 14, 2006 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 01:28 PM
あれ,サニタイズされた?
# vgrename <UUID> VolGroup_Data
と書きたかったです.ここで<UUID>はUUIDの実際の値に置き換えます.
Posted by: のだ | November 25, 2009 01:30 PM
壊したvinelinux6からデータ救出するために、大変参考になりました。
本当にありがとうございました。
Posted by: combatsheep | January 21, 2012 06:28 PM
かなり古いエントリへの質問で失礼いたします。
実は、仕事で使っていたサーバが死んでしまい、LVMからデータを抜き出したいと考え四苦八苦しております。
といいますのも、
lvm pvscan の実行結果では
PV /dev/sda2 lvm2 [8.01GiB]
PV /dev/sda5 lvm2 [139.73 GiB]
などと結果が出力されるのですが、
vgscan lvscan はいずれも、
Incorrect metadata area header checksum
と表示され、
No volume groups found
となってしまいます。
lvm pvck /dev/sda2
を実行すると、
Incorrect metadata area header checksum
Found label on /dev/sda2, sector 1, type=LVM2 001〓
Found text metadata area: offset=4096, size=192512
Incorrect metadata area header checksum
と表示されます。(〓は文字化けによる変な記号が入ってます)
いずれも、metadata areaが壊れてしまった事により、LVMそのものを正常に認識できないと言うことかな、という理解をしましたが、これ以上どのように対処すれば良いか分からず悩んで居ます。
(WEBを探すと、他のページも含めて、scanできる状態からの復旧方法はいくつか見つかったのですが、scanできない状態からの情報は全く見当たらず…)
もし、この状況から何か対処できる方法があるようでしたら、お教えいただけないでしょうか。
よろしくお願いします。
Posted by: やすと | January 11, 2014 09:22 PM
大変な事態になっていますね。
私はこの障害の経験がないので、ちょっと検索してみましたが、このあたり参考にならないでしょうか。
以下で検索
”停電で死んだHDDの復旧作業”
※直リンクが貼れないようなので・・・。
Posted by: sanonosa | January 12, 2014 01:52 PM
ご返信いただいておきながら返事が遅れましてすみません。
その後、色々と調べた結果、同じサイトに行きつきまして、そちらを参考に何とか一定量のデータ復旧ができました。
行った作業の詳細につきましては、自分のブログに書きましたので、もしご興味があればご覧ください。(”LVMを使ったディスクの復旧手順 ”で検索いただければ出てきます)
このたびはありがとうございました。
Posted by: やすと | January 29, 2014 05:56 PM