x64 架构的linux 6.6 借助binfmt_misc、chroot 运行aarch64,并挂载一个分区作为overlay
在 x64 Linux 6.6 上结合 binfmt_misc、chroot 和 overlayfs 运行 AArch64 环境,核心是通过 overlay 挂载 保护原始 AArch64 根文件系统(rootfs)的只读性,所有修改(如安装软件、创建文件)都写入独立分区(上分层),实现「原始环境不变、修改可持久化 / 可重置」的效果。
一、核心原理
- overlayfs 三层结构:
lowerdir:底层目录(原始 AArch64 rootfs,设为只读,避免被修改)。- upperdir:上分层目录(存储所有修改,位于你指定的独立分区)。
workdir:临时工作目录(overlayfs 内部使用,需与 upperdir 在同一分区)。merged:合并目录(最终呈现给 chroot 的根目录,叠加 lowerdir 和 upperdir 的内容)。
- 流程:chroot 进入 merged 目录后,所有读操作优先取 upperdir(若有),否则取 lowerdir;所有写操作仅写入 upperdir,原始 rootfs 始终不变。
二、前置条件
- 已完成基础配置:binfmt_misc 启用、qemu-aarch64-static 安装、AArch64 binfmt 规则注册(参考前两轮回复)。
- 存在独立分区(如 /dev/sdb1、/dev/nvme0n1p5):用于存储 upperdir 和 workdir(建议容量 ≥ 1GB,格式为 ext4/xfs 等 Linux 兼容格式)。
- 已准备 AArch64 rootfs(如 /opt/aarch64-rootfs,Debian/Ubuntu 完整根文件系统)。
- root 权限(所有挂载、chroot 操作需最高权限)。
三、详细步骤
1. 确认基础配置生效(必做)
先验证前期配置,避免后续踩坑:
1 | # 1. 检查 AArch64 binfmt 规则已启用 |
2. 处理 overlay 分区(独立分区准备)
假设你要用作 overlay 上分层的分区为 /dev/sdb1(需替换为你的实际分区路径,可通过 lsblk 或 fdisk -l 查看)。
(1)格式化分区(若分区未格式化,首次需执行)
推荐格式化为 ext4(兼容性最好):
1 | # 备份分区数据(若有),格式化会清空数据! |
(2)挂载分区到宿主目录
创建分区挂载点,将 overlay 分区挂载到宿主的固定目录(如 /opt/overlay-partition):
1 | # 创建挂载点 |
(3)在分区内创建 overlay 必需目录
在挂载的分区内创建 upperdir(存储修改)和 workdir(overlay 临时工作目录):
1 | sudo mkdir -p /opt/overlay-partition/{upper,work} |
3. 挂载 overlayfs(合并原始 rootfs 与分区)
创建 merged 目录(最终 chroot 的目标目录,叠加后的 AArch64 根目录),并通过 overlayfs 挂载:
1 | # 1. 创建 merged 目录(叠加后的根目录挂载点) |
参数说明:
lowerdir=/opt/aarch64-rootfs:原始 AArch64 rootfs(只读,自动生效,无需额外设置 ro)。upperdir=/opt/overlay-partition/upper:上分层(分区内目录,所有修改写入这里)。workdir=/opt/overlay-partition/work:临时工作目录(必须与 upperdir 在同一分区,不可删除)。/opt/aarch64-merged:合并后的目录(chroot 目标)。
4. 准备 chroot 环境(基于 merged 目录)
merged 目录是叠加后的根目录,需补充 QEMU 模拟器、虚拟文件系统等,才能正常 chroot:
(1)复制 QEMU 静态文件到 merged 目录
chroot 后无法访问宿主 /usr/bin,需将 qemu-aarch64-static 复制到 merged 的对应目录:
1 | sudo cp /usr/bin/qemu-aarch64-static /opt/aarch64-merged/usr/bin/ |
(2)挂载必要的虚拟文件系统(到 merged 目录)
虚拟文件系统需挂载到 merged 下,chroot 后才能访问 proc/sys/dev:
1 | # 挂载 proc(进程文件系统) |
(3)配置 DNS(可选,需 chroot 内联网)
复制宿主 DNS 配置到 merged 目录,确保 chroot 内可访问网络:
1 | sudo cp /etc/resolv.conf /opt/aarch64-merged/etc/resolv.conf |
5. chroot 进入 AArch64 + overlay 环境
1 | # 切换到 merged 目录(叠加后的 AArch64 根目录) |
验证效果:
1 | # 1. 确认架构为 AArch64(输出 aarch64) |
6. 退出与清理(关键:按顺序卸载)
必须按「虚拟文件系统 → overlay → 分区」的顺序卸载,避免数据损坏:
1 | # 1. 确保已退出 chroot(若未退出,先执行 exit) |
四、关键注意事项
- lowerdir 只读保护:overlayfs 默认会将 lowerdir 视为只读(即使未显式设置
ro),但建议通过chmod -R 555 $ORIG_ROOTFS进一步锁定,避免误操作修改原始 rootfs。 - 分区兼容性:overlay 分区需为 Linux 支持的文件系统(ext4、xfs、btrfs 等),不支持 NTFS、FAT32(可能导致权限错误)。
- 目录权限:
upperdir、workdir、merged目录的所有者必须为root:root(sudo chown -R root:root /opt/overlay-partition),否则 chroot 会报权限错误。 - 修改重置:若需清空所有修改(恢复原始环境),直接删除 upperdir 内的文件即可(
sudo rm -rf /opt/overlay-partition/upper/*),无需重新构建 rootfs。 - 虚拟文件系统挂载顺序:必须先挂载 overlayfs,再挂载
proc/sys/dev(挂载到 merged 目录下),否则 chroot 内无法访问这些系统资源。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 凌烟小站!