Vuelva a montar un disco ocupado en modo de solo lectura


19

Quiero forzar una partición de disco al modo de solo lectura y mantenerla solo de lectura durante más de 30 minutos.

Lo que he intentado:

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

    Problema : Esto dio un error de dispositivo ocupado ya que algunos procesos estaban usando la partición. No quiero matar los procesos usando el disco. Quiero simular que el disco de repente se vuelve de solo lectura cuando los procesos todavía lo están usando.

  2. Clave mágica sysrq usada, como a continuación

    echo u > /proc/sysrq-trigger
    

    Problema : Esto hará que todas las particiones del disco sean de solo lectura (aunque el dispositivo esté ocupado). Pero después de 20-30 minutos, la máquina se reinicia sola. Algunas máquinas se reinician inmediatamente una vez que se ejecuta este comando. No estoy seguro de qué está causando este reinicio todavía. No quiero que la máquina se reinicie y necesito mantener el disco en modo de solo lectura durante más de 30 minutos.

Pregunta : ¿Hay alguna forma mejor de forzar una sola partición de disco a solo lectura y mantenerla en ese estado durante media hora y volverla al modo de lectura-escritura sin provocar ningún reinicio en el proceso?


3
¿Lo has considerado fsfreeze -f? No vuelve a montar exactamente el sistema de archivos de solo lectura. En cambio, bloquea a todos los escritores hasta fsfreeze -u. Pero es similar ...
Celada

Gracias celada! ¡es una buena idea! .. En este momento no tengo fsfreeze trabajando en mi máquina, pero lo intentaré.
AdithyaCS

Lo intenté fsfreeze -fy en mi caso fue más "os freeze". ¿Quizás porque las escrituras fueron bloqueadas en lugar de ser rechazadas?
Piotr Findeisen

fsfreezevolví mi sistema inaccesible y no pude ingresar el comando de descongelación al no poder volver a un terminal y tuve que reiniciar mi máquina. Así que ten cuidado ! :)
Alex

Respuestas:


16

Normalmente no puede volver a montar un sistema de archivos como de solo lectura si los procesos tienen un archivo abierto para escritura, o si contiene un archivo que se eliminó pero aún está abierto. Del mismo modo, no puede desmontar un sistema de archivos que tenga abierto un archivo (o usos similares de archivos, como un proceso que tenga su directorio actual allí, un ejecutable en ejecución, etc.).

Puede usar umount -lpara liberar el punto de montaje y evitar la apertura de más archivos, pero mantenga el sistema de archivos montado y mantenga los procesos que ya tienen archivos abiertos ejecutándose normalmente.

No puedo pensar en una forma genérica de forzar que un sistema de archivos se vuelva a montar de solo lectura cuando no debería serlo. Sin embargo, si el sistema de archivos está respaldado por un dispositivo de bloque, puede hacer que el dispositivo de bloque sea de solo lectura , p. Ej.

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

echo u > /proc/sysrq-triggeres una forma bastante extrema de forzar el remontaje como solo lectura, porque afecta a todos los sistemas de archivos. Se entiende como un último método para dejar el sistema de archivos en un estado limpio justo antes de reiniciar.

Volver a montar un sistema de archivos como solo lectura no provoca un reinicio. Lo que sea que esté causando el reinicio no está directamente relacionado con volver a montar la partición como solo lectura. Tal vez no esté completamente relacionado, o tal vez esto desencadena un error en la aplicación que hace que gire y haga que el procesador se sobrecaliente y su procesador esté defectuoso o overclockeado y finalmente se reinicie. Debe localizar la causa del reinicio.


2
Desafortunadamente, esta no es una solución portátil. En frambuesa obtengo: "Permiso denegado" cuando corroecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen

.. y echo u > /proc/sysrq-triggerno solo es extremo, sino que también puede obligarlo a reiniciar si desea volver a montar RW. Cuando intenté esto y luego volví a montar (con mount..) dmesgdije "No se pudo volver a montar RDWR debido a la lista de inodos huérfanos no procesados. Por favor, desmonte /
vuelva a

@PiotrFindeisen, ¿lo ejecutaste como root?
hanshenrik

@hanshenrik, supongo que sí
Piotr Findeisen

4

Use mountla opción force (suponiendo que su montaje tenga uno; GNU mountno, pero BSD y macOS, por ejemplo):

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

Por supuesto, su kilometraje puede variar según el sistema de archivos real, la versión del kernel y la situación , por lo que esta es solo una opción de nivel superior que prueba otros trucos de nivel inferior como, por ejemplo, @Gilles.


1
@psusi no. Me permitió volver a montar mi /partición ext4 .
Piotr Findeisen

2
Resulta que estaba pensando umount -f, pero solo intenté volver a montar en ro, y mientras que -f hace que el comando no devuelva un error, el sistema de archivos es, de hecho, no solo de lectura.
psusi

1
@psusi, no es de extrañar. No esperaría que un enfoque único funcione en todos los casos. Esto funcionó para mí repetidamente (partición raíz ext4 en frambuesa para el caso), y me refiero a volver a montar en RO, sin ignorar los errores, por lo que supongo que funcionará para algunos, pero no todos, otros casos. Lo siento, esto no incluyó el tuyo.
Piotr Findeisen

13
El montaje del hombre dice que -fes --fake. Cita: "Hace que se haga todo excepto la llamada real del sistema; si no es obvio, esto '' falsifica '' el montaje del sistema de archivos. Esta opción es útil junto con el indicador -v para determinar qué está intentando el comando de montaje do. También se puede usar para agregar entradas para dispositivos que se montaron anteriormente con la opción -n. La opción -f verifica el registro existente en / etc / mtab y falla cuando el registro ya existe (con el montaje normal no falso, esta comprobación la realiza el kernel) ".
Will Manley

3
BSD y, por lo tanto, MacOS montajes -f en efecto, significa 'fuerza'.
terdon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.