在不承诺的情况下尝试新操作系统版本的方法?

Ted*_*all 20 live-usb dual-boot virtualization iso usb-installation

我想尝试新的操作系统版本,例如 Ubuntu 17.04 或 Ubuntu 17.10,以查看新功能。我还喜欢查看 Kubuntu、CentOS 或其他发行版(Windows 11 到货时?) - 或者设置测试环境,知道我可能会丢弃它们并且不想在我的核心机器上这样做。

有哪些替代方案可以在不危及我的主要开发机器的情况下做到这一点?我不是在寻找关于最佳方式的辩论,而是寻求哪些替代方案。

sud*_*dus 26

USB 替代品

USB 替代品很好,当

  • 你想测试性能(在裸机上)
  • 计算机不够强大,无法在虚拟机中很好地运行系统

您可以使用至少 2GB 驱动器空间的 USB 随身碟并创建一个

  • 现场Ubuntu系统的随身碟。

    从 U 盘启动并在启动菜单中选择“尝试 Ubuntu”(以及与其他 linux 发行版类似的内容)。如果您在实时(仅实时)驱动器中保存数据、安装程序或调整系统,则它无法在关机或重启后继续存在。


如果你想

  • 以更高级的方式尝试 Ubuntu 或
  • 保存数据、安装程序或调整系统以及
  • 您拥有/获得至少 4 GB 的快速 USB 随身碟,

你可以创建一个

  • 持久的实时Ubuntu 系统

或者,如果您拥有/获得至少 16 GB快速 USB 随身碟,您可以创建一个

  • 已安装Ubuntu 系统(就像安装在内部驱动器中,但在 USB 随身碟中)。

    USB 驱动器中安装的系统稳定且灵活,可以保持最新和无限制地调整。在这种方式下,它比持久的实时系统要好。如果您可以避免使用专有驱动程序,它在计算机之间是可移植的,但持久的实时系统更易于移植。

链接


  • 由于海报有一个正在运行的 Ubuntu(?) 安装,因此也可以直接从硬盘启动 ISO。设置到(新)ISO 的链接,使用 grub 中的链接(添加到您的 /etc/grub.d/40_custom),并有一个 FAT 分区,其中包含 casper-rw 文件的目录(PERSISTENCE_PATH 以标识要使用的文件) )。添加“toram”,ISO 启动性能与普通硬盘安装相当(甚至更快)。 (2认同)
  • 是的,@ubfan1 的替代品不错,我用过好几次了。设置可能比创建 USB 闪存盘稍微复杂一些,但是一旦拥有它,它就可以正常工作:-) 请参阅此链接,https://help.ubuntu.com/community/Grub2/ISOBoot#Manually_editing_the_GRUB_files (2认同)
  • 当您想要测试新的操作系统版本与您的硬件的真实表现时,在单独的存储设备上安装是最好的方法。 (2认同)

Ted*_*all 15

测试新发行版和操作系统版本的一种方法是使用虚拟化。它不需要额外的 PC/键盘/视频/鼠标或适配器的空间,即可使用单个键盘、视频、鼠标运行多台 PC。它只需要一台 PC 和一些虚拟化软件。

这假设您有一台具有多核 CPU 的机器,能够进行虚拟化和合理的内存量。如果你有的话,我建议至少 8GB 的​​内存和 16GB 更好。

如果您正在运行 Ubuntu 并且只想尝试 Linux 发行版(我认为 Windows 不会工作),您可以使用 Ubuntu 中打包的免费虚拟化软件:KVM 或 Xen。两者都运行良好,是免费的,并且可以运行各种 Linux 发行版。然而,管理虚拟机的工具有些缺乏。Oracle 有一个免费版本的虚拟化工具,称为 VirtualBox,当然还有商业 VMWare 产品。如果您选择桌面,VirtualBox 和 VMWare 也可以在 Windows 机器上运行 Ubuntu。

通过使用 VM 管理器,您将能够添加新发行版,测试它们,使用新功能,然后在新版本出现时丢弃它们。它们只在不运行时占用磁盘空间,所以它们甚至不需要被丢弃,除非它变得紧张。使用 VM 管理器,可以轻松平衡一台机器上的 5、10 个或更多发行版,并能够根据需要启动和关闭它们。如果你有幸拥有一台 32GB 或 64GB 的机器,你甚至可以并行运行它们。

  • Windows 可以在 VM 内运行;然而,较新的版本太重了,你需要一个相当快的多核才能使用。 (2认同)
  • KVM 运行 Windows 10 和 7 就好了。如果 Xen 指的是 Citrics Xen Server,它也可以运行 Windows 10 和 7。 (2认同)

Dav*_*ter 12

作为sudodus 答案的更快更便宜的替代方案,您可以直接从可启动驱动器映像文件而不是专用 (USB) 驱动器启动。

至少对于 Ubuntu ISO 映像(以及 Linux Mint 等衍生产品),以下方法有效。其他发行版可能需要进一步调整。

  1. 将可启动驱动器映像以 ISO 格式1作为文件存储在内部存储驱动器上2

  2. 添加一个 Grub“部分”文件,例如35_isofiles,包含内容

    #!/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 # <-- set path to your ISO image here
    do
        make_iso_menuentry "$iso" "${iso##*/}" || true
    done
    
    Run Code Online (Sandbox Code Playgroud)

    /etc/grub.d并使其可执行。

    编辑指示行中的文件路径以满足您的需要。如果需要,您可以添加多个路径和/或 Bash glob 模式。

  3. 使文件可执行:

    sudo chmod a+x /etc/grub.d/35_isofiles
    
    Run Code Online (Sandbox Code Playgroud)
  4. 确保Grub 菜单已启用

  5. 更新 Grub 配置:

    sudo update-grub
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重新启动并选择新添加的 Grub 菜单项以从相应的映像文件启动。


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

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

  • 哇 !什么剧本!我通过简单地在 /etc/grub.d/40_custom 中添加一个条目并找到好的参数手动做了同样的事情;鉴于我对 https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Using_GRUB_and_loopback_devices 的帮助,这并不难 (2认同)

cra*_*sic 9

虚拟化是迄今为止最简单的。

但是,您在这里有 2 个单独的用例,它们将有不同的解决方案

1. 尝试新的发行版

发行版基本上由打包的应用程序和用户空间环境决定(例如SystemDvsinit用于引导)

如果您想定性地“评估”不同发行版的 UIX,那么我会推荐全面的虚拟化,您可以在其中安装整个操作系统并评估其可用性。这在其他答案中已充分涵盖。

如果您只需要用户空间环境进行测试,请继续阅读。

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
Run Code Online (Sandbox Code Playgroud)
  • 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 :) "
Run Code Online (Sandbox Code Playgroud)

一次性使用

$ docker run -v "$PWD:/workdir" --rm my-builder make
Run Code Online (Sandbox Code Playgroud)

你甚至可以传递环境变量

$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
Run Code Online (Sandbox Code Playgroud)

或者启动一个持久化实例并将文件显式复制到其中

$ 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
Run Code Online (Sandbox Code Playgroud)

实际上还有数百种其他使用模式,但是,类似脚本的图像定义、可扩展的图像和命令行使用使其对开发、测试甚至部署环境极具吸引力