如何尝试新的操作系统版本而不做出承诺的方法?

我想在新的操作系统发布时尝试,比如Ubuntu 17.04或Ubuntu 17.10,以了解新功能。我也喜欢看看Kubuntu、CentOS或其他发行版(Windows 11发布后呢?)- 或者建立测试环境,知道我可能会损坏它们,不想这样做到我的核心机器上。
有哪些替代方案可以在不冒险损坏我的主要开发机的情况下实现这一点?我不是在寻找关于最佳方式的辩论,而是想知道有哪些可用的选择。

2我通常使用虚拟机来完成这个任务。你可以参考这个问题的指南,它介绍了如何在VirtualBox中进行快速简便的安装设置,你可能希望在回答中提供链接。 - Takkat
1个人而言,我使用docker,因为你的容器是通过易于理解的脚本定义的。你可以完全控制基础镜像和安装内容。容易共享主机文件和设备,创建容器的虚拟网络,通过命令行参数选择性地暴露端口,你可以直接向容器 shell 发送命令并在容器环境中执行应用程序。例如,你可以尝试一行命令 docker run -it centos /bin/bash 来使用 CentOS 用户空间。 - crasic
8“活动光盘”曾经是一件大事。如今会使用一个活动USB驱动器。 - user253751
1鉴于Windows 10的更新模式,很可能不会有"Windows 11"。即使操作系统进行了重大改建,微软很可能会给它取一个别的名字。 - OrangeDog
1你是在问如何使用Virtualbox吗?因为从问题标签[tag:virtualization]来看,这似乎就是你的问题。 - Andrea Lazzarotto
3你基本上有三个选择:虚拟机(VirtualBox或Docker)、可启动的闪存驱动器(现代替代品,用于取代光盘)或者双重启动。在这三种选择之间的选择取决于你的需求、硬件和经验。 - Sean the Bean
1QEMU是一个理论上能够满足这个问题要求的虚拟化解决方案。它允许在Linux或Windows主机中拖放启动操作系统ISO文件。它还允许在主机系统中启动Live USB硬盘,并使用持久性(如果可用)。与VBox不同,无需构建虚拟磁盘。 - C.S.Cameron
1从这个问题所产生的点赞数量来看,人们似乎并不在意它是否基于观点。 - C.S.Cameron
@C.S.Cameron:看起来在最近的两次编辑后,它很快就会重新开放进行审查。 - David Foerster
1@C.S 点赞与帖子是否符合主题、过于宽泛、基于观点等无关。从来都不是。这个编辑之前就过于宽泛,编辑后仍然如此。 - muru
1这个问题绝对不是关于Virtualbox的。它是关于我可能使用的替代方案的问题。从我看到的答案中,虚拟化是其中之一,还有很多关于使用grub进行双启动、USB启动和Docker的内容。所以这个问题对我非常有帮助。我现在正在使用Docker构建我的应用程序。我已经尝试过一些USB启动了。我从未尝试过Virtualbox,但我尝试过VMWare。所以这个问题对我非常有帮助,我正在使用一些之前没有尝试过的替代方案。 - Ted Cahall
@TedCahall,我很高兴我们的答案对您有用。我认为你的问题很好,我认为这个帖子也可以为许多新用户提供帮助 :-) 尽管它可能不完全遵守AskUbuntu严格的规则 ;-) - sudodus
@muru 对不起,你错了。 - C.S.Cameron
@C.S.Cameron 你能解释一下吗?你是说这不够广泛吗?如果是的话,抱歉:错了。 - muru
9个回答

USB替代方案

当你想要测试性能(在裸机上)或者计算机的性能不足以在虚拟机中良好运行时,USB替代方案是一个不错的选择。

  • 你想要测试性能(在裸机上)
  • 计算机的性能不足以在虚拟机中良好运行

您可以使用至少有2GB驱动空间的USB闪存盘,并在其上创建一个Ubuntu系统。
从USB闪存盘启动,并在启动菜单中选择“尝试Ubuntu”(在其他Linux发行版中类似)。如果您在一个只读(仅限于临时使用)的驱动器上保存数据、安装程序或调整系统设置,这些更改将不会在关机或重启后保留。
如果你想以更高级的方式尝试Ubuntu,或者保存数据、安装程序或调整系统,并且你有一个至少4GB的快速USB闪存驱动器,你可以创建一个持久化的Ubuntu系统。
或者,如果您有/获得一个至少16GB的快速USB闪存驱动器, 您可以创建一个安装了Ubuntu系统的USB闪存驱动器。这样的安装系统在USB驱动器中更加稳定和灵活,可以随时更新和调整而没有任何限制。与持久性实况系统相比,它更具可携性,可以在多台计算机之间进行移动,只要您可以避免使用专有驱动程序,但是持久性实况系统更具可携性。
链接

