在带有ext4的嵌入式Linux发行版上,我具有以下umountfs脚本:
#!/bin/sh
### BEGIN INIT INFO
# Provides: umountfs
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop: 0 6
# Short-Description: Turn off swap and unmount all local file systems.
# Description:
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
echo "Deactivating swap..."
[ -x /sbin/swapoff ] && swapoff -a
# We leave /proc mounted.
echo "Unmounting local filesystems..."
grep -q /mnt/ram /proc/mounts && mount -o remount,ro /mnt/ram
mount -o remount,ro /
umount -f -a -r > /dev/null 2>&1
: exit 0
我对以下几行有疑问:
mount -o remount,ro /
umount -f -a -r > /dev/null 2>&1
问题是:为什么我们需要在挂载之前将rootfs重新挂载为只读?
我看到了一些解释,好像我们需要将rootfs重新挂载到ro
上,以便将所有未决的写请求强制刷新到磁盘上。但这不令我满意,因为刷新挂起的写请求是umount命令的一部分。
问题是:有人理解,为什么我们需要在卸载之前先将rootfs挂载到ro
吗?
答案 0 :(得分:0)
通常,您不能卸载根文件系统,因为至少有一个正在运行的正在使用文件系统的进程-init或systemd。以只读方式重新安装根文件系统会刷新所有脏数据并防止再次对其进行修改,从而使文件系统保持一致。通常,在那时,内核会重启,而实际上并未卸载根文件系统。