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.