it-swarm.it

Come superare "dispositivo o risorsa occupata"?

Ho provato a rm -rf una cartella e "dispositivo o risorsa occupata".

In Windows, avrei usato LockHunter per risolvere questo problema. Qual è l'equivalente di Linux? (Si prega di dare come risposta un semplice metodo di "sblocco" e non articoli completi come questo . Sebbene siano utili, al momento sono interessato solo a ASimpleMethodThatWorks ™)

250
ripper234

Lo strumento che desideri è lsof, che sta per elenca i file aperti.

Ha molte opzioni, quindi controlla la pagina man, ma se vuoi vedere tutti i file aperti in una directory:

lsof +D /path

Questo ricercherà attraverso il filesystem in /path, Quindi fai attenzione a farlo su alberi di directory di grandi dimensioni.

Una volta che sai quali processi hanno file aperti, puoi uscire da quelle app o ucciderle con il comando kill(1).

255
camh

a volte è il risultato di problemi di montaggio, quindi smonterei il filesystem o la directory che stai cercando di rimuovere:

umount/path

122
kip2

Uso fuser per questo tipo di cose. Elencherà quale processo sta usando uno o più file all'interno di un mount.

16
BillThor

Ecco la soluzione:

  1. Vai nella directory e digita ls -a
  2. Troverai un .xyz file
  3. vi .xyz e guarda qual è il contenuto del file
  4. ps -ef | grep username
  5. Vedrai il contenuto .xyz nell'ottava colonna (ultima riga)
  6. kill -9 job_ids - dove job_ids è il valore della seconda colonna dell'errore corrispondente causato contenuto nell'ottava colonna
  7. Ora prova a eliminare la cartella o il file.
12
user73011

Ho avuto lo stesso problema, ho creato un one-liner a partire dalla raccomandazione di @camh:

lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs kill -9

Il comando awk prende i PIDS. Il comando tail elimina la fastidiosa prima voce: "PID". Ero solito -9 on kill, altri potrebbero avere opzioni più sicure.

Lo provo spesso su server che hanno file system di rete NFS. Suppongo che abbia qualcosa a che fare con il filesystem, dal momento che i file sono in genere denominati come .nfs000000123089abcxyz.

La mia soluzione tipica è quella di rinominare o spostare la directory principale del file, quindi tornare più tardi tra un giorno o due e il file sarà stato rimosso automaticamente, a quel punto sono libero di eliminare la directory.

Questo in genere accade nelle directory in cui sto installando o compilando librerie software.

7
user5359531

Ho avuto questo problema quando un test automatico ha creato un ramdisk. I comandi suggeriti nelle altre risposte, lsof e fuser, non sono stati di alcun aiuto. Dopo i test ho provato a smontarlo e quindi eliminare la cartella. Sono stato davvero confuso per anni perché non riuscivo a liberarmene - continuavo a ricevere "Dispositivo o risorsa occupata"!

Per caso ho scoperto come liberarmi di un ramdisk. Ho dovuto smontarlo lo stesso numero di volte in cui avevo eseguito il comando mount, ovvero Sudo umount path

A causa del fatto che è stato creato utilizzando test automatici, è stato montato molte volte, quindi perché non riuscivo a liberarmene semplicemente smontandolo una volta dopo i test. Quindi, dopo averlo smontato manualmente molte volte, alla fine è diventato di nuovo una cartella normale e ho potuto eliminarlo.

Spero che questo possa aiutare qualcun altro che si imbatte in questo problema!

5
gloriphobia

Sfogliando la domanda di Prabhat sopra, ho avuto questo problema in macos High Sierra quando ho bloccato un processo encfs, il riavvio lo ha risolto, ma questo

ps -ef | grep name-of-busy-dir

Mi ha mostrato il processo e il PID (colonna due).

Sudo kill -15 pid-here

aggiustato.

5
bil

Se il server è accessibile, provare

Eliminazione di quella directory dal server

Oppure, fai mount e mount di nuovo, prova umount -l: umount pigro in caso di problemi con umount normale.

Anch'io ho avuto questo problema dove

lsof +D path: non fornisce output

ps -ef: non fornisce informazioni pertinenti

3