Domanda

Linux: quale processo sta causando "dispositivo occupato" quando si fa umount?

È stato utile?

Soluzione

Guarda il comando lsof (elenca i file aperti) - può dirti quali processi tengono ciò che è aperto. A volte è complicato ma spesso qualcosa di semplice come sudo lsof | grep (qui il nome del tuo dispositivo) potrebbe farlo per te.

Altri suggerimenti

Nel caso in cui ... a volte capiti che stai chiamando umount dal terminale e la tua directory corrente appartiene al filesystem montato.

Dovresti usare il comando fuser .

Eg. fuser / dev / cdrom restituirà i pid del processo usando / dev / cdrom .

Se stai tentando di smontare, puoi terminare questo processo usando l'opzione -k (vedi man fuser ).

Controlla i dispositivi ad anello aperto associati a un file sul filesystem con "losetup -a". Non si presentano con lsof o fuser.

Controlla anche / etc / exports . Se si esportano percorsi all'interno del mountpoint tramite NFS, verrà visualizzato questo errore quando si tenta di smontare e non verrà visualizzato nulla in fuser o lsof .

lsof +f -- /mountpoint

(come elenca i processi usando i file sul mount montato su / mountpoint. Particolarmente utile per trovare quali processi stanno usando una chiavetta USB o un CD / DVD montati.

lsof e fuser sono in effetti due modi per trovare il processo che mantiene aperto un determinato file. Se vuoi solo che umount abbia successo, dovresti esaminare le sue opzioni -f e -l.

Questo è esattamente il motivo per cui " fusore -m / mount / point " esiste.

A proposito, non credo che "fuser" o "lsof" indicherà quando una risorsa è trattenuta dal modulo del kernel, anche se di solito non ho questo problema ..

neanche lsof e fuser non mi hanno dato nulla.

Dopo aver rinominato tutte le possibili directory in .old e riavviato il sistema ogni volta che ho apportato modifiche, ho trovato una directory particolare (relativa a postfix) che era responsabile.

Si è scoperto che una volta avevo creato un collegamento simbolico da / var / spool / postfix a / disk2 / pers / mail / postfix / varspool al fine di ridurre al minimo le scritture su disco su un filesystem di root basato su SDCARD (Sheeva Plug).

Con questo link simbolico, anche dopo aver interrotto i servizi postfix e dovecot (sia ps aux che netstat -tuanp non hanno mostrato nulla di correlato) non sono stato in grado di smontare / disk2 / pers.

Quando ho rimosso il link simbolico e ho aggiornato i file di configurazione postfix e dovecot per puntare direttamente alle nuove directory su / disk2 / pers / sono stato in grado di arrestare con successo i servizi e smontare la directory.

La prossima volta esaminerò più da vicino l'output di:

ls -lR /var | grep ^l | grep disk2

Il comando precedente elencherà in modo ricorsivo tutti i collegamenti simbolici in un albero di directory (qui a partire da / var) e filtrerà quei nomi che puntano a un punto di montaggio target specifico (qui disk2).

Apri file

I processi con file aperti sono i soliti colpevoli. Visualizzali:

lsof +f -- <mountpoint or device>

C'è un vantaggio nell'uso di / dev / < device > piuttosto che / mountpoint : un mountpoint scompare dopo un umount -l oppure potrebbe essere nascosto da una montatura sovrapposta.

fuser può anche essere usato, ma a mio avviso lsof ha un output più utile. Tuttavia fuser è utile quando si tratta di uccidere i processi che causano i tuoi drammi in modo da poter andare avanti con la tua vita.

Elenca i file su < mountpoint > (vedi le avvertenze sopra):

fuser -vmM <mountpoint>

Uccidi in modo interattivo solo i processi con file aperti per la scrittura:

fuser -vmMkiw <mountpoint>

Dopo aver rimontato la sola lettura ( mount -o remount, ro < mountpoint > ), è sicuro (r) uccidere tutti i processi rimanenti:

fuser -vmMk <mountpoint>

punti di montaggio

Il colpevole può essere il kernel stesso. Un altro filesystem montato sul filesystem che si sta tentando di umount provocherà dolore. Verificare con:

mount | grep <mountpoint>/

Per i mount loopback, controlla anche l'output di:

losetup -la

Inode anonimi (Linux)

inode anonimi possono essere creati da:

  • File temporanei ( aperto con O_TMPFILE )
  • inotify orologi
  • [eventfd]
  • [eventpoll]
  • [timerfd]

Questi sono i tipi più sfuggenti di pokemon e compaiono nella colonna TYPE di TYPE come a_inode (che non è documentato nella < a href = "http://man7.org/linux/man-pages/man8/lsof.8.html" rel = "nofollow noreferrer"> lsof man page ).

Non appariranno in lsof + f - / dev / < device > , quindi dovrai:

lsof | grep a_inode

Per i processi di uccisione che contengono inode anonimi, vedi: Elenca gli orologi inotify correnti (nome percorso, PID) .

Se non riesci ancora a smontare o rimontare il dispositivo dopo aver arrestato tutti i servizi e i processi con file aperti, potrebbe esserci un file di scambio o una partizione di scambio che tiene occupato il dispositivo. Questo non verrà visualizzato con fuser o 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 all'utilizzo del comando sudo swapoff -a , potresti anche essere in grado di disabilitare lo swap arrestando un servizio o systemd . Ad 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 da poter rimontare la mia partizione di root come sola lettura per eseguire fsck sulla mia partizione di root senza riavviare. Ciò era necessario su un Raspberry Pi con Raspbian Jessie.

I filesystem montati sul filesystem che si sta tentando di smontare possono causare l'errore destinazione occupata oltre a tutti i file in uso. (Ad esempio quando monti -o bind / dev / mnt / yourmount / dev per usare chroot .)

Per trovare quali file system sono montati sul filesystem, eseguire quanto segue:

mount | grep '/ mnt / yourmount'

Per trovare quali file sono in uso i consigli già suggeriti da altri qui:

lsof | grep '/ mnt / yourmount'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top