Existuje způsob, jak říct jádru, aby nyní uvolnilo volné místo na disku? Jako zápis do něčeho v/proc /? Používání Ubuntu 11.10 s ext4.
Toto je pravděpodobně staré a velmi opakované téma. Poté, co jsem si všiml 0 místa, které jsem si všiml, když můj editor nemohl uložit soubory zdrojového kódu, které jsem otevřel, které nyní mají ve svém hororu v seznamu složek 0 bajtů, pokračoval jsem v mazání.
Odstranil jsem 100 MB velkých souborů od uživatele i od kořenového adresáře a také jsem provedl nějaké hardlinking.
Těsně předtím, než jsem udělal apt-get clean
v/var/cache/apt/archive bylo více než 900 MB, nyní je zde pouze 108 kB:
# du
108 /var/cache/apt/archives
O hodinu později ještě žádné volné místo a nemůžu uložit své cenné soubory otevřené v editoru, ale všimněte si níže uvedených rozdílů:
# sync; df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 13915072 13304004 0 100% /
Nějaké návrhy? Vypnul jsem některé služby/procesy, ale nejsem si jistý, jak zkontrolovat, kdo by mohl aktivně jíst místo na disku.
Více informací
# dumpe2fs /dev/sda4
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 884736
Block count: 3534300
Reserved block count: 176715
Free blocks: 422679
Free inodes: 520239
First block: 0
Block size: 4096
Fragment size: 4096
Zkontrolujte pomocí lsof
, zda nejsou soubory otevřené. Místo bude uvolněno, dokud nebudou uzavřeny.
Sudo /usr/sbin/lsof | grep deleted
vám řekne, které smazané soubory jsou stále otevřeny.
Pomocí lsof
vyhledejte odstraněný, ale otevřený soubor, který stále vyžaduje místo:
lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome 3446 user 128u REG 253,2 16400 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Vyhledejte položku v /proc/<pid>/fd/
, Která odpovídá na filehandle:
ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Nyní jen cat /dev/null
Do fd:
cat /dev/null > /proc/3446/fd/128
Všimněte si, že inode je stále otevřený, ale nyní je to 0 délka
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
df
nezobrazí místo vyhrazené pro root
(i když běží jako root
):
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
Omezte vyhrazený prostor na 4%
# tune2fs -m4 /dev/sda4
df -h
nyní ukazovalo 45M zdarma.
Vrať to zpět na 5%
# tune2fs -m5 /dev/sda4
Pokud jste v Ubuntu odstranili soubory pomocí koše, vaše soubory byly více než pravděpodobné, že nebudou zcela odstraněny.
I po vyprázdnění koše zůstanou vaše soubory v ~/.local/share/Trash/expunged
až po restartu a možná i déle.
Nenašel jsem pro to dobrý důvod, ale pokud mi dojde nedostatek místa, vždy ručně rm
odstraněné soubory koše.
Sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do Sudo bash -c ": > /proc/$file"; done
Vysvětlení:
Grep lsof
výstup extrahovat pouze smazané soubory. Sed extrahovat ID procesu a ID filesescriptor z každého řádku a vytvořit řetězec ve formátu {pid}/fd/{fid}
. Zatímco smyčka a výstup nic do každého souboru, jejich nastavení na prázdné.
Zajímalo by mě, jestli sync
je zde nějaká pomoc - ale nemělo by to být, protože ve většině ("mnoho"?) Systémů IIRC se synchronizuje souborové systémy každých 30 s.
Zkontroloval jsem protokol jádra (takže dmesg
), abych zjistil, zda se děje něco ošklivého, a spustím lsof
, abych zjistil, zda je stále otevřený nějaký velký, smazaný soubor (vlastně myslím smazané soubory budou označeny jako výstup ve výstupu lsof
).
Dva důvody (jeden z nich poukázal na otázku, kterou odkazujete), které mohou způsobit, že odstraněné soubory uvolní místo, nejsou
unlink()
ed soubor s více než jedním odkazem)Ale nevím o konkrétním důvodu, proč by se to mohlo stát s tolika soubory ...
CentOS 6.3 také dělá věc, která není ve skutečnosti vyprazdňována, může-li-vyprázdnit-koš. Nemohl jsem najít způsob, jak získat zpět prostor, dokud jsem neběžel rm -rf ~/.local/share/Trash/expunged/
. Způsobil hodně poškrábání hlavy.