服务公告
蓝易云cdn:linux系统中rootfs根文件系统制作
发布时间:2026-01-24 00:03
在 Linux 体系里,“rootfs 根文件系统”可以理解为一套可启动/可运行的最小用户态交付物:包含 /bin /sbin /lib /etc /usr 等目录与关键组件(shell、动态库、包管理/基础工具、init),最终被内核挂载为 /。不同目标场景,rootfs 的“完备度”差异很大:
- 容器 rootfs:只要能跑进程即可(通常不需要 systemd)。
- 整机/虚拟机启动 rootfs:必须有 init(systemd 或其它 init)、设备管理、基础服务编排。🔧
下面给你两条生产常用路线:RHEL/CentOS 系(dnf/yum) 与 Debian/Ubuntu 系(debootstrap)。每段命令都带解释,拿去就能落地。✅

一、RHEL/CentOS 系:用 dnf/yum 构建 rootfs(更贴近你常用环境)
适合:CentOS Stream / Alma / Rocky / RHEL 系;交付可控、依赖清晰。
1)定义目录并初始化最小系统
ROOTFS=/opt/rootfs
mkdir -p "$ROOTFS"
解释:
ROOTFS是 rootfs 的落盘目录,相当于未来的/根。mkdir -p确保目录存在,重复执行不报错,便于脚本化与流水线构建。
dnf -y --installroot="$ROOTFS" --setopt=install_weak_deps=False --nodocs \
install bash coreutils findutils grep gawk sed tar gzip xz \
iproute iputils passwd shadow-utils ca-certificates openssl
解释:
dnf --installroot=...:把软件安装到指定目录,而不是当前系统根目录;这是“离线构建 rootfs”的核心。--setopt=install_weak_deps=False:不装弱依赖,减小体积,提升交付效率。--nodocs:不装文档,减少镜像噪音(生产交付更干净)。bash/coreutils等是基础执行环境;passwd/shadow-utils用于账号体系;ca-certificates/openssl保障 HTTPS 与证书链可用。
如果你的目标是“可启动整机 rootfs”,还需要 init(通常是 systemd):
dnf -y --installroot="$ROOTFS" --setopt=install_weak_deps=False --nodocs \
install systemd systemd-udev
解释:
systemd提供 PID 1 与服务编排;systemd-udev用于设备事件与节点管理。- 容器场景一般不建议上 systemd(除非你明确要“类 VM 行为”)。
2)准备 chroot 环境(让你在 rootfs 里做配置)
mount --bind /dev "$ROOTFS/dev"
mount -t proc proc "$ROOTFS/proc"
mount -t sysfs sys "$ROOTFS/sys"
解释:
- 把宿主机的
/dev绑定进去,让 rootfs 里有设备视图(否则很多命令会异常)。 - 挂载
proc/sysfs,让系统信息与内核接口在 chroot 中可见,这是“像真机一样配置”的必要条件。
chroot "$ROOTFS" /bin/bash
解释:
chroot把根切换到$ROOTFS,后续操作都发生在新系统里,相当于“进入 rootfs 进行最后装配”。
在 chroot 内执行(示例):
echo "root:StrongPassw0rd" | chpasswd
echo "myhost" > /etc/hostname
printf "nameserver 1.1.1.1\n" > /etc/resolv.conf
解释:
chpasswd批量改密码,适合自动化(生产建议走密钥/初始化流程,别在镜像里硬编码明文)。/etc/hostname设置主机名;/etc/resolv.conf配置 DNS(容器里通常由运行时注入,但离线 rootfs 先给一个可用默认值更稳)。
退出 chroot 并清理挂载:
exit
umount -l "$ROOTFS/dev" "$ROOTFS/proc" "$ROOTFS/sys"
解释:
umount -l懒卸载,避免被占用导致构建卡住,提升构建流水线稳定性。
3)交付格式:tar 包 / ext4 镜像(按你的使用场景选)
(A)打包为 tar(容器/分发最常用)
tar --numeric-owner -C "$ROOTFS" -cpf rootfs.tar .
gzip -9 rootfs.tar
解释:
--numeric-owner:用 UID/GID 数字保存属主,跨机器解包不依赖用户名一致性(企业交付必选项)。-C "$ROOTFS":从 rootfs 根开始打包,解包后结构就是/的样子。gzip -9:最大压缩,换空间节省(代价是压缩更慢)。
(B)制作 ext4 文件系统镜像(适合挂载/启动盘)
dd if=/dev/zero of=rootfs.ext4 bs=1M count=2048
mkfs.ext4 -F rootfs.ext4
mkdir -p /mnt/rootfs_img
mount -o loop rootfs.ext4 /mnt/rootfs_img
rsync -aHAX "$ROOTFS"/ /mnt/rootfs_img/
umount /mnt/rootfs_img
解释:
dd创建 2GB 空白镜像(按需改count)。mkfs.ext4格式化为 ext4。mount -o loop把文件当块设备挂载。rsync -aHAX:保留权限、硬链接、ACL、扩展属性,最大化还原真实系统语义。- 最终得到可被引导器/虚拟机挂载的根分区镜像。
二、Debian/Ubuntu 系:用 debootstrap 构建(更轻、更标准化)
适合:要极简 rootfs、追求体积与依赖可控。
ROOTFS=/opt/rootfs
mkdir -p "$ROOTFS"
debootstrap --variant=minbase stable "$ROOTFS"
已经是第一篇啦!
下一篇: 服务器路由命令有哪些常用技巧?