虚拟化Linux系统(创建Linux虚拟机 P2V)
日期:2011年3月5日
本教程将展示如何从物理Linux系统创建一个Linux虚拟机。
这些说明足够通用,适用于任何Linux发行版,如Ubuntu、Fedora、Red Hat、CentOS、Debian、Mint等。
Linux虚拟机创建任务概述:
所需工具和资源:
- SystemRescueCd ISO文件
- 空白CD-ROM或USB盘
- 足够容纳整个Linux系统的USB硬盘
- VMware或VirtualBox
准备任务
- 记下磁盘分区情况
- 创建可引导的Linux救援盘
主要任务
- 对硬盘分区进行镜像
- 创建一个空的虚拟机
- 重新创建硬盘分区
- 恢复硬盘分区
- 设置引导加载程序
最终任务 - 启动虚拟机
可选任务 - 配置X11
准备任务
记下磁盘分区情况
在要虚拟化的物理Linux系统上,运行以下df命令以列出分区和挂载点:
df -h
记录下分区、大小和挂载点。稍后您将使用这些信息在虚拟机中重新创建磁盘分区。
创建可引导的Linux救援盘
为了将物理Linux系统转换为虚拟机,我们将使用另一个版本的Linux来执行操作。任何可引导的Linux版本都可以使用,我特别推荐SystemRescueCd。它是一个轻量级的Linux系统,配备了所有您在此任务中所需的系统工具,如partimage和fdisk(或GParted)。
将ISO文件刻录到CD-ROM,或者按照制作可引导的USB存储设备的说明制作引导的USB存储设备。
关闭要虚拟化的物理Linux计算机,并将SystemRescueCd放入CD-ROM驱动器或USB驱动器。
打开计算机并引导到SystemRescueCd Linux。
主要任务
对硬盘分区进行镜像
连接您的外部USB硬盘。
运行dmesg命令以找到USB硬盘的设备名称。
dmesg
查找您的硬盘名称和描述。例如,如果您插入了一个Western Digital My Passport硬盘,您应该会看到类似于以下内容:
usb 2-1: Product: My Passport 070A
usb 2-1: Manufacturer: Western Digital
sd 4:0:0:0: [sdb] 1463775232 512-byte logical blocks: (749 GB/697 GiB)
sd 4:0:0:0: [sdb] Write Protect is off
sd 4:0:0:0: [sdb] Mode Sense: 23 00 10 00
sd 4:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
这里的关键信息是最后一行的sdb1。这是我们将用于挂载USB硬盘的设备名称。
创建一个目录以挂载USB硬盘。例如,创建一个名为flash的新目录。
mkdir /mnt/flash
在新创建的目录上挂载USB硬盘,设备为sdb1。
mount /dev/sdb1 /mnt/flash
运行partimage程序以对分区进行镜像。
partimage
使用GUI选择要镜像的分区。
按下Tab并输入分区的文件名。例如(假设分区在设备sda上):
/mnt/flash/sda1.partimage.gz
按两次F5导航到下一个屏幕,然后按OK开始镜像过程。
对Linux系统上的每个分区重复此过程。确保适当命名文件。
**注意:**Partimage还将显示您挂载的USB驱动器的分区。不要对USB硬盘的分区进行镜像。同时,不要镜像任何扩展分区或交换分区。
当您完成所有磁盘分区的镜像后,卸载USB硬盘。
umount /mnt/flash
关闭SystemRescueCd并重新启动您的Linux系统。
reboot
创建一个空的虚拟机
在VMware(或VirtualBox)中创建一个新的虚拟机(VM)。
将虚拟机的硬件规格配置得与物理Linux计算机相似:内存、处理器、硬盘。硬盘的大小必须与物理机相同或更大,以确保分区适合。
设置虚拟机从CD-ROM驱动器引导,使用SystemRescueCd ISO文件。
将空的虚拟机引导到SystemRescueCd。
重新创建硬盘分区
运行fdisk命令以找到硬盘设备。
fdisk
-l /dev/sda
如果是sda,并且您的驱动器大小约为100GB,您会看到类似于以下内容:
Disk /dev/sda: 105.2 GB, 105226698752 bytes
使用fdisk重新创建原始物理Linux计算机的磁盘分区。您应该在准备任务中记录了这些分区。fdisk是一个用于分区驱动器的命令行程序(如果愿意,也可以使用X Windows中的GUI GParted程序。按下startx并从菜单中选择GParted)。
fdisk /dev/sda
按下n添加新分区。
按下a切换可引导分区(/boot分区)。
按下t切换交换分区,将其设置为82。
按下w将更改写入磁盘。
随时按下m以获取选项列表。
恢复硬盘分区
连接您的外部USB硬盘并将其连接到虚拟机。
运行dmesg命令以找到USB硬盘的设备名称。
dmesg
查找您的硬盘名称和描述。
创建一个目录以挂载USB硬盘。例如,创建一个名为flash的新目录。
mkdir /mnt/flash
在新创建的目录上挂载USB硬盘,例如设备sdb1。
mount /dev/sdb1 /mnt/flash
运行partimage程序以恢复分区。
partimage
使用GUI选择要恢复的分区。
按下Tab并输入映像文件的文件名和位置。例如:
/mnt/flash/sda1.partimage.gz
按下Tab并将要执行的操作更改为从映像文件恢复分区。
按两次F5导航到下一个屏幕,然后按OK开始恢复映像过程。在VMware中,您可能需要按下Function F5使F5键起作用。
对Linux系统上的每个分区重复此过程。
当您完成所有磁盘分区的恢复映像后,卸载USB硬盘。
umount /mnt/flash
设置引导加载程序
最后一步是设置引导加载程序并将其安装到主引导记录(MBR)中。
挂载引导目录。例如,如果sda1是引导分区,sda3是根分区。
mkdir /mnt/root
mount /dev/sda3 /mnt/root
mount /dev/sda1 /mnt/root/boot
验证引导配置文件的配置。假设您正在使用GRUB:
nano /mnt/root/boot/grub/device.map
Nano是一个Linux文本编辑器。您也可以使用pico或vi。
您希望验证配置文件中的设备是否与虚拟机中的设备匹配。例如,如果文件中写着:
(hd0) /dev/hda
您可能需要将hda更改为sda。在此示例中,我们需要更改它为:
(hd0) /dev/sda
退出Nano或您使用的任何文本编辑器。
运行grub-install以将GRUB安装到MBR中。
grub-install --root-directory=/mnt/root /dev/sda
最终任务
我们完成了。现在在SystemRescueCd中重新启动,您的虚拟机应该能够启动到与物理机相同的Linux设置。
reboot
这个虚拟机现在是物理Linux计算机的精确副本。您已成功完成了Linux系统的P2V(物理到虚拟)转换。
可选任务 - 配置X11
根据您使用的Linux版本,可能无法使用VMware设置正确显示X Windows。在这种情况下,您需要对X11Config文件进行简单的更改。
首先,备份X11Config文件。假设它位于 /etc/X11 中。
cp /etc/X11/XF86Config /etc/X11/XF86Config.backup2
编辑X11Config文件。
nano /etc/X11/XF86Config
将Device部分中的Driver和BoardName设置从VMware设置更改为通用的Vesa设置。
Section "Device"
Identifier "Videocard0"
Driver "vesa"
VendorName "Videocard vendor"
BoardName "VESA driver (generic) "
保存文件并重新启动。现在您应该能够启动X Windows了。
就是这样。看起来步骤很多,但实际操作并不是很难。最耗时的部分是镜像和恢复分区。
现在您已经拥有了Linux计算机的虚拟版本,可以执行独特的操作,比如快照,并同时处理多个配置或语言。这在将软件从一种语言翻译成另一种语言时非常有帮助,因为您现在可以在同一台桌面上同时运行两个语言版本。