"Mount: / is busy" cuando intento montar como solo lectura para poder ejecutar zerofree

36

Estoy tratando de ejecutar zerofreeUbuntu 11.04 para poder compactar la imagen de VirtualBox vdi usando:

VBoxManage modifyhd Ubuntu.vdi --compact

Para ejecutar zerofreela imagen del disco se ha montado como de solo lectura. Estoy siguiendo estas instrucciones que dicen usar esto para volver a montar como solo lectura desde el modo de recuperación (solicitud de caída al shell raíz):

mount -n -o remount,ro -t ext2 /dev/sda1 /

Pero cuando hago esto me sale el error:

mount: / is busy

¿Alguna idea sobre cómo hacer esto?

Seguimiento : Seguir la respuesta de Jari y esta publicación ejecutando estos comandos resuelve el problema.

service rsyslog stop
service network-manager stop
killall dhclient
Cangrejo ondulado
fuente
44
La página de manual de zerofree sugiere ejecutar telinit 1y eso resolvió el problema para mí.
Alex Ryan

Respuestas:

23

Algunos procesos mantienen los archivos abiertos para escritura. Estos podrían ser, por ejemplo, programas que escriben registros, como rsyslogdherramientas de red, como dhcliento algo más. Apagarlos uno por uno e intentar el montaje podría funcionar.

Puede encontrar procesos que usan ciertos archivos usando el programa fuser. Por ejemplo, fuser -v -m /devolverá una lista de procesos. Sin embargo, no estoy seguro de si es uno de estos lo que mantiene ocupado el sistema de archivos.

Jari Laamanen
fuente
2
Los procesos que tienen archivos abiertos en modo de escritura tendrán capital Fen los indicadores de acceso en la fusersalida.
Jan Hudec
21

Solo puede volver a montar el sistema de archivos de solo lectura si no hay ningún proceso que tenga un archivo abierto para escritura. Ejecute lsof /para ver qué procesos tienen archivos abiertos en el sistema de archivos raíz. Los archivos abiertos para escritura se indicarán en la FDcolumna. Puedes filtrarlos con

lsof / | awk '$4 ~ /[0-9].*w/'

Para filtrar las ID de proceso automáticamente, analice la salida de lsof -F pa:

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'
Gilles 'SO- deja de ser malvado'
fuente
1
Probado con esta solución, todavía ocupado, podría ser porque algunos recursos no pueden mostrarse de esta manera. Después de detener algunos servicios en ejecución, puede volver a montar el fs como solo lectura.
Sam Liao
Cerré todos los procesos que tenían un archivo abierto para lectura, escritura o ambos ( u) y todavía dice ocupado.
Hubro
12

Mejorando la respuesta de Peter:

No pude matar los procesos que usan mi punto de montaje. Entonces, hice esto:

  • Editar /etc/fstaba comienza en solo lectura en el próximo arranque. Ex:/dev/sda1 / ext2 ro 0 1
  • Reinicie y abra un shell (Host Key + F2, por ejemplo)
  • Ejecute zerofree

Para "recuperar" su sistema:

  • Montar con opción de lectura-escritura: $ mount -o remount,rw /dev/sda1
  • Edite /etc/fstabnuevamente, restaurando su valor original

Extra: si es necesario, abra el modo de recuperación en cualquier paso:

  • Reiniciar
  • Mantenga presionada la tecla shift mientras VM se está cargando
  • Opciones avanzadas> Opción de kernel con modo de recuperación> Solicitud de Shell to Root
Topera
fuente
2
Captain Obvious quiere agregar: Asegúrese de instalar zerofree ANTES de reiniciar en modo ro
Xosofox
usando "Drop to Root Shell Prompt" y zerofree: sistema de archivos montado rw. Pero no tuve ningún problema en otra máquina virtual
Pawel Cioch
Esto solo funcionó para mí cuando la /dev/sda1 / ext2 ro 0 1entrada estaba en la parte superior de la lista. Cuando lo puse por primera vez como la última entrada, todavía tenía el error de punto de montaje ocupado.
Afilina
6

