こんにちは、Workaholicです。
今回は起動できなくなったLinuxからのデータ救出について解説します。
経緯は省きますが急な電源切れにより論理的な破損で起動できなくなったLinux機(CentOS7)が出来上がりました・・・
サーバの環境構築自体は手順があるので再構築可能なのですが、バックアックを後手にしていた為、サーバ上で直で修正した資産はバックアップが取れておらず、救出をする必要性が出てきてしまいました。
救出できそうな手段を複数試してみましたので参考にしてみてください
言わずもがな、Windows機では読み込みが出来ないので専用のソフトかLinux機にマウントしてあげる必要性があります。
①【救出失敗】専用ツールを使用する。



このソフトはEx2/3/4もxfsも対応してるからでいいじゃないか!と思ったのですが、
xfsは「Linux Reader Pro™ license is required to obtain full access to files.」との事で無料ではExportは出来ないようです。念の為インストールをして確認してみましたがやはり読み込みのみで、Exportには有料のライセンス登録が必要でした(30USDだったかな?)
便利ですが他に方法がありそうなので今回はパスです。
※他にもLinuxのファイルシステムを救出するツールはあるのですが(Ext3Fsd等)xfsで使用不可でした。
②【救出成功】Linux機にマウントして救出
面倒くさがらずに、素直にLinux機にmountした方が速いと思いこの方法で試すことしました。
使用したOSは故障したLinux機と同じくCentOS7です。
・HDDをUSBで接続
故障したLinux機のHDDを取り外し、別のLinux機にSATA→USB変換で接続します。
接続後はUSBメモリをmountする時の要領で「dmesg」で接続を確認します。
# dmesg| grep sdb
[ 5103.204695] sd 4:0:0:0: [sdb] 625142444 512-byte logical blocks: (320 GB/298 GiB)
[ 5103.205814] sd 4:0:0:0: [sdb] Write Protect is off
[ 5103.205821] sd 4:0:0:0: [sdb] Mode Sense: 1f 00 00 00
[ 5103.206940] sd 4:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 5103.242827] sdb: sdb1 sdb2
[ 5103.256070] sd 4:0:0:0: [sdb] Attached SCSI disk
[ 5190.622250] XFS (sdb1): Mounting V5 Filesystem
[ 5191.798682] XFS (sdb1): Ending clean mount
[ 5282.877943] XFS (sdb1): Unmounting Filesystem
・mount・・・出来ない
そのままマウント使用すると怒られてしまいました。
LVMの領域はそのままマウントできませんでしたね。
# mount /dev/sdb2 /mnt
mount: unknown filesystem type 'LVM2_member'
・対象領域の確認
対象領域の確認をします。
「dmesg」で確認した通り「/dev/sdb」が存在するはずです。
# fdisk -l
↓OSがインストールされている領域
Disk /dev/sda: 160.0 GB, 160041885696 bytes, 312581808 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0005c3cd
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 312580095 155240448 8e Linux LVM
~略~
↓USBで接続したHDD
Disk /dev/sdb: 320.1 GB, 320072931328 bytes, 625142444 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000e48d5
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 * 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 625141759 311521280 8e Linux LVM
・VolumeGroupの変更
「pvs」コマンドを実行し物理ボリュームの情報を確認します。
今回の対象領域は「/dev/sdb2」なので下の方ですね。
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <148.05g 4.00m
/dev/sdb2 centos lvm2 a-- <297.09g 4.00m
VolumeGroup名の変更にVG UUIDが必要な為、「vgdisplay」コマンドを実行します。
# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <297.09 GiB
PE Size 4.00 MiB
Total PE 76054
Alloc PE / Size 76053 / 297.08 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID vZPSci-fPHF-QrI5-wPea-w8yD-ckEY-lHACs7
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <148.05 GiB
PE Size 4.00 MiB
Total PE 37900
Alloc PE / Size 37899 / 148.04 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID Ec6ZyB-Zbaf-2Mr4-6nGM-0VB5-xWZD-dYQtCT
「vgrename」コマンドを使用してVolumeGroup名を変更します。
コマンドは「vgrename <VG UUID> <変更後の名前>」です。今回は対象領域を「centos_old」とします。
コマンド実行後「pvs」コマンドを実行してVolumeGroup名が変更された事を確認します。
#vgrename vZPSci-fPHF-QrI5-wPea-w8yD-ckEY-lHACs7 centos_old
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <148.05g 4.00m
/dev/sdb2 centos_old lvm2 a-- <297.09g 4.00m
・ボリュームのACTIVE化
ボリュームの状態を確認するとUSBで接続したHDDは「inactive」になっていましたので「vgchange」コマンドで「ACTIVE」化します。
# lvscan
inactive '/dev/centos_old/swap' [2.00 GiB] inherit
inactive '/dev/centos_old/home' [245.08 GiB] inherit
inactive '/dev/centos_old/root' [50.00 GiB] inherit
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/home' [96.04 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit
[root@localhost mnt]#
# vgchange -ay
3 logical volume(s) in volume group "centos_old" now active
3 logical volume(s) in volume group "centos" now active
[root@localhost mnt]#
[root@localhost mnt]#
# lvscan
ACTIVE '/dev/centos_old/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos_old/home' [245.08 GiB] inherit
ACTIVE '/dev/centos_old/root' [50.00 GiB] inherit
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/home' [96.04 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit
[root@localhost mnt]#
[root@localhost mnt]#
・mount
これでmount出来る準備が整いました。
救出したいデータがある領域を、適当なディレクトリにmountしましょう。
これで怒られずにマウントが出来るはずです!
# mount /dev/centos_old/root /mnt
・最後に
今回は実機のLinux機があった為そちらを利用しましたが、その環境が無い方はVMware等の仮想マシンにLinuxをインストールすれば同様の事が出来るはずで(未検証)あれこれソフトで試すよりLinux機にマウントする方が速く確実なのでこの方法をオススメします。
今回はうまくデータの救出が出来ましたが、物理破損が起きた場合には救出はできません。
一番良いのは最初に定期的なバックアップをする仕組みを構築することです。
私のように事が起きてから慌てないようにしましょう。
コメント