
Příkaz umount, který odpovídá „cílové zařízení je obsazeno“, se často objevuje po jednoduché akci: služba musí být zastavena, USB disk musí být odebrán nebo zálohovací objem musí být odpojen. Jádro to odmítá, protože nějaký proces stále používá tento souborový systém.
fuser umožňuje identifikovat tento proces předtím, než cokoliv zabijete. Na platném montážním bodě příkaz vyjmenuje PID, které používají jeho souborový systém.
Potvrďte montážní bod před fuserem
Pracujte z jiného adresáře než z objemu, který chcete odpojit. Shell umístěný v /mnt/archives stačí k tomu, aby udržel tento montážní bod obsazený.
Začněte tím, že se zeptáte findmnt, jaký souborový systém skutečně nese cestu. Tento krok zabrání spuštění fuser na jednoduchém adresáři umístěném v kořenovém adresáři /.
cd /
findmnt -T /mnt/archives -o TARGET,SOURCE,FSTYPE,OPTIONS
Sloupec TARGET by měl označovat bod, který má být odpojen, například /mnt/archives. Pokud výstup vrací /, cesta není samostatným objemem. Nepokračujte s příkazem určeným k odpojení disku.
Před provedením operace na serveru také zkontrolujte úlohu objemu. Aktivní záloha, databáze nebo kontejner mohou zapisovat, i když není otevřen žádný terminál.
- Udržujte sesion SSH nebo konzoli, která nezávisí na objemu.
- Poznamenejte si očekávanou službu, montážní bod a okno zásahu.
- Zkontrolujte pomocí
findmnt, že adresář odpovídá očekávanému montážnímu bodu.
Průvodce findmnt pod Linuxem pomáhá přečíst zdroj a typ souborového systému před provedením zásahu na disku.
Čtení procesů, které drží objem otevřený
Použijte přesný montážní bod s -m. Možnost -M přidává ochranu: fuser odmítá příkaz, pokud argument není skutečným montážním bodem.
sudo fuser -vmM /mnt/archives
Výstup může obsahovat uživatelské jméno, PID, typ přístupu a příkaz. Proces zobrazený s přístupem do aktuálního adresáře často naznačuje, že terminál zůstal v objemu. Proces služby by měl být spojen se svou jednotkou systemd nebo aplikací před jakoukoliv akcí.
Výsledek automaticky neříká, který proces je legitimní. Zálohovací agent může být aktivní, zatímco zapomenutý skript běží ze stejného objemu. Rozhodnutí závisí na očekávané službě v tuto chvíli.
Chcete-li zkontrolovat konkrétní PID, doplňte pomocí ps a podívejte se na jeho jednotku systemd, když proces závisí na službě:
ps -fp 2481
sudo systemctl status backup.service
Vyměňte 2481 a backup.service za pozorované hodnoty. Pro soubory, sokety a porty spojené s procesem článek o lsof dobře doplňuje tuto diagnostiku.
Zastavit správnou službu před umount
Až identifikujete jednotku systemd, zastavte ji řádně. Tato metoda ponechá službě čas na uzavření svých souborů a zapsání jejího konečného stavu.
sudo systemctl stop backup.service
sudo fuser -vmM /mnt/archives
sudo umount /mnt/archives
Druhý příkaz fuser by již neměl zobrazovat proces zastavené služby. Pokud zůstává přítomný jiný PID, analyzujte ho na oplátku místo opakování umount do nekonečna.
fuser -k existuje, ale to není automatická odpověď na obsazený objem. Tato možnost posílá signál nalezeným procesům a může přerušit zálohu, obchodní proces nebo shell jiného správce. Zvolil bych řádné zastavení aplikace, pokud je jednotka nebo skript identifikovatelný. Stroj zablokovaný při řízeném zastavení zůstává případem, kde se může projednávat přímější akce, s konzolí a postupem incidentu.
Ověření, že objem skutečně zmizel
Tichý umount pouze naznačuje, že příkaz nenavrhl žádnou chybu. Znovu přečtěte cestu pomocí findmnt a zkontrolujte poslední zprávy jádra, pokud je zařízení odpojitelným.
findmnt -T /mnt/archives
journalctl -k -n 20 --no-pager
Po úspěšném odpojení může findmnt -T /mnt/archives stále ukazovat kořenový souborový systém pro prázdný adresář, ale již by neměl zobrazovat starý zdroj objemu na tomto montážním bodě. U USB disku také počkejte, až budou dokončeny zápisy, než jej odpojíte.
Reference chování: příručka fuser od psmisc.