Setkal jsem se s problémem, jako je tento, protože připojuji sdílenou složku ve virtuálním počítači a chci po odpojení odstranit adresář a chci jen sdílet své řešení.
-
cesta k odpojení
sudo umount /your_path
-
odstranit mout cestu v /etc/fstab
sudo nano /etc/fstab
-
restartovat
sudo reboot
-
odebrat adresář
sudo rm -rf /your_path
Děkuji za odpověď @g-v. Ale zjistil jsem, že výsledkem je jiný problém. Při rozvětvení procesu používáme příznak CLONE_NEWNS. Další podrobnosti lze nalézt v příznaku CLONE_NEWNS a chybě MESOS-3349 Device busy
Stručně řečeno, připojíme se k rodičovskému procesu. A pak umount v podřízeném procesu, protože CLONE_NEWNS stále existuje bod připojení, který zpracovává nadřazený proces. Takže při volání rmdir by se zobrazil kód chyby EBUSY.
Abychom předešli výše uvedeným problémům, mohli bychom použít sdílené připojení nebo podřízené připojení. Další podrobnosti lze nalézt v LWN 159092
Podle mých zkušeností jsou následující operace v Linuxu asynchronní:
- Zavírání souboru. Ihned po
close()
vrátí,umount()
může vrátitEBUSY
zatímco provádí asynchronní uvolnění. Viz diskuze zde:strana 1, strana 2. - Odpojování souborového systému. Připojené zařízení může být zaneprázdněné, dokud nebudou všechna data zapsána na disk.
Dokonce i já volám
sync && echo 2 > /proc/sys/vm/drop_caches
a zkuste vypustit mezipaměť souborů, stále to nefunguje.
Viz sync(8)
:
V systému Linux
sync
je zaručeno pouze plánování špinavých bloků pro zápis; ve skutečnosti může chvíli trvat, než budou všechny bloky konečně zapsány.reboot(8)
ahalt(8)
příkazy to berou v úvahu tím, že po zavolánísync(2)
na několik sekund uspí .
Pokud jde o /proc/sys/vm/drop_caches
, viz zde:
Toto je nedestruktivní operace a neuvolní žádné špinavé předměty.
Ihned po vašem příkazu tedy mohou být data stále zařazena do fronty pro zápis a odpojení ještě není dokončeno.
Aktualizovat
Pokud však probíhá asynchronní odpojení, jádro vrátí EBUSY
pro operace na připojeném zařízení , ale ne pro přípojný bod .
Výše uvedené případy tedy nemohly být důvodem vašeho problému :P
PS.
Vlastně nechápu, proč je v manuálové stránce uvedeno sync(8)
není v Linuxu synchronní. Volá sync(2)
který uvádí:
Podle standardní specifikace (např. POSIX.1-2001),
sync()
naplánuje zápisy, ale může se vrátit ještě před dokončením samotného zápisu. Od verze 1.3.20 však Linux skutečně čeká. (To stále nezaručuje integritu dat:moderní disky mají velké mezipaměti.)