Come forzare veramente lo smontaggio di un filesystem (senza un'indagine manuale perché è occupato)


13

Come smontare un filesystem in Linux senza indagare perché è occupato?

Voglio farlo in un solo comando. Dovrebbe gestire le applicazioni usando quel filesystem, i submount, i container ( lxc-execute -n qqq <command>) e tutte le altre cose.

Basta "smontare. Nessuna obiezione!". Sono consentite patch o configurazioni speciali del kernel.

Il filesystem dovrebbe essere veramente smontato, quindi umount -lsicuramente non è un'opzione. Ad esempio, per cryptsetup remove(BTW come forzatamente cryptsetup remove? Aggiornamento :, cryptsetup luksSuspendma non sarai in grado di cryptsetup luksResumefarlo se non è LUKS).

Come rendere non validi tutti i filehandle su quel file system?

L'unico modo affidabile che conosco è montare il filesystem attraverso il FUSE (di solito non c'è nessun problema a smontare la cosa FUSE perché posso solo uccidere il suo processo).

PS sanno già montare fuser, lsof | grep, cat /proc/*/mounts | grepe non-lavoro "badfs patch" obsoleto.

Risposte:


3

Usa la combinazione di tasti Magic SysRq : Alt+ SysRq+u

Nota che probabilmente dovresti fare prima una sincronizzazione di emergenza: Alt+ SysRq+s

Si noti inoltre che su alcune tastiere (soprattutto più recenti), è necessario utilizzare PrtScanzichéSysRq


Il tasto Maiusc non è necessario, solo Alt + SysRq + tasto. Un'altra cosa degna di nota (specialmente per gli utenti di laptop) è che puoi premere Alt, premere e rilasciare SysRq, quindi premere e rilasciare la lettera / cifra e infine rilasciare Alt. Soprattutto, questo rimonta tutti i filesystem in sola lettura, quindi è una cosa da ultimo prima di riavviare forzatamente, non un modo generale di rimontare in sola lettura i filesystem.
Gilles 'SO- smetti di essere malvagio' il

@Gilles: grazie per il suggerimento sul tasto Maiusc. Ho corretto le mie istruzioni.
sml

1. Rimonta solo in sola lettura. Non è quello desiderato. Ad esempio, desidero smontarlo e rimontarlo utilizzando FUSE. 2. La cosa brutta è che ho bisogno di "-o rimontare, rw" il filesystem di root e altri dopo quello per tornare al lavoro normale.
Vi.

3

umount --forceo umount -f(equivalente)

In caso contrario, utilizzare:

umount --lazyo umount --l(equivalente)

L' opzione " lazy " "staccerà ora il filesystem dalla gerarchia del filesystem e ripulirà tutti i riferimenti al filesystem non appena non è più occupato. (Richiede il kernel 2.4.11 o successivo.)" Potrebbe causare instabilità, ma otterrà la cosa smontata. Qualsiasi programma che utilizza l'unità potrebbe bloccarsi.


Ovviamente --forcenon funziona. E --lazynon è un vero smontaggio - non rilascia cose LVM, loopback o cryptsetup.
Vi.

1
umount -f

può essere usato per forzare uno smontaggio quando il filesystem è occupato.


1
Non ha mai funzionato per me: umount2: Device or resource busyl'unico successo parziale è stato quando ho sperimentato la patch badfs.
Vi.

Ho avuto lo stesso messaggio di "errore", ma funzionava comunque. Il filesystem è stato smontato dopo umount -f
IanH

3
Prova "lazy umount", umount -l. Smonta sempre ma potrebbe produrre un filesystem instabile.
Jimmy Hedman,

Penso che il commento di Jimmy su questa risposta sia in realtà l'opzione migliore. È vero che uno smontaggio "pigro" può causare instabilità, ma si presume che tu sia già in uno stato instabile se devi forzare lo smontaggio del filesystem. A tal fine, perché '-l' non è un'opzione?
deesto,

@deesto, Lazy smontaggio non rende il dispositivo di blocco indesiderato (volume LVM, contenitore LUKS, loopback) senza riferimento.
Vi.

1

Temo che non ci sia modo di farlo con un solo comando. umount -fnon funziona davvero così facilmente come si potrebbe sperare. Se ci sono dei sub-mount sotto qualche altro mount, non puoi semplicemente smontare quei mount in un ordine casuale e sperare che scendano.

Ma non preoccuparti, c'è un modo per rendere tutto questo un unico comando: creare uno script shell / Perl che uccide i processi desiderati, smonta contenitori, smonta e infine smonta qualche altro innesto. Quindi puoi semplicemente chiamare il tuo script su richiesta. Inizialmente questo è più lavoro per te ma dopo che hai fatto funzionare la sceneggiatura, tutto è un gioco da ragazzi. :)


1
Questi sono casi in cui non riesco a smontare nemmeno manualmente: 1. processi ininterrotti del sonno che non possono essere ripresi (driver in crash, ecc.) 2. Memoria non riuscita (che blocca anche ogni richiesta). Voglio che questo "smontaggio sporco" gestisca questo.
Vi.
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.