ハードウェアが壊れて起動しなくなったLinux をハードディスクのデータを抜き出して仮想マシン上で起動

LINEで送る
Pocket

社内で使っていた共有サーバが起動しなくなった。HDD が壊れたのであれば、バックアップを取っていなければ復旧出来ませんが。HDD以外の機器が壊れたのであれば、HDDのデータを仮想環境に持ってくれば復旧することができます。

ここでは、Ubuntu12.04サーバが壊れたのでUbuntu15.10の日本語Remixを使用して復旧させる過程を解説していきますが、CentOS6.x でも同様の方法で復旧させる事が出来る事を確認しました。

まず、HDDからデータを吸い出すために、家電量販店などで売られているIDE/SATAのHDDをUSB HDDに変換出来るケーブルを購入します。

移行元と同等サイズのディスクサイズを仮想環境に設定して、仮想環境でUbuntu のISOをライブモードで起動します。

virtualboxを起動するユーザがvboxusersグループに所属していないと、virtualboxのUSB機器の一覧が表示されないので、ユーザをvboxusersグループに追加しておきます。

$ sudo gpasswd -a username vboxusers

virtualboxの場合、[デバイス]->[USB]より仮想環境へ既存のHDDを認識させます。Vmware は自動で認識します。

仮想環境のHDDのパーティション構成を既存のHDDと同じ構成のする為にパーティションを設定するツールgpartedを起動します。gpartedは、Dashのホーム検索よりgpartedと入力して起動します。

* /dev/sda が仮想環境のHDD, /dev/sdb が既存のHDDとして認識されているものとします。

gpartedの右上のプルタブより既存のHDDと仮想環境のHDDが切り替えられるので、既存の構成を参照しながら、gpartedの[デバイス]->[パーティションテーブルの作成]、[msdos] を選択。[パーティション]->[新規]よりパーティションを同じ構成に作成していきます。

設定完了後、[編集]->[保留中の全ての操作を適用する]より変更を適用します。

Ubuntu12.04のパーティション設定を自動でインストールした場合以下のパーティション構成でインストールされます。

パーティション ファイルシステム マウントポイント
/dev/sda1       ext2            /boot
/dev/sda2 拡張パーティション
/dev/sda5       lvm2            ubuntu-vg (ボリュームグループ)
                 |
                 |------- root                  論理ボリューム
                 |
                 -------- swap_1                論理ボリューム

Dashのホーム検索よりterminalと入力してコンソールを起動します。

/dev/sda1 を ext2 ファイルシステムにフォーマットします。

$ sudo  mkfs.ext2 /dev/sda1
:
Filesystem UUID: 98d45c1f-69c5-4874-876c-ef8cd78f2e57       ext2 ファイルシステムの UUID

/dev/sda5 をボリュームグループ ubuntu-new として物理ボリュームに登録します。

$ sudo pvcreate /dev/sda5
Replacing dev /dev/sda5 pvid yoLpkvaTzXY0TsWZkzaCDRiVVy1Qsk8a with dev /dev/sda5 pvid USu9U01QWSYBH2ITcvNUI0dI2sWuvOaU
Physical volume "/dev/sda5" successfully created
$ sudo vgcreate ubuntu-new /dev/sda5

ubuntu-new に論理ボリュームを作成します。

ディスクサイズ  論理ボリューム名 ボリュームグループ名
$ sudo lvcreate -L 15.76g -n root ubuntu-new
Rounding up size to full physical extent 15.76 GiB
Logical volume "root" created.
100%FREE は、残りディスク全てを割り当てます。
$ sudo lvcreate -l 100%FREE -n swap_1 ubuntu-new
Logical volume "swap_1" created.

既存のHDDのデータを仮想のHDDにコピーします。