2由于海报上有一个正在运行的Ubuntu(?)安装,直接从硬盘引导ISO也是一种可能性。设置到(新)ISO的链接,在grub中使用该链接(添加到/etc/grub.d/40_custom),并在FAT分区上创建用于casper-rw文件的目录(使用PERSISTENCE_PATH来标识要使用的目录)。添加"toram"选项后,ISO的引导性能与正常硬盘安装相当(甚至更快)。 - ubfan1
2是的,@ubfan1的替代方案很好,我已经使用过几次了。也许它比创建USB闪存驱动器稍微复杂一些,但一旦你设置好了,它可以很好地工作 :-) 请查看此链接,https://help.ubuntu.com/community/Grub2/ISOBoot#Manually_editing_the_GRUB_files - sudodus
2当你想要测试新的操作系统版本与你的硬件兼容性时,将其安装在独立的存储设备上是最佳选择。 - pa4080
这绝对是正确的答案。试图通过多层虚拟化(或者Docker,天哪)在当前操作系统上测试一个操作系统就像用你现有的车拖着拖车去“试驾”一辆新车一样:当然,你可以看到它的外观,但是它无法给你任何关于性能的想法。 - A C
有了USB3,这个应该没问题。如果你的机器是老款的USB2,加载时间可能会明显延长。 - Sean the Bean
@SeantheBean,无论是USB3还是USB2,闪存硬件通常是瓶颈。请查看此链接:至少16GB的快速USB闪存驱动器 - sudodus
@sudodus 感谢链接。听起来,USB3闪存驱动器的性能会比USB2闪存驱动器更好,因为它使用更快的硬件。 - Sean the Bean
@SeantheBean,是的,USB3闪存盘之间有很大的区别。 - sudodus
@ubfan1的方法有时被称为“grub-n-iso”或“从grub引导的ISO”。 - sudodus

一种测试新的发行版和操作系统版本的方法是使用虚拟化技术。它不需要额外的电脑/键盘/视频/鼠标空间,也不需要适配器来运行多台电脑,只需一台电脑和一些虚拟化软件。
这需要您拥有一台具备虚拟化能力的多核CPU和足够的内存。我建议至少8GB内存,如果您有16GB更好。
如果您正在运行Ubuntu,并且只想尝试Linux发行版(我不认为Windows会起作用),您可以使用Ubuntu中打包的免费虚拟化软件:KVM或Xen。两者都可以很好地工作,而且是免费的,可以运行各种Linux发行版。然而,管理虚拟机的工具有些欠缺。Oracle提供了一个名为VirtualBox的免费虚拟化工具,当然还有商业产品VMWare。VirtualBox和VMWare也可以在Windows机器上运行Ubuntu,如果那是您选择的桌面环境的话。
通过使用虚拟机管理器,您可以在新版本发布时添加新的发行版,测试它们,体验新功能,然后在新版本出现后丢弃它们。它们只会占用磁盘空间,当不运行时,因此除非空间紧张,否则甚至不需要丢弃。使用虚拟机管理器,很容易平衡5个、10个或更多个发行版,并能够根据需要启动它们和关闭它们。如果您足够幸运拥有一台32GB或64GB的机器,甚至可以并行运行它们全部。

2Windows可以在虚拟机中运行;然而,较新的版本非常沉重,您需要一台相当快速的多核处理器才能使用它。 - ravery
虚拟环境也取决于对该操作系统的支持。新的Windows版本将需要对虚拟机软件进行修改以支持它,这可能会稍微耽搁一些时间。不过我相信他们会为新版本做好准备的;-) - Rinzwind
是的,为了测试,我们肯定需要升级虚拟化解决方案到最新版本,以便能够启动最近的操作系统版本。 - Takkat
2KVM可以很好地运行Windows 10和7。如果你提到的Xen是指Citrics Xen Server,它也可以很好地运行Windows 10和7。 - Robby1212
我甚至在Windows 10 Hyper-V中运行了虚拟机,而这些虚拟机又是在KVM上运行的(在Fedora上,但Ubuntu 18.04 LTS应该也能做到)。 - Michael Hampton
@MichaelHampton:它们可用吗? - Eric Duminil
1@EricDuminil 他们的使用体验和Windows一样不太友好。 :) - Michael Hampton

