Debian Wheezy:拆分和调整Xen磁盘映像大小

背景 我的一个Xen虚拟服务器需要在周末将其400G磁盘分割和调整大小,我想将停机时间降至最低。

背景

我的一个Xen虚拟服务器需要在周末进行400G磁盘分割和调整大小,我想将停机时间缩短到最小。 磁盘使用了240G,其中235G是/ backup目录,剩下的5G专用于普通的Debian Linux安装。 我想将磁盘分成两个磁盘 - 一个包含Linux系统的20GB磁盘,以及一个300G磁盘挂接为/ backup 。 然后我可以应用我的DRBD设置将该300G备份分区复制到另一台第二备份机。

我不想最终在不得不在物理主机上复制数据的情况,我当然不希望虚拟机在我做的时候停机。

设置图像

虚拟机的磁盘映像位于/vm/domains/b1/disk.img和随附的swap.img ,我们不需要担心。

问题:

losetup -a

找到所有使用的环路设备。 在我的例子中,/ dev / loop20是第一个免费的设备。 接下来,我将为图像设置一个环回设备,然后安装它:

mkdir -p /mnt/loop-copy-from /mnt/loop-copy-to

losetup /dev/loop20 /vm/domains/b1/disk.img

mount /dev/loop20 /mnt/loop-copy-from

创建一个新的空稀疏图像

现在,我们不会移动/备份 ,而是将其他所有内容移至新的20G图像。 我们将创建一个20G的稀疏图像文件:

dd if=/dev/zero of=/vm/domains/b1/disk-root.img bs=1k count=1 seek=$(((20*1024*1024)-1))

接下来,我们需要设置一个新的循环设备,创建一个文件系统,最后挂载这个新的图像

losetup /dev/loop21 /vm/domains/b1/disk-root.img

mkfs.ext3 /dev/loop21

mount /dev/loop21 /mnt/loop-copy-to

复制根文件系统

现在,我将从/ mnt / loop-copy-from / mnt / loop-copy中的所有内容复制到 235G备份目录之外:

rsync -arplogu --exclude "/backup" --stats --progress /mnt/loop-copy-from/ /mnt/loop-copy-to

清理现有的文件系统

我想从/ mnt / loop-copy-from (备份目录除外)中删除所有内容:

cd /mnt/loop-copy-from; ls | grep -v 'backup' | xargs rm -rf

然后,我们将卸载两个设备:

umount /mnt/loop-copy-from

umount /mnt/loop-copy-to

收缩现有文件系统

我现在需要将/ dev / loop20从400G缩小到300G:

e2fsck -f /dev/loop20

resize2fs /dev/loop20 300G

复制引导数据

然后,在销毁环回设备之前复制引导数据:

dd if=/dev/loop20 of=/dev/loop21 bs=1 count=512

losetup -d /dev/loop20

losetup -d /dev/loop21

Xen配置和VM启动

现在编辑Xen VM配置文件,在我的例子中,/ etc/xen/b1.cfg ,更改:

disk = [
  'file:/vm/domains/b1/disk.img,xvda2,w',
  'file:/vm/domains/b1/swap.img,xvda1,w',
]

有:

disk = [
  'file:/vm/domains/b1/disk-root.img,xvda2,w',
  'file:/vm/domains/b1/disk.img,xvda3,w',
  'file:/vm/domains/b1/swap.img,xvda1,w',
]
最后:

xm create b1.cfg

IO数字版

Debian Wheezy XEN + Guest设置