我获得了一个.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 磁盘解决引导加载程序的任何其他问题。