物理サーバーのCentOS5を停止せずに強引にイメージ化

  • 2
    いいね
  • 0
    コメント

強引なやり方のためfsck覚悟。

dd

  1. 物理サーバーにssh
  2. nfs や usbをマウント
  3. dd if=/dev/sda | gzip -c > /mnt/nfs/disk.dd.gz

1TBで6時間くらいかかった。
ソフトウェアRAID1の場合、sdaとsdbとあるが、sdaだけddで良い。
ソフトウェアRAID0やRAID5などの場合はddどうするのかね。

イメージの扱い

  1. 元のディスクより大きいサイズのディスクを用意。(今回1TBのイメージだったので、2TBを用意した。)
  2. gzip -d disk.dd.gz
  3. qemu-convert -O qcow2 disk.dd disk.qcow2
  4. disk.qcow2 を利用して 仮想マシンを(今回はkvmを使った) で起動
  5. ストレージタイプはvirtioを選びたいところだが、CentOSの起動時に以前のストレージタイプ(sda)を指定しているため、sataにする。ネットワークは無効にしておいたほうが良い。
  6. DISKチェック。singleユーザーで起動
  7. fsck -y /dev/md1
  8. reboot

erro.png

無事起動したことを確認。

  1. ログインできたらディスクの空きをゼロ埋めする。 dd if=/dev/zero of=zero bs=1M; rm -f zero
  2. 仮想マシンを停止し仮想ディスクイメージをトリム。今一度qemu-img convert -O qcow2 disk.dd disk.dd.trim

dd以外の方法

無停止の dd だとデーターの欠損が気になるため
物理サーバをコンテナ化 (OpenVzの例) - Qiitaのようにtarで固めるか、

/boot/grub/menu.lst で root=/dev/md1 と指定がある場合は適宜書き換える。

ソフトウェアRAID1の場合

  • CentOS5 のDVDで起動しても /dev/md?? は認識しなかった。
  • clonezilla-live-20161121-yakkety-amd64.iso (ubuntu 16.10ベース) だと /dev/md126, /dev/md127 で認識した。

スクリーンショット_2017-03-27_08-47-07.png

旧DISKをマウント
mkdir rootdir
mount -o ro /dev/md126 old
mount -o ro /dev/md127 old/boot
新DISKをマウント
# CentOS5ではext4は使えない
mkfs.ext3 /dev/sdb1
mkfs.ext3 /dev/sdb2
mkswap /dev/sdb3

mkdir newdir
mount -o ro /dev/sdb2 new
mount -o ro /dev/sdb1 new/boot
DISKコピー
rsync -a old/ new/
sync;sync;sync
編集
/etc/mdadm.conf
/etc/fstab
/boot/grub/menu.lst
  • CentOSのDVDから linux rescue で起動。
mount /dev/sda2 /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot

cd /mnt/sysimage

mount -o bind /dev dev
mount -t proc none proc
mount -o bind /sys sys

chroot .
grub-install /dev/sda

grubをインストールして起動確認

grub install (virtio)

手動でgrubセットアップ
# grub --device-map=/dev/null
device (hd0) /dev/vda
root (hd0,0)
setup (hd0)
quit

grub.png

このあとrootfsが見当たらなくてbootできなかった。
virtioは諦めてsata指定した。