"Mount: / is busy" quando provo a montare in sola lettura in modo da poter eseguire zerofree


36

Sto cercando di eseguire zerofreeUbuntu 11.04 in modo da poter compattare l'immagine vdi VirtualBox usando:

VBoxManage modifyhd Ubuntu.vdi --compact

Per eseguire zerofreel'immagine del disco è stata montata in sola lettura. Sto seguendo queste istruzioni che dicono di usare questo per rimontare in sola lettura dalla modalità di recupero (Drop to root shell prompt):

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

Ma quando lo faccio ottengo l'errore:

mount: / is busy

Qualche idea su come fare questo?

Follow-up : la risposta di Jari e questo post eseguendo questi comandi risolvono il problema.

service rsyslog stop
service network-manager stop
killall dhclient

4
La pagina man di zerofree suggerisce di correre telinit 1e questo ha risolto il problema per me.
Alex Ryan,

Risposte:


23

Alcuni processi mantengono i file aperti per la scrittura. Questi potrebbero essere, ad esempio, programmi che scrivono registri, come rsyslogd, strumenti di rete, come dhcliento qualcos'altro. Spegnerli uno per uno e provare il rimontaggio potrebbe funzionare.

Puoi trovare i processi che usano determinati file usando il programma fuser. Ad esempio, fuser -v -m /restituirà un elenco di processi. Tuttavia, non sono sicuro che sia uno di questi a tenere occupato il file system.


2
I processi che hanno file aperti in modalità di scrittura avranno capitale Fnei flag di accesso fusernell'output.
Jan Hudec,

21

È possibile rimontare il file system in sola lettura se non è presente alcun processo in cui un file sia aperto per la scrittura. Esegui lsof /per vedere quali processi hanno file aperti sul filesystem di root. I file aperti per la scrittura saranno indicati nella FDcolonna. Puoi filtrarli con

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

Per filtrare automaticamente gli ID di processo, analizzare l'output di lsof -F pa:

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'

1
Provato con questa soluzione, ancora occupato, potrebbe essere perché alcune risorse non possono essere mostrate in questo modo. Dopo aver arrestato alcuni servizi in esecuzione, è possibile rimontare gli fs in sola lettura.
Sam Liao,

Ho chiuso tutti i processi che avevano un file aperto per la lettura, la scrittura o entrambi ( u) e dice ancora occupato.
Hubro

12

Migliorare la risposta di Peter:

Non ho potuto uccidere i processi che usano il mio mount point. Quindi, ho fatto questo:

  • Modifica /etc/fstabin inizia in sola lettura al prossimo avvio. Ex:/dev/sda1 / ext2 ro 0 1
  • Riavvia e apri una shell (chiave host + F2, ad esempio)
  • Esegui zerofree

Per "ripristinare" il tuo sistema:

  • Montare con l'opzione lettura-scrittura: $ mount -o remount,rw /dev/sda1
  • Modifica di /etc/fstabnuovo, ripristinando il valore originale

Extra: se necessario, aprire la modalità di ripristino in qualsiasi passaggio:

  • Reboot
  • Tenere premuto MAIUSC durante il caricamento della VM
  • Opzioni avanzate> Opzione kernel con modalità di ripristino> Prompt della shell principale

2
Il Capitano Ovvio vuole aggiungere: Assicurati di installare zerofree PRIMA di riavviare in modalità ro
Xosofox

usando "Drop to Root Shell Prompt" e zerofree: file system montato rw. Ma non ho avuto problemi con altre VM
Pawel Cioch,

Questo ha funzionato solo per me quando la /dev/sda1 / ext2 ro 0 1voce era in cima alla lista. Quando l'ho messo per la prima volta come ultima voce, avevo ancora l'errore di mount point occupato.
afilina,

6

A volte ci sono così tanti processi che mantengono occupato il mount, che potrebbe essere più semplice riavviare semplicemente con il mount.

Modificare la voce per il filesystem di root in /etc/fstab, ad esempio:

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

diventa:

/dev/sda1 / ext2 noatime,ro 0 1

Al riavvio, il filesystem verrà montato in sola lettura, quindi puoi eseguirlo zerofree.

Al termine, rimontare nuovamente il file system read / write ( mount -o remount,rw /) e annullare le modifiche a /etc/fstab.

Ispirato da https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root


Grande! Cordiali saluti, ho usato solo questo /dev/sda1 / ext2 ro 0 1e ho potuto avviare in modalità di sola lettura.
Topera,

5

Se non è ancora possibile smontare o rimontare il dispositivo dopo aver arrestato tutti i servizi e i processi con file aperti, è possibile che vi sia un file di scambio o una partizione di scambio che mantenga occupato il dispositivo. Questo non verrà visualizzato con fusero lsof. Disattiva lo scambio con:

sudo swapoff -a

Puoi verificare in anticipo e mostrare un riepilogo di qualsiasi partizione o file di scambio con:

swapon -s

o:

cat /proc/swaps

In alternativa al utilizzando il comando sudo swapoff -a, si potrebbe anche essere in grado di disabilitare lo swap da arresto di un servizio o di systemd unità. Per esempio:

sudo systemctl stop dphys-swapfile

o:

sudo systemctl stop var-swap.swap

Nel mio caso, era necessario disattivare lo scambio, oltre a interrompere qualsiasi servizio e processo con file aperti per la scrittura, in modo che potessi rimontare la mia partizione di root come sola lettura per poter eseguire fscksulla mia partizione di root senza riavviare. Ciò era necessario su un Raspberry Pi con Raspbian Jessie.


