转载:
在 Windows 中运行硬盘上的 Linux 系统:用 VirtualBox 加载硬盘上的 Linux 作为虚拟机运行
在 Linux 中创建 *.iso
文件
如过你无法仅凭 *.vmdk
文件在 VirtualBox 中成功运行 Linux,你需要由 Linux 的 GRUB 的部分文件来创建一个 *.iso
文件,再添加到由 *.vmdk
文件建成的虚拟机的 “设置” - “储存” - “控制器:IDE” 中,来引导硬盘中的 Linux 系统在 VirtualBox 中启动。
此步骤不会更改 Linux 使用的 GRUB 设置。所以正常情况下不会出问题,运行命令时可能会因为缺少某个组件等问题而报错,按报错去搜索解决方案即可。
现在,你需要重启电脑到 Linux 系统中。进入 Linux 系统后,在某处,例如用户的 home 目录,按如下命令新建文件夹:
mkdir -p ./iso/boot/grub/
上面的命令,会在当前目录中新建 iso
文件夹,再在 iso
文件夹中新建 boot
文件夹,再在 boot
文件夹中新建 grub
文件夹。
然后,将 GRUB 的部分文件复制到刚才新建的 grub
文件夹中:
cp /usr/lib/grub/i386-pc/* /home/YourUserName/iso/boot/grub
上面这条命令是将 /usr/lib/grub/i386-pc/
文件夹中所有的文件都复制到你刚才新建的 grub
文件夹中。如果你将 iso
文件夹建于你的用户的主目录中,记得将 “YourUserName” 改为你用户的用户名。如果你把 iso
文件夹建在了其他地方,就得把 /home/YourUserName
更改为你新建 iso
文件夹的目录。
然后再运行:
cp /boot/grub/grub.cfg /home/yourusername/Desktop/iso/boot/grub
此命令将 /boot/grub/
中的 grub.cfg
文件复制到了你新建的 grub
文件夹中。
复制完后,编辑 grub.cfg
文件。此文件中不仅包含引导启动 Linux 系统的内容,还包含引导启动生成此文件时电脑中其他系统的内容。虚拟化运行时,你只虚拟化了包含装有 Linux 系统的硬盘,所以在虚拟机中无法启动在其他盘的系统,为了避免造成错误,我们需要将不必要的内容删去。如果你在生成 grub.cfg
文件时,电脑中除了当前的 Linux 外仅有 Windows 系统,那么只需删除从 menuentry 'Windows Boot Manager'
或类似的内容开始,到与之对应的 }
为止,这两者之间的所有内容。如果当时你电脑的其他硬盘上还有其他系统,例如 Ubuntu,那么所有从 menuentry 'Ubuntu'
或类似的内容到对应的 }
之间的内容也需要删除,可能有多个这样的内容。如果在目标硬盘(也就是你想虚拟化的 Linux 所在的硬盘)上有另一个 Linux 系统,而你也想在 Windows 上运行的虚拟机中运行这个 Linux 系统,那么你需要保留和这个系统有关的内容。
可以运行如下命令来编辑 grub.cfg
文件:
sudo vim /home/YourUserName/iso/boot/grub/grub.cfg
如果你更偏好使用 nano 等其他编辑器,请替换命令中的 “vim” 。别忘了替换命令中的 “YourUserName” 。
用你喜欢的编辑器打开 grub.cfg
文件后,按上面所说的删除那些内容。完成后,保存修改并退出。
最后,使用如下命令来生成 *.iso
文件。此命令生成的 *.iso
文件会被输出于当前命令运行的目录。(我不知道有没有什么影响,不过最好不要在 iso
文件夹之内。你不妨在用户的主目录运行这个命令。)
grub-mkrescue -o boot.iso /home/YourUserName/iso/
此命令会利用 iso
文件夹中的内容,生成一个 boot.iso
文件输出到当前文件夹中。当然,你也可以使用其他的文件名。记得更改命令中的 “YourUserName” 。
如果出现 “xorriso: not found” 的报错,就得安装 “xorriso” 。你也可能遇到其他的报错,请自行通过搜索引擎解决。我使用此命令时也遇到了问题,是通过安装 “mtools” 解决的。
成功生成 *.iso
文件后,将其保存到云盘,或 Windows 系统能访问的本地目录中。例如,你可以挂载 Windows 所在的硬盘,把 *.iso
文件保存到 *.vmdk
文件所在的文件夹。稍后我们需要重启到 Windows 系统,并用到此文件。
如果你 Linux 的启动模式是 “graphical.target” ,开机后默认进入图形界面的话,稍后在 VirtualBox 中可能无法正常载入图形界面。如果你需要在虚拟机中运行的 Linux 中使用图形界面,请在遇到问题后自行搜索对应的解决方案,似乎通过修改某些配置可以解决图形界面无法正常使用的问题。如果你无需在虚拟机中运行的 Linux 中使用图形界面,可以更改 Linux 的启动模式,让 Linux 启动后默认不启动图形化界面,直接以命令行界面操作。
使用如下命令来更改 Linux 的默认启动方式:
systemctl set-default multi-user.target
此命令将默认的启动方式由图形界面模式更改为命令行模式。
如果你需要更改回默认以图形界面模式启动,可以将命令中的 multi-user.target
替换为 graphical.target
,即:
systemctl set-default graphical.target
你还可以使用如下命令来切换当前运行的模式:
systemctl isolate multi-user.target
此命令仅在使用时将当前的模式更改为命令行模式,不影响下次开机后的情况。
请注意,此命令同时影响通过 VirtualBox 启动 Linux 系统和正常启动的 Linux 系统。如果你希望正常启动 Linux 系统时默认进入图形界面,请自己查找添加新的启动项的途径,或其他方法来达成此目的。或者,你也可以为切换当前模式为图形模式的命令取一个简短的别名(alias)。
你可以访问 Archlinux 关于 “systemd” 的 Wiki 的页面中 “Targets” 小节 来了解更多相关命令。或自行查阅更多相关资料。
在 WIndows 中利用 VirtualBox 创建虚拟机
现在几乎大功告成了。你所需要做得就是重启到 Windows 系统中,以管理员身份运行 VirtualBox。如果你没有在生成 *.vmdk
文件后立即用它新建了虚拟机,现在来新建吧。点击 “新建” ,除了在 “虚拟硬盘” 这一步中得选择 “选择已有的虚拟硬盘文件(U)” 一项并使用刚才生成的 *.vmdk
文件这一点之外,和普通的新建虚拟机并无区别,按你自己的情况和需求自行调节其他设置项。
完成新建虚拟机后,选中新建的虚拟机,点击 “设置” ,再点击 “储存” ,点击 “控制器:IDE” 一行右端的从左到右第一个图标,及右下角有加号的圆盘状那个。点击 “选择磁盘” 并选择刚才生成的 *.iso
文件。
完成添加后,请点击 “控制器:IDE” 和 “控制器:SATA” ,确认这两处的 “使用主机输入输出(I/O)缓存” 一项都已启用。否则可能会在启动 Linux 时出现问题。当然,你也可以再出现相关报错后再来此处启用此选项。
点击 “OK” 确认对设置的修改。
现在,我们应该就能正常在 VirtualBox 中启动硬盘上的 Linux 了。点击 “启动” 来试一试吧。
注意:请勿在虚拟化运行的 Linux 的尝试挂载或访问 Windows 能够访问的硬盘或分区,可能会造成严重的数据损坏。虚拟化运行的 Linux 和正常运行的 Linux 一样,在虚拟化运行的 Linux 中做出的更改就是在正常启动的 Linux 中对其做出相同的更改。