diff --git a/content/zh/docs/Virtualization/StratoVirt_Into.md b/content/zh/docs/Virtualization/StratoVirt_Into.md new file mode 100644 index 0000000000000000000000000000000000000000..d5f10c62e6a299431ba63d500a98f5863a267be1 --- /dev/null +++ b/content/zh/docs/Virtualization/StratoVirt_Into.md @@ -0,0 +1,18 @@ +# 概述 + +StratoVirt是一款轻量虚拟化方案,通过精简设备模型,优化运行性能,为容器提供安全隔离、性能优异的安全沙箱运行环境。支持CPU、内存、串口、磁盘和网卡等设备的虚拟化,整体架构视图如图1所示。 + +**图1** StratoVirt整体架构图 + +![](figures/StratoVirt架构视图.png) + + + +# 约束限制和规格 + +1. 仅支持运行于x86_64和aarch64体系架构下。 +2. 仅支持在openEuler 20.03及以上版本编译、调测和部署。 +3. 仅支持用于对接openEuler的isula安全沙箱容器运行时场景。 +4. 仅支持运行x86_64和aarch64体系架构的linux虚拟机。 +5. 本软件支持以非root权限运行。 +6. 虚拟机规格限制详见使用指南。 diff --git "a/content/zh/docs/Virtualization/StratoVirt\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" "b/content/zh/docs/Virtualization/StratoVirt\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..da34ffc670dbd89784572b8dfc2efac707c2e686 --- /dev/null +++ "b/content/zh/docs/Virtualization/StratoVirt\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" @@ -0,0 +1,194 @@ +# 虚拟机配置 + +## 概述 + +得到StratoVirt可执行文件以后就要对其运行方式进行配置。我们提供了通过cmdline和json两种方式进行运行配置,用来配置包括CPU、内存、磁盘等信息。这里给出两种方式的具体操作方法。 + + + +### 1、cmdline配置 + +StratoVirt能够运行的最小配置为: + +- 有一个PE格式的linux内核文件 +- 将rootfs镜像设置成virtio-blk设备,并添加到内核参数中 +- 使用api-channel来控制StratoVirt +- 如果要使用ttyS0登录,添加一个串口到启动命令行,并将ttyS0添加到内核的参数中 + +首先,确保api-channel可以被创建,需清理环境: + +``` +$ rm [参数] [socket文件路径] +``` + +接着,使用cmdline命令运行: + +``` +$ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ... +``` + +使用cmdline命令部署的参数参考下表: + +表1 :使用cmdline命令部署的参数 + +| 参数 | 参数选项 | 说明 | +| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| -name | abc | 配置虚拟机名称 | +| -kernel | /path/to/vmlinux.bin | 配置内核镜像 | +| -append | console=ttyS0 root=/dev/vda reboot=k panic=1 | 配置内核命令行参数 | +| -initrd | /path/to/initrd.img | 配置initrd文件 | +| -smp | [cpus=]个数 | 配置cpu个数,范围[1, 254] | +| -m | 内存大小(字节单位)、内存大小M(M单位)、内存大小G(G单位) | 配置内存大小,范围[128M, 512G] | +| -drive | id=rootfs,file=/path/to/rootfs[,readonly=false,direct=true,serial=serial_num] | 配置virtio-blk设备 | +| -netdev | id=iface_id,netdev=tap0[,mac=mac_address] | 配置virtio-net设备 | +| -chardev | id=console_id,path=/path/to/socket | 配置virtio-console,运行前须保证socket文件不存在 | +| -device | vsock,id=vsock_id,guest-cid=3 | 配置vhost-vsock | +| -api-channel | unix:/path/to/socket | 配置api-channel,运行前须保证socket文件不存在 | +| -serial | stdio | 配置串口设备 | +| -D | /path/to/logfile | 配置日志文件 | +| -pidfile | /path/to/pidfile | 配置pid文件,必须和-daemonize一起使用。运行前须保证pid文件不存在 | +| -disable-seccomp | NA | 关闭Seccomp,默认打开 | +| -omit_vm_memory | NA | 当进程panic时,不dump虚拟机内存 | +| -daemonize | NA | 开启进程daemon化 | + +运行配置示例: + +``` +# 确保api-channel可以被创建 +$ rm -f /path/to/socket + +# 运行StratoVirt +$ /path/to/stratovirt \ + -kernel /path/to/vmlinux.bin \ + -append console=ttyS0 root=/dev/vda reboot=k panic=1 \ + -drive file=/path/to/rootfs,id=rootfs,readonly=false \ + -api-channel unix:/path/to/socket \ + -serial stdio +``` + +此时虚拟机启动,输出启动信息。 + + + +![](figures/注意.png) + +``` +1、虚拟机启动后,虚拟机内部会有2个网卡:eth0和eth1,这2张网卡是预留给热插拔用的。热插的第一张网卡是eth0,热插的第二张网卡是eth1,目前只支持热插2张virtio-net网卡。 +2、当启动命令行不正确时,会导致进程coredump。 +``` + + + +### 2、json配置 + +StratoVirt也可以使用json配置文件。 + +首先编写配置文件,各配置字段说明如下: + +**表2**:配置文件的字段 + +| 配置参数 | 配置参数选项 | 说明 | +| -------------- | ------------------------------------------------------------ | ---------------------------------------------------- | +| boot-source | "kernel_image_path": "/path/to/vmlinux.bin","boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet","initrd_fs_path": "/path/to/initrd.img"(可选) | 配置内核镜像和内核参数 | +| machine-config | "name": "abc","vcpu_count": 4,"mem_size": 805306368,"omit_vm_memory": true(可选) | 配置虚拟cpu和内存大小 | +| drive | "drive_id": "rootfs","path_on_host": "/path/to/rootfs.ext4","read_only": false,"direct": true,"serial_num": "xxxxx" (可选) | 配置virtio-blk磁盘 | +| net | "iface_id": "net0","host_dev_name": "tap0","mac": "xx:xx:xx:xx:xx:xx" (可选) | 配置virtio-net网卡 | +| console | "console_id": "charconsole0","socket_path": "/path/to/socket" | 配置virtio-console串口,运行前须保证socket文件不存在 | +| vsock | "vsock_id": "vsock0","guest_cid": 3 | 配置virtio-vsock设备 | +| serial | "stdio": true | 配置串口设备 | + +接着,使用json运行。 + +用法: + +``` +$ /path/to/stratovirt -config /path/to/json -[参数] [参数选项] +``` + +参数: + +使用json运行的参数参考下表 + +表3:使用json运行的参数 + +| 参数 | 参数选项 | 说明 | +| ---------------- | -------------------- | ------------------------------------------------------------ | +| -config | /path/to/json | 配置文件的路径 | +| -api-channel | unix:/path/to/socket | 配置api-channel,运行前须保证socket文件不存在 | +| -D | /path/to/logfile | 配置日志文件 | +| -pidfile | /path/to/pidfile | 配置pid文件,必须配合daemonize使用。运行前须保证pid文件不存在 | +| -disable-seccomp | NA | 关闭Seccomp,默认打开 | +| -daemonize | NA | 开启进程daemon化 | + + + +json配置示例: + +``` +# json配置文件的内容 +{ + "boot-source": { + "kernel_image_path": "/path/to/vmlinux.bin", + "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet" + }, + "machine-config": { + "name": "abc", + "vcpu_count": 2, + "mem_size": 268435456, + "omit_vm_memory": false + }, + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/rootfs.ext4", + "direct": true, + "read_only": false, + "serial_num": "abcd" + } + ], + "net": [ + { + "iface_id": "net0", + "host_dev_name": "tap0", + "mac": "0e:90:df:9f:a8:88" + } + ], + "console": { + "console_id": "charconsole0", + "socket_path": "/path/to/console.socket" + }, + "serial": { + "stdio": true + }, + "vsock": { + "vsock_id": "vsock-123321132", + "guest_cid": 4 + } +} + +# 运行StratoVirt +$ /path/to/stratovirt \ + -config /path/to/simple_machin.json \ + -api-channel unix:/path/to/socket +``` + +现在,StratoVirt可以引导Linux系统的客户虚拟机了。 + +您也可以使用initrdfs来运行StratoVirt,参考项目源码中的文件。路径为:`docs/mk_initrd_rootfs.md` + +如果您想了解更多关于StratoVirt的信息,参考项目源码中的文件。路径为:`docs/StratoVirt-Guidebook.md` + + + +![](figures/须知.png) + +``` +约束限制: +•虚拟机cpu个数范围:[1, 254] +•虚拟机内存大小范围:[128M, 512G] +•虚拟机磁盘个数范围(包括热插的):[0, 6] +•虚拟机网卡个数范围(包括热插的):[0, 2] +•虚拟机的console设备仅支持单路连接 +•x86_64平台,除了磁盘和网卡,最多配置2个设备; aarch64平台,除了磁盘和网卡,最多配置12个设备。 +``` + diff --git "a/content/zh/docs/Virtualization/figures/StratoVirt\346\236\266\346\236\204\350\247\206\345\233\276.png" "b/content/zh/docs/Virtualization/figures/StratoVirt\346\236\266\346\236\204\350\247\206\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..baf5526d077a452c9d8a18af38638c8db9150d27 Binary files /dev/null and "b/content/zh/docs/Virtualization/figures/StratoVirt\346\236\266\346\236\204\350\247\206\345\233\276.png" differ diff --git "a/content/zh/docs/Virtualization/figures/\346\263\250\346\204\217.png" "b/content/zh/docs/Virtualization/figures/\346\263\250\346\204\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..097fbb88a56ba428fb799c1efc6961d6a48c09bf Binary files /dev/null and "b/content/zh/docs/Virtualization/figures/\346\263\250\346\204\217.png" differ diff --git "a/content/zh/docs/Virtualization/figures/\351\241\273\347\237\245.png" "b/content/zh/docs/Virtualization/figures/\351\241\273\347\237\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..7ac453de1bd1b322b8e8ea7454e0007b7fe92bc5 Binary files /dev/null and "b/content/zh/docs/Virtualization/figures/\351\241\273\347\237\245.png" differ diff --git a/content/zh/docs/Virtualization/next_gen.md b/content/zh/docs/Virtualization/next_gen.md new file mode 100644 index 0000000000000000000000000000000000000000..525d0d356c718c229f7f60aaac2cda778382c97c --- /dev/null +++ b/content/zh/docs/Virtualization/next_gen.md @@ -0,0 +1,3 @@ +# 下一代虚拟化 + +相比于传统的虚拟化技术,我们的下一代虚拟化使用内存安全型语言rust编写,极大的提高了虚拟机运行时的内存安全。本节将指导用户使用我们的下一代虚拟化产品StratoVirt。 \ No newline at end of file diff --git "a/content/zh/docs/Virtualization/\344\274\240\347\273\237\350\231\232\346\213\237\345\214\226.md" "b/content/zh/docs/Virtualization/\344\274\240\347\273\237\350\231\232\346\213\237\345\214\226.md" new file mode 100644 index 0000000000000000000000000000000000000000..b1280187aceafbc9462184e358a6c3e2e6195d7e --- /dev/null +++ "b/content/zh/docs/Virtualization/\344\274\240\347\273\237\350\231\232\346\213\237\345\214\226.md" @@ -0,0 +1,3 @@ +# 传统虚拟化 + +本节将指导用户使用由QEMU和libvirt等组件构成的传统虚拟化技术。 \ No newline at end of file diff --git "a/content/zh/docs/Virtualization/\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/content/zh/docs/Virtualization/\347\216\257\345\242\203\345\207\206\345\244\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..1aead23417ec334be72c7069c0b5cc5a259cdabf --- /dev/null +++ "b/content/zh/docs/Virtualization/\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -0,0 +1,58 @@ +# 环境准备 + +## 概述 + +StratoVirt是由内存安全型编程语言rust的编写的,所以为了能够正常的编译,您还需安装rust环境。本节将介绍如何安装rust环境及编译StratoVirt。 + + + +**说明:** + +`下面步骤中的${arch}变量在x86平台是x86_64,在arm平台是aarch64。` + + + +## 安装rust环境 + +StratoVirt需要Rust语言环境和Cargo工具,推荐的版本为1.42。 + +您可以使用下面的链接进行安装:该方法会安装Rust语言环境和Cargo工具。 + +https://www.rust-lang.org/tools/install + +安装完成之后可以查看rust版本: + +```shell +$ rustc --version +rustc 1.42.0 +``` + + + +## 编译StratoVirt + +可以通过musl-libc或glibc两种方式编译(选其中一种即可),这里给出两种普通编译方式的操作方法。 + +1. 使用musl-libc编译,StratoVirt是静态链接的,没有库依赖项。参考命令如下: + + ``` + # 添加musl rust工具链,如果已经安装了,请跳过 + $ arch=`uname -m` + $ rustup target add ${arch}-unknown-linux-musl + + # 编译StroatVirt + $ cargo build --release --target ${arch}-unknown-linux-musl + ``` + +2. 使用glibc编译,StratoVirt是动态链接的,参考命令如下: + + ``` + # 添加gnu rust工具链,如果已经安装了,请跳过 + $ arch=`uname -m` + $ rustup target add ${arch}-unknown-linux-gnu + + # 编译StratoVirt + $ cargo build --release --target ${arch}-unknown-linux-gnu + ``` + + 现在你可以在target/${arch}-unknown-linux-gnu/release/StratoVirt中找到StratoVirt的二进制文件。 \ No newline at end of file diff --git "a/content/zh/docs/Virtualization/\347\224\237\345\221\275\345\221\250\346\234\237\347\256\241\347\220\206.md" "b/content/zh/docs/Virtualization/\347\224\237\345\221\275\345\221\250\346\234\237\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..bfc1f71ffe88373b75cb0c2b6421308a639ff73f --- /dev/null +++ "b/content/zh/docs/Virtualization/\347\224\237\345\221\275\345\221\250\346\234\237\347\256\241\347\220\206.md" @@ -0,0 +1,167 @@ +# 生命周期管理 + +## 概述 + +为了更灵活的使用StratoVirt,我们需要对其进行生命周期的管理。本节将介绍如何对StratoVirt进行启动,暂停,恢复,退出等的管理。 + + + +## 启动 + +当准备好配置文件后您可以选择通过cmdline或者json格式对虚拟机进行启动。 + +1. 使用cmdline启动: + +``` +$ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ... +``` + +2. 使用json格式启动: + +``` +$ /path/to/stratovirt \ + -config /path/to/simple_machin.json \ + -api-channel unix:/path/to/socket +``` + +其中simple_machin.json为配置文件。 + + + +## 连接 + +当前版本的StratoVirt使用[QMP](https://wiki.qemu.org/Documentation/QMP)来管理虚拟机的生命周期。 + +运行StratoVirt时,必须在cmdline参数中创建api-channel作为管理界面。 + +StratoVirt支持Unix socket类型的api-channel,可以通过以下方式设置。 + +``` +# cmdline使用api-channel +-api-channel unix:/path/to/socket +``` + +连接api-channel的方法如下所示: + +``` +# Started with UnixSocket +$ ncat -U /path/to/socket +``` + +连接建立后,您将收到来自StratoVirt的问候消息,如下所示: + +``` +{"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":4},"package":""},"capabilities":[]}} +``` + +现在,您可以输入QMP命令来管理虚拟机。 + +QMP提供了stop、cont、quit和query-status等来管理和查询虚拟机状态。 + + + +## 暂停 + +使用stop命令来暂停所有vCPU执行。 + +- 用法: + +``` +{"execute":"stop"} +``` + +- 具体示例: + +``` +<- {"execute":"stop"} +-> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} +-> {"return":{}} +``` + +## 恢复 + +使用cont命令恢复所有VCPU。 + +- 用法: + +``` +{"execute":"cont"} +``` + +- 具体示例: + +``` +<- {"execute":"cont"} +-> {"event":"RESUME","data":{},"timestamp":{"seconds":1583908853,"microseconds":411394}} +-> {"return":{}} +``` + +## 退出 + +使用quit命令使StratoVirt进程正常退出。 + +- 用法: + +``` +{"execute":"quit"} +``` + +- 具体示例: + +``` +<- {"execute":"quit"} +-> {"event":"SHUTDOWN","data":{"guest":false,"reason":"host-qmp-quit"},"timestamp":{"ds":1590563776,"microseconds":519808}} +-> {"return":{}} +``` + +## 查询状态 + +使用query-status命令查询虚拟机的运行状态。 + +- 用法: + +``` +{ "execute": "query-status" } +``` + +- 具体示例: + +``` +<- { "execute": "query-status" } +-> { "return": { "running": true,"singlestep": false,"status": "running" } +``` + + + +使用query-cpus命令查询所有VCPU的拓扑结构。 + +- 用法: + +``` +{ "execute": "query-cpus" } +``` + +- 具体示例: + +``` +<- { "execute": "query-cpus" } +-> {"return":[{"CPU":0,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom_path":"/machine/unattached/device[0]","thread_id":8439},{"CPU":1,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom_path":"/machine/unattached/device[1]","thread_id":8440}]} +``` + + + +使用query-hotpluggable-cpus命令查询所有VCPU的online/offline情况。 + +- 用法: + +``` +{ "execute": "query-hotpluggable-cpus" } +``` + +- 具体示例: + +``` +<- { "execute": "query-hotpluggable-cpus" } +-> {"return":[{"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom-path":"/machine/unattached/device[0]","type":"host-x86-cpu","vcpus-count":1},{"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom-path":"/machine/unattached/device[1]","type":"host-x86-cpu","vcpus-count":1}]} +``` + diff --git "a/content/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\350\265\204\346\272\220\347\256\241\347\220\206.md" "b/content/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\350\265\204\346\272\220\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..01278870719018ab87fce079b7ac50d3bb123b38 --- /dev/null +++ "b/content/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\350\265\204\346\272\220\347\256\241\347\220\206.md" @@ -0,0 +1,79 @@ +# 管理虚拟机资源 + +## 概述 + +除了可以使用QMP命令来管理虚拟机的生命周期,我们还可以使用QMP来管理虚拟机上的资源。本节将介绍如何使用QMP命令管理磁盘和网卡。 + + + +**说明:** + +您可以参考上节的QMP连接命令,进行QMP的连接。然后才能使用QMP对虚拟机的资源进行管理。 + + + +## 磁盘热插拔 + +- 用法: + +``` +{"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +{"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +``` + +- 参数: + +blockdev-add中的node-name要和device_add中的id一致,如上都是drive-0。 + +/path/to/block是你要热插磁盘的镜像路径,不能是启动rootfs的磁盘镜像。 + +对于addr来说,它从0x0开始与虚拟机的vda映射,0x1与vdb映射,以此类推。为了兼容qmp协议,"addr"也可以用"lun"代替,但是lun=0与客户机的vdb映射。只支持热插6张virtio-blk磁盘。 + +- 具体示例: + +``` +<- {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +-> {"return": {}} +<- {"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +-> {"return": {}} +``` + +- 您当然也可以通过以下方式删除替换的块设备: + +``` +<- {"execute": "device_del", "arguments": {"id": "drive-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"drive-0","path":"drive-0"},"timestamp":{"seconds":1598513162,"microseconds":367129}} +-> {"return": {}} +``` + + + +## 网卡热插拔 + +- 用法: + +``` +{"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +{"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +- 参数: + +netdev_add中的id应该和device_add中的id一致,ifname是后端的tap设备名称。 + +对于addr来说,它从0x0开始与虚拟机的eth0映射,0x1和虚拟机的eth1映射,只支持热插2张virtio-net网卡。 + +- 具体示例: + +``` +<- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +-> {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +- 您当然也可以通过以下方式删除替换的网络设备: + +``` +<- {"execute": "device_del", "arguments": {"id": "net-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"net-0","path":"net-0"},"timestamp":{"seconds":1598513339,"microseconds":97310}} +-> {"return": {}} +``` \ No newline at end of file diff --git "a/content/zh/docs/Virtualization/\351\225\234\345\203\217\345\210\266\344\275\234.md" "b/content/zh/docs/Virtualization/\351\225\234\345\203\217\345\210\266\344\275\234.md" new file mode 100644 index 0000000000000000000000000000000000000000..7c528b7381debf2f2bd15b195d4601ec6d5bbeba --- /dev/null +++ "b/content/zh/docs/Virtualization/\351\225\234\345\203\217\345\210\266\344\275\234.md" @@ -0,0 +1,106 @@ +# 镜像制作 + +## 概述 + +由于StratoVirt是轻量级虚拟化方案,所以在开始使用之前要编译好运行所必需的kernel和root_fs。 + + + +## kernel镜像制作 + +当前版本的StratoVirt仅支持x86_64和aarch64平台的PE格式内核镜像。此格式内核映像可以使用以下工具生成: + +1. 使用下面的命令获取openEuler的kernel源代码: + + ``` + $ git clone https://gitee.com/openeuler/kernel + $ cd kernel + ``` + +2. 使用下面的命令查看并切换kernel的版本到4.19: + + ``` + $ git checkout kernel-4.19 + ``` + +3. 配置linux的kernel版本。您可以使用我们推荐的配置,将其复制到kernel路径下作为.config。您也可以通过以下命令进行交互: + + ``` + $ make menuconfig + ``` + +4. 使用下面的命令制作并转换kernel镜像为PE格式: + + ``` + $ make -j vmlinux && objcopy -O binary vmlinux vmlinux.bin + ``` + + + +## root_fs制作 + +Rootfs镜像是一种文件系统镜像,在StratoVirt启动的时候可以装载带有init的EXT4格式的镜像。下面是制作EXT4 Rootfs镜像的简单方法: + +1. 准备一个大小合适的文件(例如在/home中创建10G空间大小的文件): + + ``` + $ cd /home + $ dd if=/dev/zero of=./rootfs.ext4 bs=1G count=10 + ``` + +2. 在此文件上创建空的EXT4文件系统: + + ``` + $ mkfs.ext4 ./rootfs.ext4 + ``` + +3. 挂载文件镜像: + + ``` + # 创建目录 + $ mkdir /mnt/rootfs + + # 返回刚刚创建文件系统的目录(如/home),若不是root用户,mount的时候要用sudo + $ cd /home + $ mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs + ``` + +4. 获取您对应的平台的 + + 最新的alpine-mini rootfs: + + ``` + # 如果您使用的是aarch64平台,请使用下面的命令 + $ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/aarch64/alpine-minirootfs-3.12.0-aarch64.tar.gz + $ tar -zxvf alpine-minirootfs-3.12.0-aarch64.tar.gz + $ rm alpine-minirootfs-3.12.0-aarch64.tar.gz + + # 如果您使用的是x86_64平台,请使用下面的命令 + $ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.12.0-x86_64.tar.gz + $ tar -zxvf alpine-minirootfs-3.12.0-x86_64.tar.gz + $ rm alpine-minirootfs-3.12.0-x86_64.tar.gz + ``` + +5. 使用下面的命令为了EXT4文件镜像制作一个简单的/sbin/init: + + ``` + $ cat > sbin/init <}}) - [认识虚拟化]({{< relref "./docs/Virtualization/认识虚拟化.md" >}}) - - [安装虚拟化]({{< relref "./docs/Virtualization/安装虚拟化.md" >}}) - - [准备使用环境]({{< relref "./docs/Virtualization/准备使用环境.md" >}}) - - [虚拟机配置]({{< relref "./docs/Virtualization/虚拟机配置.md" >}}) - - [管理虚拟机]({{< relref "./docs/Virtualization/管理虚拟机.md" >}}) - - [热迁移虚拟机]({{< relref "./docs/Virtualization/热迁移虚拟机.md" >}}) - - [管理系统资源]({{< relref "./docs/Virtualization/管理系统资源.md" >}}) - - [管理设备]({{< relref "./docs/Virtualization/管理设备.md" >}}) - - [最佳实践]({{< relref "./docs/Virtualization/最佳实践.md" >}}) - - [附录]({{< relref "./docs/Virtualization/附录.md" >}}) + - [传统虚拟化]({{< relref "./docs/Virtualization/传统虚拟化.md" >}}) + - [安装虚拟化]({{< relref "./docs/Virtualization/安装虚拟化.md" >}}) + - [准备使用环境]({{< relref "./docs/Virtualization/准备使用环境.md" >}}) + - [虚拟机配置]({{< relref "./docs/Virtualization/虚拟机配置.md" >}}) + - [管理虚拟机]({{< relref "./docs/Virtualization/管理虚拟机.md" >}}) + - [热迁移虚拟机]({{< relref "./docs/Virtualization/热迁移虚拟机.md" >}}) + - [管理系统资源]({{< relref "./docs/Virtualization/管理系统资源.md" >}}) + - [管理设备]({{< relref "./docs/Virtualization/管理设备.md" >}}) + - [最佳实践]({{< relref "./docs/Virtualization/最佳实践.md" >}}) + - [附录]({{< relref "./docs/Virtualization/附录.md" >}}) + - [下一代虚拟化]({{< relref "./docs/Virtualization/下一代虚拟化.md" >}}) + - [StratoVirt虚拟化简介]({{< relref "./docs/Virtualization/StratoVirt虚拟化简介.md" >}}) + - [镜像制作]({{< relref "./docs/Virtualization/镜像制作.md" >}}) + - [环境准备]({{< relref "./docs/Virtualization/环境准备.md" >}}) + - [虚拟机配置]({{< relref "./docs/Virtualization/StratoVirt虚拟机配置.md" >}}) + - [生命周期管理]({{< relref "./docs/Virtualization/生命周期管理.md" >}}) + - [虚拟机资源管理]({{< relref "./docs/Virtualization/虚拟机资源管理.md" >}}) - [容器用户指南]({{< relref "./docs/Container/container.md" >}})