4

Se si utilizza systemd, le scritture su disco vengono interrotte arrestando systemd-journald.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /

1
Per me entrambe le unità si riavviano immediatamente.
rld.

ha funzionato per me in "Opzioni avanzate> Opzione kernel con modalità di ripristino> Prompt di shell root to drop"
Pawel Cioch

3

Ok, c'è quello che ho fatto

Innanzitutto, il mio obiettivo era ridurre la mia /( ROOT) partizione per aggiungerne un'altra sul mio disco.

  • Dalla sessione in esecuzione una volta che tutto è stato pulito e sottoposto a backup:

    init 1
    

    Il mio desktop scompare e ora sono su console Linux ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Ora, provando a montare /in modalità di sola lettura:

    mount -o remount,ro /
    mount: / is busy
    
  • Ok, da ora, sono in teoria in modalità utente singolo , ma ps axmostra molti altri processi !!

    Ucciderli tutti non è possibile o pericoloso ... ( kill 1è proibito ... Non ho tempo per giocare a psdoom :-)

    L'unica cosa che posso fare è una System Request, per questo, conosco due modi: (vedi Documentation/sysrq.txtfile nei documenti del kernel):

    1. usando prima la magic SysRq keytrap del kernel della tastiera:

      • tenere premuto AltGr, quindi mantenere quindi premuto,
      • premi PrtScnuna volta sola, ma non rilasciare AltGr,
      • colpito ssolo una volta, questo invierà la Emergency syncrichiesta al kernel e
      • hit u, questo invierà la Umount allrichiesta, rimonterà tutti i filesystem montati in sola lettura,
      • quindi rilasciare AltGr
    2. O dalla riga di comando:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Allora ora, potrei

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...


Nota: se tutto è fsckandato a buon fine, ho avviato un Live USB per poterlo eseguire resize2fs... Questa funzione non è già implementata ...
F. Hauri,

Il mio fscknon lo sa -f; cosa farebbe, zero blocchi senza riferimenti?
ᴠɪɴᴄᴇɴᴛ

1
@ ᴠɪɴᴄᴇɴᴛ: ext2è l' fsckinterruttore: -f forza il controllo anche se il file system sembra pulito.
F. Hauri,

1

Per chiunque stia solo cercando una soluzione rapida da incollare nel tuo terminale ...

(Prima di seguire i comandi seguenti, assicurarsi di aver completato gli altri passaggi come telinit 1.)

Trovato questo :

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

I comandi possono terminare la sessione, ma dopo il ritorno, la partizione è pronta per essere rimontata.


1

Allegare il file vdi come volume aggiuntivo e non di sistema a un altro VirtualBox. Lì puoi (ri) montarlo secondo necessità ed eseguire zerofree.

Diciamo che vuoi compattare il disco VDI di VM1 (Virtual Machine 1). Quindi hai bisogno di una seconda VM2 . Questo è, :

  • Assicurarsi che né VM1 né VM2 siano in esecuzione;
  • Da VirtualBox Manager:

    • Seleziona VM2,
    • "Impostazioni" -> "bagagli" -> "Aggiungi Hard Disk": "Seleziona come disco aggiuntivo",

    • selezionare il file vdi di VM1, che si desidera compattare. Suggerimento: assicurarsi che il disco rigido appena aggiunto a VM2 vada secondo nell'ordine di avvio dopo il disco originale di VM2.

    • avvia VM2: ora puoi (ri) montare il volume di VM1 come disco aggiuntivo per VM2, poiché nessun processo lo sta utilizzando in VM2. Suggerimento: per prima cosa, apri il volume con il folebrowser di Linux, che monta automaticamente il volume. Quindi, usa mount -lper vedere qual è _Device_il comando sudo mount -o remount,ro _Device_. Nel mio caso questo era / dev / sdb1 . Quindi il comando era (1) sudo mount -o ro,remount /dev/sdb1e poi (2) sudo zerofree /dev/sdb1.

Invece di VM2 si dovrebbe essere in grado di avviare e installare il disco come e l' immagine .iso e ottenere lo stesso MA NON l'ho provato.


0

Presumo che tu tenti di eseguire il mountcomando nella VM. Comunque probabilmente hai una partizione di root diversa dall'autore del post sul forum.

Provare:

mount -o ro,remount /

Il che non dipende dall'opzione fs o mount. Se questo non funziona, puoi anche provare a determinare il tuo root fs con grep " / " /proc/mountso cat /proc/cmdline. Se il tuo filesystem di root è ad esempio / dev / mapper / system-rootfs puoi usare:

mount -o ro,remount /dev/mapper/system-rootfs /

0

Ho avuto questo problema che mi ha impedito di mettere la mia macchina in modalità di sola lettura. Risolvere il problema mi ha richiesto più tempo di un id come ammettere ... Credo che il mio problema fosse che ho lasciato Apache-Zeppelin in esecuzione e me ne sono dimenticato. Assicurati di non fare lo stesso con un altro servizio di tipo hosting. Per risolvere il problema ho usato fuser -kill /per terminare tutti i processi che potrebbero causare il problema e mi ha permesso di tornare alla modalità ro.


0

La soluzione per me era riavviare il sistema operativo e scegliere "modalità di ripristino" dal menu di avvio di GRUB. Dalla "modalità di ripristino", ci sono meno processi in esecuzione e la rimontaggio di sola lettura funziona bene.

Se il sistema ha un file di scambio sul file system radice (anziché una partizione di scambio), è anche necessario disattivare temporaneamente il file di scambio con swapoff -a.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.