作为比sudodus 的回答更快、更便宜的替代方法,您可以直接从可引导的驱动器映像文件而不是专用(USB)驱动器启动。
至少对于Ubuntu ISO映像(以及类似Linux Mint的派生版本),以下步骤适用。其他发行版可能需要进一步调整。
  1. 将可引导的驱动镜像以ISO格式存储在内部存储驱动器上的某个文件中。

  2. 添加一个名为“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通配符。

  3. 使文件可执行:

    sudo chmod a+x /etc/grub.d/35_isofiles
    
  4. 确保Grub菜单已启用

  5. 更新Grub配置:

    sudo update-grub
    
  6. 重新启动并选择新添加的Grub菜单项以从相应的镜像文件引导。


1 其他文件系统类型也是可能的,但可能需要其他Grub命令和引导参数调整。

2 由于Grub的实用程序库,LVM、RAID和加密文件系统应该可以工作,但我没有测试过它们。


2哇!这个脚本真是太棒了!我只需要在 /etc/grub.d/40_custom 中添加一个条目并找到正确的参数,就可以手动完成相同的事情;鉴于我在 https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Using_GRUB_and_loopback_devices 上得到的帮助,这并不难。 - solsTiCe

虚拟化是最简单的方法。
然而,在这里你有两个不同的用例,它们将有不同的解决方案。
1. 尝试新的发行版
发行版基本上由打包的应用程序和用户空间环境(例如引导时的SystemD与init)确定。
如果你想要“评估”不同发行版的用户界面体验,我建议使用完整的虚拟化,在其中安装完整的操作系统并评估其可用性。这在其他答案中已经得到了充分的解释。
如果你只需要测试用户空间环境,请继续阅读。
2. 在不同环境中进行测试和“一次性实例”
使用容器化更容易、更便宜、更快速,它是一种轻量级虚拟化形式,利用内核创建沙盒环境。
容器与主机共享内核资源,但具有自己的根文件系统、用户空间、网络堆栈等。从概念上讲,它可以被认为是一个功能强大的chroot。然而,由于内核是共享的,虚拟化是“薄”,也就是说,在大多数实际情况下,它以与主机操作系统相同的速度运行。

有一个常用的容器系统叫做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

有成百上千种其他的使用模式,然而,类似脚本的图像定义、可扩展的图像以及命令行使用使其在开发、测试甚至部署环境中非常吸引人。

1如果你想要系统容器,你应该考虑使用 LXD(比传统的 LXC 用户空间工具更简单),而不是 Docker(它更适用于应用程序容器)。也就是说,两者都是基于内核的 LXC/cgroups 支持构建的。另请参阅,https://unix.stackexchange.com/questions/254956/what-is-the-difference-between-docker-lxd-and-lxc - Bob

我在我的硬盘上保留了一个独立的分区(建议至少20GB,如果可以的话更多)。

我可以在那个分区上安装任何我想测试的操作系统,然后重新启动进入它。

如果一切正常运行,我可以废弃原来的操作系统分区,并最终重新利用它。

但是,如果新的操作系统对我来说不适用(驱动程序问题,软件不可用),那么我只需简单地重新启动回到我的旧操作系统,并感激我仍然拥有它!

备注:

这样你就可以真正在你的硬件上测试新的操作系统,以便发现驱动程序问题。
但是如果你只想体验一下新操作系统的感觉,其他虚拟化解决方案可能更快、更简单、更安全。
我将我的/home目录放在一个独立的大分区上,所以它与两个操作系统无关。(不要意外重新格式化该分区!)
但是我建议你在测试时不要使用共享的/home分区。如果两个操作系统具有显著不同的软件版本,某个应用程序可能会以不适合另一个操作系统的方式更改其配置文件。因此,在选择其中一个操作系统之前,请为每个操作系统保留单独的配置文件。(*)见下文
你不需要创建第二个交换分区。你可以为两个操作系统使用同一个交换分区。
当然,你需要小心选择要格式化/安装的分区。所以在安装新的操作系统之前,备份并记录下你的分区标识和大小(parted, p, q)。
为了在两个操作系统之间进行双重引导,你需要让grub检测到它们。根据我的经验,grub总是自动完成这个任务。(但lilo曾经是另一回事!)
通常情况下,你可以在一个操作系统上运行另一个操作系统的软件。我使用sudo chroot /mnt/original_os实现了这一点,尽管设置起来有些麻烦:我必须绑定挂载/dev和/proc。

我的记录是在一台计算机上运行了4个Linux操作系统和一个Windows XP。我过去常常使用Gentoo以获得速度和乐趣,但在受信任的Debian操作系统中通过chroot来运行我的Web服务器和邮件服务器

(*) 您可以通过编辑/etc/passwd来为每个操作系统配置不同的主文件夹。将您的主文件夹设置为/home/you/arch-test,然后在/etc/fstab中设置共享的主文件夹分区并重新启动。您可以将一些点文件的符号链接设置为跨两个操作系统共享,同时将其他文件留给特定于操作系统。


