Debian教程

Debian虚拟化系统

虚拟化是一种技术,它允许在一个物理服务器上托管多个虚拟计算机,这些虚拟计算机在实际硬件上具有不同程度的独立性,并且可以单独工作。通过使用Debian虚拟化技术,可以在单个机器上同时运行多个系统。

一、虚拟化和模拟器工具

有几个虚拟化和模拟器工具平台:

1、完全的硬件模拟软件包,比如通过 games-emulator 元软件包安装的软件包。

2、大部分 CPU 层的模拟,加上一些 I/O 设备的模拟,比如 QEMU。

3、大部分 CPU 层的虚拟化,加上一些 I/O 设备的模拟,比如 Kernel-based Virtual Machine (KVM)。

4、操作系统级的容器虚拟化,加上内核级的支持,比如 LXC (Linux Containers), Docker, systemd-nspawn(1), ...

5、操作系统级的文件系统访问虚拟化,加上在文件路径上的系统库调用,比如 chroot。

6、操作系统级的文件系统访问虚拟化,加上在文件所有者权限上的系统库调用,比如 fakeroot。

7、操作系统 API 模拟器,比如 Wine。

8、解释器级的虚拟化,加上它的执行选择和运行时库忽略,比如 Python 的 virtualenv 和 venv。

下面列出了一些帮你搭建虚拟化系统的软件包:

虚拟化工具列表:

软件包 流行度 大小 说明
coreutils V:881, I:999 18307 GNU 核心工具包含 chroot(8)
systemd-container V:53, I:60 1328 systemd container/nspawn 工具包含 systemd-nspawn(1)
schroot V:5, I:7 2579 在 chroot 下执行 Debian 二进制包的特异工具
sbuild V:1, I:3 242 从 Debian 源码构建 Debian 二进制包的工具
debootstrap V:5, I:55 314 搭建一个基本的 Debian 系统 (用 sh 写的)
cdebootstrap V:0, I:1 115 搭建一个 Debian 系统 (用 C 写的)
cloud-image-utils V:1, I:17 66 云镜像管理工具
cloud-guest-utils V:3, I:12 71 云客户机工具
virt-manager V:11, I:44 2296 虚拟机管理器: 用于管理虚拟机的桌面应用
libvirt-clients V:47, I:65 1241 libvirt 的库程序
lxd V:0, I:0 52119 LXD: 系统容器和虚拟机管理器
podman V:13, I:15 41928 podman:在 Pods 里面运行基于 OCI 容器的引擎
podman-docker V:0, I:0 248 在 Pods 里面运行基于 OCI 容器的引擎 -- docker 封装器
docker.io V:40, I:43 150003 docker: Linux 容器运行时
games-emulator I:0 21 games-emulator: Debian 的游戏模拟器
bochs V:0, I:0 6956 Bochs: IA-32 PC 仿真器
qemu I:15 97 QEMU: 快速的通用处理器仿真器
qemu-system I:22 66 QEMU: 全功能系统的模拟二进制
qemu-user V:1, I:6 93764 QEMU: 用户模式的模拟二进制
qemu-utils V:13, I:107 10635 QEMU: 工具集
qemu-system-x86 V:35, I:92 58128 KVM: x86 硬件上有 硬件辅助虚拟化的全虚拟化
virtualbox V:7, I:8 126272 VirtualBox:i386 和 amd64 上 x86 的虚拟化解决方案
gnome-boxes V:1, I:7 6691 Boxes:用于访问虚拟机系统的简单的 GNOME 应用程序
xen-tools V:0, I:2 719 用于管理 debian XEN 虚拟服务器的工具
wine V:14, I:61 133 Wine: Windows 应用程序编程接口实现(标准套件)
dosbox V:1, I:15 2696 DOSBox:有 Tandy/Herc/CGA/EGA/VGA/SVGA 显卡,声音和 DOS 的 x86 模拟器
lxc V:9, I:12 25889 Linux 容器用户层工具
python3-venv I:86 6 venv 创建虚拟的 python 环境(系统库)
python3-virtualenv V:9, I:51 356 virtualenv 创建隔离的虚拟 python 环境
pipx V:3, I:16 3308 pipx 在隔离的环境中安装 python 应用程序

二、虚拟化工作流

自从 lenny 之后,默认的 Debian 内核就是支持 KVM 的。典型的虚拟化工作流涉及以下几个步骤。

1、创建空文件系统 (目录树或磁盘映像)。

  • 目录树可以通过 "mkdir -p /path/to/chroot" 创建;
  • 原始的磁盘映像文件能够使用 dd(1) 创建;
  • qemu-img(1) 能够创建和转化 QEMU 支持的磁盘映像文件;
  • 原始的格式和 VMDK 文件格式,能够作为虚拟化工具的通用格式。

2、使用 mount(8) 挂载磁盘映像到文件系统 (可选)。

  • 对于原始磁盘映像文件,把它作为回环设备或设备映射设备挂载;
  • 对于 QEMU 支持的磁盘映像,把它们作为 network block device 网络块设备挂载。

3、在目标文件系统上部署需要的系统数据。

  • 使用 debootstrap 和 cdebootstrap 之类的程序来协助处理这个过程;
  • 在全功能系统模拟器下使用操作系统安装器。

4、在虚拟化环境下运行一个程序。

  • chroot 提供基本的虚拟化环境,足够能在里面编译程序,运行控制台应用,运行后台守护程序 daemon;
  • QEMU 提供跨平台的 CPU 模拟器;
  • QEMU 和 KVM 通过 hardware-assisted virtualization硬件辅助虚拟化来提供全功能系统的模拟;
  • VirtualBox 可以在 i386 和 amd64 上,使用或者不使用 hardware-assisted virtualization硬件辅助虚拟化来提供全功能系统模拟。

三、挂载虚拟磁盘映像文件

对于其它虚拟磁盘映像文件,你能够用使用 network block device网络块设备 协议的 qemu-nbd(8) 来导出他们,并使用内核模块 nbd 来挂载它们.

qemu-nbd(8) 支持 QEMU 所支持的磁盘格式: QEMU 支持下列磁盘格式: raw, qcow2, qcow, vmdk, vdi, bochs, cow (user-mode Linux copy-on-write), parallels, dmg, cloop, vpc, vvfat (virtual VFAT)和主机设备。

网络块设备能够用和回环设备一样的方式支持分区,你能够按下面的方式挂载 "disk.img" 的第一个分区.

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1

注意:可以给 qemu-nbd(8) 使用 "-P 1" 选项来导出"disk.img"的第一个分区.

四、Chroot系统

如果你希望从终端控制台尝试一个新的 Debian 环境,推荐使用 chroot。这使你能够运行 unstable 和 testing 的控制台应用程序,不会有通常的相关风险,并且不需要重启。

下面的列子假设根源系统和 chroot 系统都共享相同的 amd64 CPU 架构。

虽然你能够手工使用 debootstrap(1)来创建一个 chroot(8) 环境,这要求琐碎的工作。sbuild 软件包从源代码构建一个 Debian 软件包,使用 schroot 软件包管理的 chroot 环境。它和帮助脚本 sbuild-createchroot(1) 一起。让我们按如下所示的方式运行它,来学会它是怎样工作的。

$ sudo mkdir -p /srv/chroot
$ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
...

你能够看到 debootstrap(8) 是如何在 "/srv/chroot/unstable-amd64-sbuild" 下部署 unstable 环境的系统数据,用于一个最小的构建系统。

你可以使用 schroot(1) 来登录到这个环境。

$ sudo schroot -v -c chroot:unstable-amd64-sbuild

你可以看到一个运行在 unstable 环境的系统 shell 是如何创建的。

注意:

  • "/usr/sbin/policy-rc.d" 文件总是用 101 退出,阻止在 Debian 系统上自动启动后台守护程序;
  • 一些在 chroot 下的程序,需要访问比上面根源系统上的 sbuild-createchroot 能够提供的文件之外的更多文件才能够运行。例如,"/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp"等等.也许需要使用 bind-mounted 或拷贝;
  • sbuild 软件包帮助建立一个 chroot 系统来构建一个软件包,在 chroot 内使用 schroot 作为它的后端。它是一个检查构建依赖(build-dependencies)的理想系统;
  • systemd-nspawn(1) 命令使用 chroot 类似的方法帮助运行一个命令,或者轻量级容器内的操作系统。它更强大,因为它使用命名空间来完全虚拟化进程树、进程间通讯、主机名、域名,并可选网络和用户数据库。

五、多桌面系统

如果想尝试任一操作系统的一个新的 GUI 桌面环境,我推荐在 Debian 稳定版 系统上使用 QEMU或者KVM ,这些软件应用虚拟化技术安全的运行多桌面系统。这能让你运行任何桌面应用,包括 Debian 不稳定版和测试版上的桌面应用,并且没有与之相关的通常意义上的风险,并且不需要重启。因为单纯的 QEMU 工具是非常慢的,当主机系统支持 KVM 的时候,建议使用它来加速。

虚拟机管理器,也被称为 virt-manager,它是一个便利的管理 KVM 虚拟机的 GUI(图形用户界面)工具,它调用 libvirt。按下面的方法,能够创建一个可以用于QEMU 的包含有 Debian 系统的虚拟磁盘映像 "virtdisk.qcow2",这个 Debian 系统使用 debian 安装器:小 CD安装。

$ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

注意:在虚拟化下运行 Ubuntu 和 Fedora 之类的其它 GNU/Linux 发行版,是一个不错的学习其配置技巧的方法。其它专有操作系统也可以在这个 GNU/Linux 虚拟化下很好的运行。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录