将忙碌的磁盘重新安装为只读模式


19

我想强制磁盘分区为只读模式,并将其保持只读状态超过30分钟。

我尝试过的

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

    问题:由于某些进程正在使用该分区,这给设备带来了繁忙错误。我不想杀死使用磁盘的进程。我想模拟磁盘在进程仍在使用时突然变为只读状态。

  2. 使用了魔术sysrq密钥,如下所示

    echo u > /proc/sysrq-trigger
    

    问题:这将使所有磁盘分区为只读(尽管设备正忙)。但是20到30分钟后,机器将自行重启。一旦执行此命令,某些计算机将立即重新引导。不知道是什么原因导致此重新启动。我不希望计算机自行重启,需要将磁盘保持在只读模式30分钟以上。

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


3
你考虑过了fsfreeze -f吗?它并不完全以只读方式重新挂载文件系统。相反,它将阻止所有作者,直到fsfreeze -u。但这是相似的……
Celada 2015年

谢谢西拉达!这是一个好主意!..现在我的机器上没有fsfreeze,但是我会尝试的。
AdithyaCS 2015年

我尝试过fsfreeze -f,我的情况更多是“冻结”。也许是因为写入被阻止而不是被拒绝?
Piotr Findeisen

fsfreeze使我的系统无法访问,并且我无法输入unfreeze命令,从而无法切换回终端,而不得不重新启动计算机。所以要当心!:)
亚历克斯(Alex)

Answers:


16

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

您可以umount -l用来释放挂载点并阻止打开其他文件,但是可以使文件系统保持挂载状态,并使已经打开文件的进程保持正常运行。

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

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

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

将文件系统重新安装为只读不会导致重新引导。导致重新启动的原因与将分区重新安装为只读没有直接关系。可能是完全无关的,或者这可能会触发应用程序中的错误,导致应用程序旋转并导致处理器过热,并且处理器出现故障或超频并最终重新启动。您需要跟踪重新启动的原因。


2
不幸的是,这不是便携式解决方案。在树莓上,我得到:运行时“权限被拒绝”echo 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen

.. echo u > /proc/sysrq-trigger不仅极端,而且如果您想重新安装RW,也会迫使您重新启动。当我尝试此操作,然后重新安装(带有mount..)时dmesg说:“由于未处理的孤岛索引节点列表,无法重新安装RDWR。请重新安装/重新安装”
Piotr Findeisen

@PiotrFindeisen您是否以root用户身份运行过它?
hanshenrik

@hanshenrik我猜是这样
Piotr

4

使用mount的force选项(假设您的挂载有一个; GNU mount没有,但是BSD和macOS却有):

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

当然,根据实际的文件系统,内核版本和情况,您的工作量可能会有所不同,因此,这只是尝试其他较低级别技巧(例如,@ Gilles提及)的较高级别的选项。


1
@psusi号 它允许我重新挂载我的ext4 /分区。
Piotr Findeisen

2
原来我想到了umount -f,但我只是尝试将其重新挂载到ro上,并且-f使命令不返回错误,但实际上文件系统不是只读的。
psusi

1
@psusi,不足为奇。我不希望任何一种方法都能在所有情况下工作。这对我可重复地起作用(就此而言,在raspberry上是ext4根分区)-我的意思是重新安装到RO,而不是忽略错误-所以我想在某些(但不是全部)其他情况下会起作用。抱歉,这不包括您的。
Piotr Findeisen

13
曼芒-f--fake。Quote:“导致除了实际的系统调用以外的所有工作;如果不明显,则这将“假装”装入文件系统。该选项与-v标志一起使用,可用于确定mount命令试图执行的操作。也可以使用-n选项为先前安装的设备添加条目。-f选项检查/ etc / mtab中的现有记录,并在记录已经存在时失败(使用常规的非伪装,该检查由内核完成)。”
Will Manley

3
BSD,因此,macOS mounts -f 的确表示“强制”。
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.