ext4 ファイルシステムと swap領域を作成します。
$ sudo mkfs.ext4 /dev/ubuntu-new/root
$ sudo mkswap /dev/ubuntu-new/swap_1
ディレクトを作成します。
$ sudo  mkdir /mnt/old
$ sudo  mkdir /mnt/new
既存HDDの論理ボリュームrootを /mnt/old/ に、仮想HDDの論理ボリュームrootを/mnt/new/にマウントします。
$ sudo  mount /dev/ubuntu-vg/root /mnt/old/
$ sudo  mount /dev/ubuntu-new/root /mnt/new/
データを全てコピーします。(CentOSの場合、/mnt/old/配下に.で始まる隠しファイルがある場合は個別にコピーします。)
$ sudo  cp -rp /mnt/old/* /mnt/new/

同様に/bootのデータもコピーします。

$ sudo mount /dev/sdb1 /mnt/old/boot/
$ sudo mount /dev/sda1 /mnt/new/boot/
$ sudo cp -rp /mnt/old/boot/* /mnt/new/boot/   (CentOSの場合、/mnt/old/boot/配下に.で始まる隠しファイルがある場合は個別にコピーします。)

ファイルシステム、LVMを新規作成しているので、UUID が変更されています。コピーされた仮想HDDの/etc/fstab、/boot/grub/grub.cfgの情報を変更します。変更が必要な箇所は以下の通りですが、ファイル内に複数箇所同様の設定項目があるので、全ての文字列を置換します。

[/mnt/new/etc/fstab]

:
/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=30169321-a7cf-4cba-8977-3f550e02843a /boot           ext2    defaults        0       2
/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0

[/mnt/new/boot/grub/grub.cfg]

:
set root='lvmid/qtve8S-hixd-eoXv-JaGt-oZeL-9Zo9-ZjQQlf/PWstwr-s2zk-cTfw-xjG6-iBNT-1Prg-E8lvGa'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='lvmid/qtve8S-hixd-eoXv-JaGt-oZeL-9Zo9-ZjQQlf/PWstwr-s2zk-cTfw-xjG6-iBNT-1Prg-E8lvGa'  52dd7cc8-a8b2-47fe-9c52-1ebe724394cd
else
search --no-floppy --fs-uuid --set=root 52dd7cc8-a8b2-47fe-9c52-1ebe724394cd
fi
font="/usr/share/grub/unicode.pf2"
fi
:
linux   /vmlinuz-3.16.0-30-generic root=/dev/mapper/ubuntu--new-root ro
:

ubuntu–vg-root -> ubuntu–new-root ボリュームグループ名-論理ボリューム名
ubuntu–vg-swap_1 -> ubuntu–new-swap_1 ボリュームグループ名-論理ボリューム名

30169321-a7cf-4cba-8977-3f550e02843a /deb/sdb1 の ext2 UUID を /dev/sda1 の ext2 UUIDへ
52dd7cc8-a8b2-47fe-9c52-1ebe724394cd /dev/mapper/ubuntu–vg-root ext4 UUID を /dev/mapper/ubuntu–new-root ext4 UUID へ。
PWstwr-s2zk-cTfw-xjG6-iBNT-1Prg-E8lvGa /dev/mapper/ubuntu–vg-root LV UUID を /dev/mapper/ubuntu–new-root LV UUID へ。
qtve8S-hixd-eoXv-JaGt-oZeL-9Zo9-ZjQQlf ubuntu-vg の VG UUID を ubuntu-new の VG UUID へ。

ファイルシステムの UUID は、blkid コマンドで確認します。
VMのUUID は、lvdisplay、vgdisplay で確認することができます。

$ sudo blkid
$ sudo lvdisplay
$ sudo vgdisplay

最後にgurub のインストールを行います。

/mnt/new/boot を umount します。

$ sudo umount /mnt/new/boot

/dev proc sys ファイルシステムを新規のHDDにマウントします。

$ sudo mount -o bind /dev /mnt/new/dev/
$ sudo mount -t proc proc /mnt/new/proc/
$ sudo mount -t sysfs sys /mnt/new/sys/

root の環境を移動します。

$ sudo chroot /mnt/new/

/dev/sda1 を /boot/ に mount します。

# mount /dev/sda1 /boot/

gurb をインストールします。

# grub-install /dev/sda

root 環境を元に戻し、すステムを終了します。

# exit
$ sudo poweroff

USBとして認識されているHDDを抜き、起動すれば仮想環境上に、PC上で動いていたシステムが起動します。

*CentOS の場合、fstab, grub.cfg 以外に、ifcfg-xxx ファイルの修正も必要です。

/mnt/new/etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=08:00:27:68:61:34                 <- HWADDR の値を ipコマンドで確認し変更します。
↓
HWADDR=08:00:27:c9:8b:81
$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:c9:8b:81 brd ff:ff:ff:ff:ff:ff             <- 08:00:27:c9:8b:81
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください