有哪些替代方案可以在不冒险损坏我的主要开发机的情况下实现这一点?我不是在寻找关于最佳方式的辩论,而是想知道有哪些可用的选择。
当你想要测试性能(在裸机上)或者计算机的性能不足以在虚拟机中良好运行时,USB替代方案是一个不错的选择。
将可引导的驱动镜像以ISO格式存储在内部存储驱动器上的某个文件中。
添加一个名为“35_isofiles”的Grub“parts”文件,内容如下:
#!/bin/bash
set -e
. /usr/share/grub/grub-mkconfig_lib
shopt -s nullglob
make_iso_menuentry()
{
local isodevice="$(exec "$grub_probe" -t device -- "$1")" || return $?
local isogrub="$(make_system_path_relative_to_its_root "$1")"
local label="${2:-"$1"}"
printf 'menuentry %s {\n' "'${label//\'/\'\\\'\'}'"
printf '\tset isofile=%s\n' "'${isogrub//\'/\'\\\'\'}'"
prepare_grub_to_access_device "$isodevice" | sed -e 's/^/\t/'
printf '\t%s\n' \
'insmod loopback' 'insmod iso9660' 'loopback loop "$isofile"' \
'linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename="$isofile" ro noprompt noeject noplymouth' \
'initrd (loop)/casper/initrd.lz'
printf '}\n\n'
printf 'Found "%s" image: %s\n' "$label" "$1" >&2
}
for iso in /path/to/image.iso # <-- 在此处设置您的ISO镜像路径
do
make_iso_menuentry "$iso" "${iso##*/}" || true
done
将其放置在/etc/grub.d
目录下,并使其可执行。
编辑指定行中的文件路径以满足您的需求。如果需要,可以添加多个路径和/或Bash通配符。
使文件可执行:
sudo chmod a+x /etc/grub.d/35_isofiles
确保Grub菜单已启用。
更新Grub配置:
sudo update-grub
重新启动并选择新添加的Grub菜单项以从相应的镜像文件引导。
1 其他文件系统类型也是可能的,但可能需要其他Grub命令和引导参数调整。
2 由于Grub的实用程序库,LVM、RAID和加密文件系统应该可以工作,但我没有测试过它们。
有一个常用的容器系统叫做docker
。Docker为几乎所有你想要的Linux发行版提供了标准化的镜像,而且它可以在Windows上运行(但是,Windows镜像只能在Windows上工作,Linux镜像可以在两者上都工作)。它还具有额外的有用功能,可以节省空间和提高性能。
对于Linux来说,也有一些原生的开源替代品,比如LXC
(它已经内置到内核中!),可以用来做类似的事情(但需要更多的配置)。
docker
中测试或构建环境的简化示例# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
然后从命令行中,在该环境中以多种方式编译您的项目或测试。
在环境中进行"登录"并编译,运行测试等。假设您在项目的源目录中。
$ docker run -v "$PWD:/workdir" --rm -it my-builder /bin/bash
# echo "Now in docker container"
# make
...
# build/test/my-test
...
# exit
$ echo "Build artifacts are now on your host OS Directory :) "
$ docker run -v "$PWD:/workdir" --rm my-builder make
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
$ Start our instance in background
$ docker run --name my-builder-inst -d my-builder
$ echo "Copy files to instance"
$ docker cp /my/source/dir my-builder-inst:/workdir
$ echo "run project build"
$ docker exec my-builder-inst make
$ echo "copy build artifacts"
$ docker cp my-builder-inst:/workdir/build /my/output/dir
$ echo "destroy and delete container"
$ docker rm -f my-builder-inst
我在我的硬盘上保留了一个独立的分区(建议至少20GB,如果可以的话更多)。
我可以在那个分区上安装任何我想测试的操作系统,然后重新启动进入它。
如果一切正常运行,我可以废弃原来的操作系统分区,并最终重新利用它。
但是,如果新的操作系统对我来说不适用(驱动程序问题,软件不可用),那么我只需简单地重新启动回到我的旧操作系统,并感激我仍然拥有它!
备注:
这样你就可以真正在你的硬件上测试新的操作系统,以便发现驱动程序问题。我的记录是在一台计算机上运行了4个Linux操作系统和一个Windows XP。我过去常常使用Gentoo以获得速度和乐趣,但在受信任的Debian操作系统中通过chroot来运行我的Web服务器和邮件服务器。
(*) 您可以通过编辑
/etc/passwd
来为每个操作系统配置不同的主文件夹。将您的主文件夹设置为/home/you/arch-test
,然后在/etc/fstab
中设置共享的主文件夹分区并重新启动。您可以将一些点文件的符号链接设置为跨两个操作系统共享,同时将其他文件留给特定于操作系统。
缺点:
优点:
缺点:
init
系统和完整的内核。与完全虚拟化相比,容器(例如Docker、LXC等)在资源方面更加轻量级(等等)... - Ted CahallQEMU
QEMU是一种虚拟化解决方案,从理论上解决了这个问题的要求,即廉价且简单。
它允许在Linux或Windows主机中拖放启动操作系统iso文件。
它还允许在主机系统中启动Live USB硬盘,并使用可用的持久性。
与VBox不同,无需构建虚拟硬盘。
QEMU可作为Linux、Windows和其他操作系统的命令行应用程序使用。它也提供GUI界面,并包含在MultiBootUSB Linux和Windows版本中http://multibootusb.org/。
QEMU也可以从虚拟机管理器中运行,这比MBUSB更快,但不能拖放文件。sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
sudo apt-get install virt-manager
docker
,因为你的容器是通过易于理解的脚本定义的。你可以完全控制基础镜像和安装内容。容易共享主机文件和设备,创建容器的虚拟网络,通过命令行参数选择性地暴露端口,你可以直接向容器 shell 发送命令并在容器环境中执行应用程序。例如,你可以尝试一行命令docker run -it centos /bin/bash
来使用 CentOS 用户空间。 - crasic