服务公告

服务公告 > Linux命令 > 蓝易云cdn:linux系统中rootfs根文件系统制作

蓝易云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"

已经是第一篇啦!

下一篇: 服务器路由命令有哪些常用技巧?