将繁忙的磁盘重新挂载为只读模式

将繁忙的磁盘重新挂载为只读模式

我想强制一个磁盘分区进入只读模式并保持只读状态超过30分钟。

我尝试过的:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    问题:这会导致设备繁忙错误,因为某些进程正在使用该分区。我不想终止使用磁盘的进程。我想模拟当进程仍在使用磁盘时磁盘突然变为只读。

  2. 使用神奇的 sysrq 键,如下所示

    echo u > /proc/sysrq-trigger
    

    问题:这将使所有磁盘分区只读(尽管设备正忙)。但 20-30 分钟后机器会自行重新启动。执行此命令后,某些机器会立即重新启动。尚不确定是什么原因导致此重启。我不希望机器自行重新启动,并且需要将磁盘保持在只读模式 30 多分钟。

问题:有没有更好的方法可以强制单个磁盘分区为只读并维持该状态半小时,然后将其恢复到读写模式,而不会导致在此过程中重新启动?

答案1

如果进程上有一个打开用于写入的文件,或者它包含一个已删除但仍打开的文件,则通常无法将文件系统重新挂载为只读。同样,您无法卸载打开任何文件的文件系统(或类似的文件用途,例如当前目录所在的进程、正在运行的可执行文件等)。

您可以使用umount -l释放挂载点并阻止打开更多文件,但保持文件系统挂载并保持已打开文件的进程正常运行。

我想不出一种通用的方法来强制文件系统在不应该的情况下以只读方式重新安装。但是,如果文件系统由块设备支持,您可以使块设备只读,例如

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-trigger是强制重新挂载为只读的一种相当极端的方法,因为它会影响所有文件系统。这是在重新启动之前使文件系统保持干净状态的最后一搏方法。

将文件系统重新挂载为只读不会导致重新启动。导致重新启动的原因与将分区重新安装为只读没有直接关系。也许它完全不相关,或者这可能会触发应用程序中的错误,导致应用程序旋转并使处理器过热,并且您的处理器有缺陷或超频并最终重新启动。您需要找出重新启动的原因。

答案2

使用mount的强制选项(假设您的安装有一个;GNUmount没有,但 BSD 和 macOS 有):

mount -f -o remount,ro /mount/point

当然,您的里程可能会根据实际文件系统、内核版本和情况而有所不同,所以这只是尝试其他较低级别技巧的较高级别选项,如 @Gilles 提到的。

相关内容