我刚刚使用 rsync 备份了一个远程系统。我有一个可以chroot
进入的目录,现在想将其作为 VM 启动。我知道它qemu
有这个-kernel
功能,而且-drive file=fat:
虚拟 FAT功能。我希望也许通过-append
对 /etc/fstab 进行一些修改,我就可以启动它,但不幸的是,早期的测试表明备份目录中的设备文件存在问题:
# kvm -kernel boot/vmlinuz-4.15.0-99-generic -drive file=fat:`pwd`
qemu-system-x86_64: -drive file=fat:/home/d33tah/workspace/hakierspejs/backup/mounted: Could not read directory /home/d33tah/workspace/hakierspejs/backup/mounted/dev/fd/12
如果我想在每次备份后以最少的麻烦让映像可启动,我还有什么其他选择?我正在寻找“一次设置,经常使用”的用例。
答案1
虚拟 FAT 实际上只是一种 FAT 文件系统类型。它不是 Linux ext 文件系统,因此实际上不可能从那里启动它。至少在没有大量修改的情况下不可能。
您可以按照以下步骤在文件容器中准备新图像:
dd if=/dev/zero of=/some/path/some/file.dat bs=1M count=[SIZE_IN_MB]M
这将创建一个大小为 SIZE_IN_MB Mb 的新空文件。mke2fs /some/path/some/file.dat
这将在该文件中创建 ext 文件系统。mkdir /mnt/newimage && sudo mount -o loop /some/path/some/file.dat /mnt/newimage
这会将您的文件与 ext fs 一起挂载到 /mnt/newimage。
然后,您可以在那里 rsync/copy 您的备份数据。完成后,您可以卸载该映像。还请检查以分离循环绑定losetup -d /some/path/some/file.dat
。现在您在 /some/path/some/file.dat 中有一个正确的 ext fs 映像,您可以尝试使用它的 QEMU 进行引导(它是 RAW 类型)。
另一种(也是更好的方法)是将原始系统迁移到 QEMU VM。备份和恢复 VM 更加容易,并且可提高备份的一致性。
答案2
我四处打听,似乎没有简单的办法解决这种情况 - 除了通过 NFS 或其他类似的黑客手段启动。以下是如何从源目录快速创建 ext4 驱动器:
#!/bin/bash
set -euo pipefail
set -x
FNAME=ext4image.bin
SRCDIR=source-directory
DSTDIR=temporary-empty-directory
mkdir -pv $DSTDIR
truncate -s 20G $FNAME
mkfs.ext4 -F $FNAME
mount $FNAME $DSTDIR
tar cf - $SRCDIR | pv | tar xf - --strip=1 -C $DSTDIR
umount $DSTDIR
假设您现在在单个文件系统中拥有所有挂载,第一步是进行修改,/etc/fstab
使其仅包含以下内容:
/dev/root / ext4 defaults 0 0
现在您可以使用上面的脚本创建一个 ext4 映像。您可以按以下方式启动它:
kvm ext4image.bin -kernel mounted/boot/vmlinuz-4.15.0-99-generic -append root=/dev/sda -initrd mounted/boot/initrd.img-4.15.0-99-generic -m 2G
内核版本显然可能会有所不同。