如何正确卸载用作根文件系统的 AUFS 文件系统

如何正确卸载用作根文件系统的 AUFS 文件系统

我有一个嵌入式系统,它有一个(始终)只读的根文件系统,上面覆盖着一个可写的文件系统。但是,我在系统关闭时卸载或重新安装它作为只读文件系统时遇到了问题(这会导致在下次启动时检查时出现孤立 i 节点等问题)。

# mount -o remount,ro /initrd/root-overlay/
mount: mounting /dev/mmcblk0p7 on /initrd/root-overlay failed: Device or resource busy

系统启动时会使用 initrd 映像执行文件系统挂载,然后继续启动。我们在 initrd 的 linuxrc 文件中执行此操作,因为有时我们想选择另一个分区作为根文件系统。

以下是设置根分区及其覆盖的 linuxrc 脚本:

echo "Mounting /proc..."
mount -t proc none /proc

echo "Mounting /dev/mmcblk0p5 on /ro-root..."
mkdir -p /ro-root
mount -o ro -t ext4 /dev/mmcblk0p5 /ro-root

echo "Mounting /dev/mmcblk0p7 on /root-overlay..."
mkdir -p /root-overlay
mount -o rw -t ext4 /dev/mmcblk0p7 /root-overlay

echo "Creating union of /ro-root and /root-overlay on /realroot..."
mkdir -p /real-root
mount -t aufs -o br:/root-overlay=rw:/ro-root=ro none /real-root

echo "Pivoting to /real-root... initrd will be at /initrd."
cd /real-root
mkdir -p initrd
pivot_root . initrd

echo "Unmounting /proc..."
umount /initrd/proc
echo "Unmounting /dev..."
umount /initrd/dev

echo "Executing real init..."
exec /sbin/init

我猜测可能存在可以与 mount 命令(通过选项传递-o)一起使用的特殊语法来实现这一点,但我不知道那是什么。

如果有必要,我愿意接受其他方式来执行文件系统的初始挂载。

答案1

尝试一下这个。它会卸载所有已挂载的 aufs:

umount -l $(grep 'aufs' /proc/mounts | awk '{print$2}' | sort -r)

相关内容