
社内で使っていた共有サーバが起動しなくなった。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