-->

2011-04-30

kvmのハードディスクを縮小する

debianのハードディスクファイルを縮小する。

virt-managerなどからdebianを停止させる。

あたらしいディスクイメージを作成する。(8GB)
$ sudo mv -i debian.img debian.img.old
$ sudo dd if=/dev/zero of=debian.img bs=1024M count=8

ファイルの状態を確認する。
$ qemu-img info debian.img
$ filefrag debian.img
$ filefrag -v debian.img
$ sudo hdparm --fibmap debian.img

手動で、新しいハードディスク、古いハードディスク、linuxのCDを指定して、CDからブートさせる。
$ sudo /usr/bin/kvm -k ja -m 1024 -smp 1 -hda debian.img -hdb debian.img.old -net nic,macaddr=52:54:00:12:34:58 -net tap,ifname=tap2,script=no,downscript=no -cdrom ../tmp/install-amd64-minimal-20110421.iso -boot d

VNCクライアントでログインしてgentooのインストールCDの設定を行う。
<< Load keymap (Enter for default):jp
$ ifconfig
$ ifconfig eth0 192.168.0.xxx # 設定されていない場合に手動で設定する。
$ passwd
$ /etc/init.d/sshd start

sshでログインする。ディスクの中身のコピーなどを行う。
$ ssh root@192.168.0.xxx

ディレクトリ作成。
$ cd /mnt/
$ mkdir disk{1,2}

元のディスクをリードオンリーでマウントする。設定によって異なる。/etc/fstabを見て確認しておく。
$ mount -r /dev/sdb3 disk2/
$ mount -r /dev/sdb1 disk2/boot/

新しいディスクをフォーマットする。 始まりが2048になっているが大丈夫???
$ fdisk /dev/sda
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048      264191      131072   83  Linux
/dev/sda2          264192     1312767      524288   82  Linux swap / Solaris
/dev/sda3         1312768    16777215     7732224   83  Linux

確認する。
$ fdisk -l /dev/sda

新しいディスクのパーテーションを作成する。UUIDを確認する。
$ mke2fs -j /dev/sda1
$ mke2fs -j /dev/sda3
$ mkswap /dev/sda2
$ blkid | grep ^/dev/sda

元のディスクと同じ構成でマウントする。
$ mount /dev/sda3 disk1/
$ mkdir disk1/boot
$ mount /dev/sda1 disk1/boot/

元のディスクを新しいディスクにコピーする。
このコマンドの場合、元のディスクのルートディレクトリに/.htaccessなどの隠しファイルがあってもコピーされない。
$ cd disk1/
$ cp -pir ../disk2/* .

chrootで新しいディスクに入る。
$ mount -t proc none proc/
$ mount -o bind /dev dev/
$ chroot . /bin/bash
$ source /etc/profile
$ export PS1="(chroot) $PS1"

UUIDを更新してgrubをインストールする。
$ cd /etc/
$ cp -pi fstab fstab.old
$ blkid | grep ^/dev/sda
$ vi fstab
$ grub-install /dev/sda
$ update-grub
$ exit

終わり。 shutdown終了後に、手動で起動したkvmが終了しなければkvmを手動で終了させる。
$ shutdown -h now

virt-managerなどの本来の起動方法で起動する。
うまく行けば起動する。

deianのレスキューモード => bashと打つ。シェルを変更する場合。

起動しない原因はUUIDが違うため。 UUIDを使わない場合、設定に使うlinuxのバージョンなどによってデバイス名が違う。
/dev/sda
/dev/hda
/dev/vda
など。

参考。
http://orangesooda.com/no/2011/02/kvm.html
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1&chap=6
https://forums.ubuntulinux.jp/viewtopic.php?pid=44967
http://www.bigegg.net/post/913233960/0x07-linux-os-vmware-server
http://sokohakato.wordpress.com/linux/centos/xenimgmount/



ホストOS上で直接コピーする。(失敗)

マウントする。
$ mkdir /tmp/disk1
$ mkdir /tmp/disk2
$ sudo fdisk debian.img
$ fdisk -l debian.img|tail -n4
デバイス ブート      始点        終点     ブロック   Id  システム
debian.img1            2048      264191      131072   83  Linux
debian.img2          264192     1312767      524288   82  Linux スワップ / Solaris
debian.img3         1312768    16777215     7732224   83  Linux
$ sudo losetup /dev/loop0 debian.img
$ sudo losetup /dev/loop1 debian.img.old
$ sudo kpartx -l /dev/loop0
$ sudo kpartx -l /dev/loop1
$ sudo kpartx -a /dev/loop0
$ sudo kpartx -a /dev/loop1
$ ls -l /dev/mapper/

フォーマットする。
$ sudo mke2fs -j /dev/mapper/loop0p1
$ sudo mke2fs -j /dev/mapper/loop0p3
$ sudo mkswap /dev/mapper/loop0p2

元のディスクをマウントする。
$ sudo mount -r /dev/mapper/loop1p3 /tmp/disk2/
$ sudo mount -r /dev/mapper/loop1p1 /tmp/disk2/boot/

新しいディスクをマウントする。
$ sudo mount /dev/mapper/loop0p3 /tmp/disk1/
$ sudo mkdir /tmp/disk1/boot
$ sudo mount /dev/mapper/loop0p1 /tmp/disk1/boot/
$ df -h|grep ^/dev/map
$ mount|grep ^/dev/map

コピーする。
$ sudo rsync -a /tmp/disk2/ /tmp/disk1/

grubのインストールができなさそうなことと、ホストOS上で作業すると失敗しそうなのでkvm上で作業することにする。

0 件のコメント: