Linux 竟然如此强大!能当主力,能入虚拟机,还能随时打包带走。。。
Linux下大家最熟悉的容器就是chroot了,但是作者并不喜欢chroot,主要原因有两点:
基于上面的原因,作者在这里推荐的容器是systemd-nspawn。systemd-nspawn的使用非常简单,假设你的linux分区已经mount到了/mnt上去了,那么你只需要下面步骤就能启动一个systemd-nspawn容器(以Debian为例):
然后就能看到刷刷刷的开机界面了,真的是非常的方便快捷。这里还有一点小技巧是,如果嫌每次开容器都要把linux分区挂载到/mnt上太麻烦,可以在/var/lib/machines里面为每个系统新建一个目录,然后在fstab里面设置一下自动把相应的子卷挂载进去: 这么做的好处是,根目录位于/var/lib/machines的系统,在启动systemd-nspawn的时候可以直接使用-M选项来指定系统,而不需要进入相应目录。比如如果想启动Ubuntu系统:
虚拟机 如果只是想运行一下其他系统里面的程序,那么容器完全就够用了,但是有的时候我们还是需要玩玩不同的内核的,这就必须得用虚拟机了。通常情况下,大家用虚拟机,都是新建一个磁盘镜像,然后插入安装光盘,然后把光盘安装到镜像上。这么做的坏处,一个是访问镜像中的文件不方便,另一个是,我们在本地已经有安装过若干系统了,不去充分利用一下这些而去再重新往镜像里面安装那实在是舍近求远。那我们就来找一个把子卷当成虚拟机rootfs的方法。困难在于,虚拟机是个很独立的东西,是无法直接访问宿主机的文件系统的。然而幸运的是,Linux的内核虚拟化方案KVM提供了一个把本地文件系统传递给虚拟机的解决方案,用到的东西叫做VirtFS。 好消息是,VirtFS是可以作为rootfs的。但是要能正常挂载VirtFS,内核必须要有相应的驱动才行。这里有两种方法可以做到这一点。如果你是自己编译内核的话,那么建议直接将相应的驱动编译进内核而不是模块。根据官网的指示,涉及到的内核配置如下:
如果使用的是发行版提供的内核的话,那么可以修改initramfs的相关设置保证9p、9pnet、9pnet_virtio三个modules能被安装到initramfs里面去。这里以Ubuntu做guest为例,具体做法是修改Ubuntu系统中的/etc/initramfs-tools/modules文件,增加下面三行:
然后重新生成initramfs即可:
内核驱动设置好了,就可以启动qemu虚拟机了,这里假定Ubuntu的rootfs已经被mount到了/var/lib/machines/ubuntu:
最后放一张成功的截图: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |