0

在带有 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

问题是:为什么我们需要在 umount 之前将 rootfs 重新挂载为只读?

我看到了一些解释,好像我们需要重新挂载 rootfs 以ro强制将所有挂起的写入请求刷新到磁盘上。但这并不能让我满意,因为挂起的写请求的闪烁是 umount 命令的一部分。

所以问题是:有人明白,为什么我们需要ro在卸载之前重新挂载 rootfs 吗?

4

1 回答 1

0

通常,您无法卸载根文件系统,因为至少有一个当前正在运行的进程正在使用该文件系统 - init 或 systemd。以只读方式重新挂载根文件系统会刷新所有脏数据并防止其再次被修改,从而使文件系统保持一致。通常,此时内核会在没有实际卸载根文件系统的情况下重新启动。

于 2019-02-06T21:38:07.967 回答