ext4 - 为什么要在 umountfs 脚本中卸载之前将文件系统重新挂载为只读?
问题描述
在带有 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 吗?
解决方案
通常,您无法卸载根文件系统,因为至少有一个当前正在运行的进程正在使用该文件系统 - init 或 systemd。以只读方式重新挂载根文件系统会刷新所有脏数据并防止其再次被修改,从而使文件系统保持一致。通常,此时内核会在没有实际卸载根文件系统的情况下重新启动。
推荐阅读
- c++ - 如何在 C++ 中刷新打开的 .txt 文件?
- aws-lambda - TypeError [ERR_INVALID_ARG_TYPE]:“key”参数必须是 string、TypedArray 或 DataView 类型之一
- python - Python 错误:全局声明变量未在全局范围内声明
- python - ModuleNotFoundError: No module named 'gi' - 在 Heroku 中部署时
- css - 可以用css创建这个形状吗?
- rpy2 - rpy2:如何从 Python 回调函数将向量返回到 R?
- python - 如何遍历文件并保存使用 OpenCV 应用的转换?
- r - 在 R 中使用包 AICcmodavg 中的 aictab() 时出现意外错误
- python - pandas 使用 to 和 from csv 保存多索引多列
- jquery - 单击按钮时如何重新加载数据表?