Зачем перемонтировать файловую систему только для чтения перед размонтированием в сценарии umountfs?

Во встроенном дистрибутиве Linux с ext4 у меня есть следующий скрипт 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 перед размонтированием?

1 ответ

Обычно вы не можете размонтировать корневую файловую систему, потому что хотя бы один запущенный в данный момент процесс использует файловую систему - init или systemd. Повторная установка корневой файловой системы только для чтения сбрасывает все грязные данные и предотвращает их повторное изменение, чтобы обеспечить согласованность файловой системы. Обычно в этот момент ядро ​​перезагружается, фактически не отключая корневую файловую систему.

Другие вопросы по тегам