A veces hay tantos procesos que mantienen el montaje ocupado, que podría ser más fácil reiniciar simplemente con el montaje de solo lectura.

Cambie la entrada para el sistema de archivos raíz en /etc/fstab, por ejemplo:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

se convierte en:

/dev/sda1 / ext2 noatime,ro 0 1

Al reiniciar, el sistema de archivos se montará de solo lectura, por lo que puede ejecutarlo zerofree.

Cuando haya terminado, vuelva a montar el sistema de archivos de lectura / escritura nuevamente ( mount -o remount,rw /) y deshaga los cambios en /etc/fstab.

Inspirado en https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

Peter Nowee
fuente
¡Excelente! FYI, usé esto /dev/sda1 / ext2 ro 0 1y pude arrancar en modo de solo lectura.
Topera
5

Si aún no puede desmontar o volver a montar su dispositivo después de detener todos los servicios y procesos con archivos abiertos, entonces puede haber un archivo de intercambio o una partición de intercambio que mantenga su dispositivo ocupado. Esto no aparecerá con fusero lsof. Desactiva el intercambio con:

sudo swapoff -a

Puede verificar de antemano y mostrar un resumen de cualquier partición de intercambio o archivos de intercambio con:

swapon -s

o:

cat /proc/swaps

Como alternativa al uso del comando sudo swapoff -a, también puede desactivar el intercambio deteniendo un servicio o una unidad systemd . Por ejemplo:

sudo systemctl stop dphys-swapfile

o:

sudo systemctl stop var-swap.swap

En mi caso, fue necesario desactivar el intercambio, además de detener cualquier servicio y proceso con archivos abiertos para escritura, de modo que pudiera volver a montar mi partición raíz como de solo lectura para ejecutarla fscken mi partición raíz sin reiniciar. Esto era necesario en un Raspberry Pi con Raspbian Jessie.

Simon Gould
fuente
4

Si usa systemd, las escrituras en disco se detienen deteniendo systemd-journald.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /
Artur Pędziwilk
fuente
1
Para mí, ambas unidades se reinician de inmediato.
rld.
funcionó para mí en "Opciones avanzadas> Opción de kernel con modo de recuperación> Preguntar al intérprete de comandos de la raíz"
Pawel Cioch
3

Ok, hay lo que hice

Primero, mi objetivo era reducir mi /(ROOT ) partición para agregar otra en mi disco.

  • Desde la sesión en ejecución una vez que todo se limpió y retrocedió:

    init 1
    

    Mi escritorio desaparece y ahora estoy en la consola de Linux ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Ahora, intentando montar /en modo de solo lectura :

    mount -o remount,ro /
    mount: / is busy
    
  • Ok, desde ahora estoy dentro teóricamente para un solo usuario , ¡pero ps axmuestro muchos otros procesos!

    Matarlos a todos no es realmente posible, o peligroso ... ( kill 1está prohibido ... No tengo tiempo para jugar psdoom :-)

    Lo único que puedo hacer es System Request, para esto, conozco dos formas: (verDocumentation/sysrq.txt archivo en los documentos del kernel):

    1. primero usando magic SysRq key trampa del núcleo del teclado:

      • sujetar AltGr , luego mantenga presionado,
      • golpear PrtScn solo una vez, pero no sueltes AltGr,
      • golpea ssolo una vez, esto enviaráEmergency sync solicitud al núcleo y
      • golpe u, esto enviaráUmount all solicitud, volverá a montar todos los sistemas de archivos montados de solo lectura,
      • luego suelte AltGr
    2. O por línea de comando:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Entonces ahora, podría

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...

