如何将文件系统备份解压到虚拟机磁盘映像中?

如何将文件系统备份解压到虚拟机磁盘映像中?

我获得了一个.tar.gz包含来自 VM 文件系统的文件(但不是文件系统本身)的档案,我需要将它们解压为原始磁盘映像,以便可以将它们安装为 VM。

如何创建一个空磁盘映像并在其上放置文件系统,然后将存档解压到其中?

我怀疑我还需要安装一个引导加载程序并创建一个交换分区。

答案1

您尚未指定存档来自哪个虚拟机文件系统。如果您正在使用 VMWare Workstation,只需从界面添加新磁盘,使用任何引导加载程序启动机器,使用任何 ftp 软件将 tar 文件复制到其中,然后解压它。如果它是正在运行的虚拟机的精确 tar,那么您的机器下次即使没有引导加载程序也会启动。

答案2

这更像是一种策略,而不是一本完美的手册,但它应该会有所帮助。

构建“虚拟计算机”,即创建一个空硬盘。然后,从我的角度来看,找出 .tar.gz 文件中的 Linux 发行版是最好的选择。假设它是一个 openSUSE 系统,版本 12.1(它应该可以以类似的方式与任何其他发行版配合使用)。下载原始磁盘(CD)映像,以设置正确版本的发行版基本系统,并将其安装到新创建的 VM 中。这样您就可以创建文件系统和分区(包括交换)、安装 grub 或类似程序等,并测试 VM。完成后,使用 Linux 生命系统启动 VM。转到 VM 的“/”文件夹(不是生命系统的文件夹),并重命名多个文件夹(作为 root):bin、boot、etc、lib、opt、root、sbin、srv、tmp、usr、var(假设这些文件夹都不在单独的分区上)改为 bin-old、boot-old 之类的名称...现在将旧 VM 解压到同一位置。应该有新的 boot、bin ... 文件夹紧挨着旧的重命名文件夹。现在您需要更改旧 VM 的一些文件,以便在新 VM 中启动旧系统。假设旧 VM 使用 grub,例如,您需要调整 /boot 中的文件,同时使用 /boot-old 作为帮助。

答案3

首先我创建了一个/dev/loop0从 25GB 的空白原始磁盘映像创建了一个环回 ( ) 设备并对其进行了分区分成一个 20GB 的分区用于文件系统,其余部分用于交换。

kpartx请记住在环回设备上使用来“找到”新分区:

    # kpartx -a /dev/loop0
    # ls /dev/mapper/
    control  loop0p1  loop0p2

我不确定要使用哪个文件系统,因此我保守地选择ext2在第一个分区上创建一个文件系统:

    # mkfs.ext2 /dev/mapper/loop0p1
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    1313760 inodes, 5245214 blocks
    262260 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=4294967296
    161 block groups
    32768 blocks per group, 32768 fragments per group
    8160 inodes per group
    Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000

    Writing inode tables: done
    Writing superblocks and filesystem accounting information: done

    This filesystem will be automatically checked every 23 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

创建挂载点并挂载回送设备分区:

    # mkdir /mnt/disk
    # mount /dev/mapper/loop0p1 /mnt/disk

切换到挂载目录并解压档案:

    # cd /mnt/disk
    # tar xzvf /path/to/disk_archive.tar.gz

使用chroot将新的磁盘映像挂载为根文件系统:

    # mount -t proc none /mnt/disk/proc
    # mount -o bind /dev /mnt/disk/dev
    # chroot /mnt/disk /bin/bash

对文件系统进行任何必要的更改(例如安装 grub 包!)

退出 chroot 并卸载并取消循环所有内容:

   # umount /mnt/disk/dev
   # umount /mnt/disk/proc
   # umount /mnt/disk
   # kpartx -d /dev/loop0
   # losetup -d /dev/loop0

最后我创建了一个以此为硬盘的虚拟机。我用超级 Grub2 磁盘解决引导加载程序的任何其他问题。

相关内容