技术知识库
根文件系统目录树与 ext4 镜像的区别
根文件系统目录树与 ext4 镜像的区别
摘要
rootfs 首先是一组符合 Linux 根目录约定的文件和目录;ext4 镜像则是承载这些内容的块设备文件系统。debootstrap 生成的是主机目录中的 rootfs 树,mkfs.ext4 -d 把这棵树写入镜像;QEMU 把镜像呈现为 virtio 块设备,Linux 最终把 /dev/vda 挂载为 /。
rootfs 目录树
典型内容包括:
/
├── bin、sbin、usr:程序
├── lib:动态加载器与共享库
├── etc:系统配置
├── dev、proc、sys、run:运行时挂载点
├── var:日志、缓存和软件包状态
└── home、root:用户数据
目录树本身没有 ext4 inode、日志和超级块;它只是主机文件系统中的一组文件。
ext4 镜像
镜像文件内部包含完整的 ext4 元数据和目录内容。QEMU 的 virtio-blk 将普通镜像文件模拟成虚拟磁盘:
debian-arm64.ext4
↓ QEMU virtio-blk
/dev/vda
↓ Linux ext4 驱动
挂载为 /
因为 ext4 可读写,Debian 的日志、machine-id、软件安装和用户文件可以跨虚拟机重启保存;initramfs 中的临时 rootfs 通常驻留内存,重启后消失。
为什么要关注文件系统特性
创建镜像的 e2fsprogs 可能比运行它的 Linux 内核新。若新工具默认启用旧内核不认识的 incompat feature,Linux 会拒绝挂载。本实验针对 Linux 5.0 显式关闭 orphan_file。
启动前必须内置的能力
为了从 /dev/vda 启动,virtio block 和 ext4 驱动必须直接编入内核。若它们只存在于尚未挂载的磁盘模块目录中,会形成“必须先挂载磁盘才能加载用于挂载磁盘的驱动”的循环依赖。