F. Hauri
fuente
Nota: En fin, si mi fsckoperación se realizó con éxito, he arrancado un Live USB para poder ejecutar resize2fs... Esta característica aún no está implementada ...
F. Hauri
Mi fsckno sabe -f; ¿Qué haría eso, cero bloques sin referencia?
ᴠɪɴᴄᴇɴᴛ
1
@ ᴠɪɴᴄᴇɴᴛ: Es ext2el fsckinterruptor: forzar -f la comprobación incluso si el sistema de archivos parece estar limpio.
F. Hauri
1

Para cualquier otra persona que solo esté buscando una solución rápida para pegar en su terminal ...

(Antes de seguir los comandos a continuación, asegúrese de haber completado los otros pasos como telinit 1).

Encontré esto :

fuser -mv /dev/sda1 > /tmp/sda1.pids
kill `cat /tmp/sda1.pids`

Los comandos pueden matar su sesión, pero después de que regrese, su partición está lista para ser montada de nuevo.

DustWolf
fuente
1

Adjunte el archivo vdi como volumen adicional y no del sistema a otro VirtualBox. Allí puede (re) montarlo según sea necesario y realizar el zerofree.

Digamos que desea compactar el disco VDI de VM1 (Virtual Machine 1). Entonces necesitas una segunda VM2 . Es decir, :

  • Asegúrese de que ni VM1 ni VM2 se estén ejecutando;
  • Desde VirtualBox Manager:

    • Seleccione VM2,
    • "Configuración" -> "Almacenamiento" -> "Añadir disco duro": "Selecciónelo como disco adicional",

    • seleccione el archivo vdi de VM1, que desea compactar. Sugerencia: asegúrese de que el disco duro recién agregado a VM2 quede segundo en orden de arranque después del disco original de VM2.

    • inicie VM2: ahora puede (re) montar el volumen de VM1 como disco adicional para VM2, porque ningún proceso lo está utilizando en VM2. Sugerencia: Primero, abra el volumen con el buscador de Linux, que automáticamente monta el volumen. Luego, use mount -lpara ver cuál es el _Device_en el comando sudo mount -o remount,ro _Device_. En mi caso esto fue / dev / sdb1 . Entonces el comando fue (1) sudo mount -o ro,remount /dev/sdb1y luego (2) sudo zerofree /dev/sdb1.

En lugar de VM2, uno debería poder arrancar desde un disco de instalación como una imagen .iso y lograr lo mismo, PERO no lo he probado.

León
fuente
0

Supongo que intentas ejecutar el mount comando en la VM. De todos modos, probablemente tenga una partición raíz diferente a la del autor de la publicación del foro.

Tratar:

mount -o ro,remount /

Lo cual no depende de la opción fs o mount. Si esto no funciona, también puede intentar determinar su raíz fs con grep " / " /proc/mountso cat /proc/cmdline. Si su sistema de archivos raíz es, por ejemplo, / dev / mapper / system-rootfs, puede usar:

mount -o ro,remount /dev/mapper/system-rootfs /
Ulrich Dangel
fuente
0

Tuve este problema que me impidió poner mi máquina en modo de solo lectura. Resolver el problema me llevó más tiempo de lo que me gustaría admitir ... Creo que mi problema fue que dejé Apache-Zeppelin ejecutándose y me olvidé de eso. Asegúrese de no hacer lo mismo con otro servicio de alojamiento. Para resolver el problema, solía fuser -kill /terminar todos los procesos que podrían estar causando el problema y me permitió volver al modo ro.

ob1
fuente
0

La solución para mí fue reiniciar el sistema operativo y elegir "modo de recuperación" en el menú de arranque de GRUB. Desde el "modo de recuperación", hay menos procesos en ejecución, y el montaje de solo lectura funciona bien.

Si el sistema tiene un archivo de intercambio en el sistema de archivos raíz (en lugar de una partición de intercambio), también es necesario desactivar temporalmente el archivo de intercambio con swapoff -a.

Boann
fuente