1一定要真心相信他们的安装脚本...... - mckenzm
是的,使用这种方法存在更多的风险。如果你是一个非常谨慎的人,你可以先尝试虚拟化,然后再进行分区安装,只有在那种情况下才放弃你原来的安装。 - joeytwiddle
我再也不会做这件事了。曾经遇到过一个明显隐晦的d-i(Debian Installer)bug,它摧毁了每个加密分区,即使那些并不属于所请求的安装。据我所知,这个bug还没有修复。 - Michael Hampton

你基本上有三个选择:虚拟化(VirtualBox或Docker),可启动的闪存驱动器(现代替代品,用于现场CD),或从分区双启动。在这三者之间的选择取决于您的需求、硬件和经验。其他答案中有更多关于特定方法的详细信息,但以下是一个高级别的比较,以帮助您在它们之间做出决策。
1. 虚拟化
优点: - 设置相当容易 - 不会影响您的主要开发环境 - 您可以轻松设置任意数量的虚拟机,只要您有足够的硬盘空间 - 甚至在进行重大更改之前创建快照,并在完成后删除它们
缺点: - 需要良好的硬件才能同时运行两个或更多个操作系统 - 性能受到为虚拟机分配的资源的限制,因此您无法真正了解您正在测试的操作系统版本与您的主要操作系统相比的准确情况 - 由于所有硬件都是虚拟化的,您也无法准确了解驱动程序的可用性/兼容性
2. 可启动的闪存驱动器
优点:
  • 相对容易设置
  • 不会影响您的主要开发环境
  • 使用USB3闪存驱动器性能通常良好,尽管根据闪存驱动器的质量会有一些差异(USB2速度较慢-我建议在此目的下避免使用)
  • 除了存储设备之外,使用您的实际硬件,因此您可以看到它与驱动程序等的兼容性如何
  • 只要有足够的闪存驱动器,您可以轻松设置任意数量,并且如果您想尝试其他内容,可以轻松重新格式化它们

缺点:

  • 需要一个(或多个)专用于此目的的闪存驱动器
  • 性能取决于您使用的闪存驱动器的质量

3. 从分区双启动

优点:

  • 提供了最佳的性能、驱动程序兼容性等方面的体验,因为它在与您的主要操作系统完全相同的硬件上运行
  • 只要有足够的硬盘空间,您可以同时设置多个(只需为每个设置一个单独的分区)

缺点:

  • 设置正确需要一些低级别的专业知识
  • 对硬盘分区和引导加载程序进行操作总是有可能破坏您当前的设置(在开始之前确保您有可启动的闪存驱动器或Live CD)

如果您在帖子中将Docker替代方案与虚拟化分开,我愿意将其标记为涵盖所有替代方案的答案。在我看来,容器并非真正的虚拟化,因为它们没有运行真正完整的init系统和完整的内核。与完全虚拟化相比,容器(例如Docker、LXC等)在资源方面更加轻量级(等等)... - Ted Cahall

最简单和最容易的方法是使用虚拟化。您可以下载VirtualBox(它是开源的)并安装任何操作系统。我建议您在第一次运行之前创建一个快照,这样如果您在设置、更改配置等方面犯了任何错误,您可以回退到先前的状态。
我已经使用和测试了几个操作系统。这非常简单和快速。甚至,我使用虚拟化技术安装了MSDOS和Windows 3.1。您可以安装任何东西,甚至是ChromeOS(需要一些工作)或任何版本的Windows或Linux,无论其桌面风格如何。

QEMU

QEMU是一种虚拟化解决方案,从理论上解决了这个问题的要求,即廉价且简单。

它允许在Linux或Windows主机中拖放启动操作系统iso文件。

它还允许在主机系统中启动Live USB硬盘,并使用可用的持久性。

与VBox不同,无需构建虚拟硬盘。

QEMU可作为Linux、Windows和其他操作系统的命令行应用程序使用。它也提供GUI界面,并包含在MultiBootUSB Linux和Windows版本中http://multibootusb.org/

QEMU

QEMU也可以从虚拟机管理器中运行,这比MBUSB更快,但不能拖放文件。
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
sudo apt-get install virt-manager

长期的操作系统测试来说,安装在VirtualBox上的系统更为出色。

谢谢!我之前没听说过这个选项。我会去看一下的。 - Ted Cahall

我在过去的三年里成功地从USB驱动器上启动了完整安装的Ubuntu。USB 2.0比旧的3G SATA硬盘(7200转每分钟,16 MB缓存)慢一点,但USB 3.0与3G SATA接口上的SSD相差几秒钟。