it-swarm-eu.dev

Jak se dostat přes "zařízení nebo zdroje obsazeno"?

Snažil jsem se rm -rfsložka, a dostal "zařízení nebo zdroje obsazeno".

Ve Windows bych to vyřešil pomocí LockHunter. Co je to linuxový ekvivalent? (Uveďte prosím jako odpověď jednoduchou metodu „odemknout“ a ne úplné články jako tento . Přestože jsou užitečné, v současné době mě zajímá jen ASimpleMethodThatWorks ™)

250
ripper234

Nástroj, který chcete, je lsof, což znamená seznam otevřených souborů.

Má spoustu možností, takže zkontrolujte manuálovou stránku, ale pokud chcete vidět všechny otevřené soubory v adresáři:

lsof +D /path

To se bude opakovat prostřednictvím souborového systému pod /path, Takže si to dejte pozor na velké adresářové stromy.

Jakmile víte, které procesy mají otevřené soubory, můžete tyto aplikace ukončit nebo je zabít příkazem kill(1).

255
camh

někdy je to důsledek problémů s připojením, takže bych odpojil souborový systém nebo adresář, který se pokoušíte odstranit:

umount/cesta

122
kip2

Pro tuto věc používám fuser. Zobrazí seznam, který proces používá soubor nebo soubory v rámci připojení.

16
BillThor

Zde je řešení:

  1. Přejděte do adresáře a zadejte ls -a
  2. Najdete .xyz soubor
  3. vi .xyz a podívejte se, co je obsahem souboru
  4. ps -ef | grep username
  5. Uvidíte obsah .xyz v 8. sloupci (poslední řádek)
  6. kill -9 job_ids - kde job_ids je hodnota 2. sloupce odpovídající chyby způsobila obsah v 8. sloupci
  7. Nyní zkuste odstranit složku nebo soubor.
12
user73011

Měl jsem stejný problém, postavil jsem jednostrannou loď začínající doporučením @camh:

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

Příkaz awk chytne PIDS. Příkaz tail se zbaví nepříjemné první položky: "PID". Použil jsem -9 zabít, ostatní mohou mít bezpečnější možnosti.

To se často vyskytuji na serverech, které mají systémy síťových souborů NFS. Předpokládám, že to má něco společného se souborovým systémem, protože soubory jsou obvykle pojmenovány jako .nfs000000123089abcxyz.

Mým typickým řešením je přejmenování nebo přesunutí nadřazeného adresáře souboru, poté se vraťte později za den nebo dva a soubor bude automaticky odstraněn. V tomto okamžiku mohu adresář smazat.

To se obvykle děje v adresářích, kde instaluji nebo kompilauji softwarové knihovny.

7
user5359531

Měl jsem tento problém, když automatizovaný test vytvořil ramdisk. Příkazy navržené v ostatních odpovědích lsof a fuser nepomohly. Po testech jsem se pokusil odpojit a odstranit složku. Po celé věky jsem byl opravdu zmatený, protože jsem se toho nemohl zbavit - stále jsem dostal „Zařízení nebo zdroj práce“!

Náhodou jsem zjistil, jak se zbavit ramdisku. Musel jsem to odpojit, kolikrát jsem spustil příkaz mount, tj. Sudo umount path

Vzhledem k tomu, že byl vytvořen pomocí automatizovaného testování, dostal se mnohokrát, a proto jsem se ho nemohl zbavit pouhým odpojením jednou po testech. Takže poté, co jsem ji manuálně odpojil mnohokrát, se konečně znovu stal běžnou složkou a mohl jsem ji vymazat.

Doufejme, že to může pomoci někomu jinému, kdo narazí na tento problém!

5
gloriphobia

Když jsem se zbavil Prabhatovy otázky výše, měl jsem tento problém v Macos High Sierra, když jsem uvízl v procesu šifrování a restartoval jsem to vyřešil, ale toto

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

Ukázalo mi proces a PID (sloupec dva).

Sudo kill -15 pid-here

opravil to.

5
bil

Pokud máte server přístupný, zkuste

Odstranění tohoto adresáře ze serveru

Nebo mount a mount znovu, zkuste umount -l: líný umount, pokud se potýká s jakýmkoli problémem na normální umount.

Také jsem měl tento problém, kde

lsof +D path: nedává žádný výstup

ps -ef: neuvádí žádné relevantní informace

3