起動できなくなったLinuxからデータを救出する。(xfsファイルシステム)

Uncategorized

こんにちは、Workaholicです。

今回は起動できなくなったLinuxからのデータ救出について解説します。
経緯は省きますが急な電源切れにより論理的な破損で起動できなくなったLinux機(CentOS7)が出来上がりました・・・
サーバの環境構築自体は手順があるので再構築可能なのですが、バックアックを後手にしていた為、サーバ上で直で修正した資産はバックアップが取れておらず、救出をする必要性が出てきてしまいました。
救出できそうな手段を複数試してみましたので参考にしてみてください

言わずもがな、Windows機では読み込みが出来ないので専用のソフトかLinux機にマウントしてあげる必要性があります。

①【救出失敗】専用ツールを使用する。

ねっこ
Freeware Linux Reader™ for Windows
Need to access files on Linux? Easy! Here is a freeware tool for extracting files from Ext2/Ext3/Ext4, HFS and ReiserFS partitions in Windows.
対応ファイルシステム

このソフトは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機にマウントする方が速く確実なのでこの方法をオススメします。

今回はうまくデータの救出が出来ましたが、物理破損が起きた場合には救出はできません。
一番良いのは最初に定期的なバックアップをする仕組みを構築することです。

私のように事が起きてから慌てないようにしましょう。

(Visited 930 times, 2 visits today)

コメント

タイトルとURLをコピーしました