Dì a fs di liberare spazio dai file eliminati ORA


73

C'è un modo per dire al kernel di restituire lo spazio libero su disco ora? Come scrivere a qualcosa in / proc /? Usando Ubuntu 11.10 con ext4.

Questo è probabilmente un tema vecchio e molto ripetuto. Dopo aver colpito lo spazio 0 notato solo quando il mio editor non è stato in grado di salvare i file di codice sorgente che ho aperto, che con mio orrore ora hanno una dimensione di 0 byte nell'elenco delle cartelle, ho iniziato a cancellare.

Ho cancellato centinaia di MB di file di grandi dimensioni sia dall'utente che dal root, e ho anche fatto alcuni collegamenti.

Poco prima di apt-get cleanfarlo c'erano oltre 900 MB in / var / cache / apt / archives, ora ci sono solo 108 KB:

# du
108 /var/cache/apt/archives

Un'ora dopo non c'è ancora spazio libero e non riesco a salvare i miei preziosi file aperti nell'editor, ma noti la disparità di seguito:

# sync; df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4             13915072  13304004         0 100% /

Eventuali suggerimenti? Ho chiuso alcuni servizi / processi ma non sono sicuro di come controllare chi potrebbe attivamente consumare spazio su disco.

Ulteriori informazioni

# 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

4
Il file system libera immediatamente lo spazio. Tuttavia, la funzione di blocchi riservati root di ext [234] e il modo in cui il kernel mantiene riservati i file aperti può dare l'impressione di spazio perso.
hhaamu,

Se hai diversi filesystem (brevetti), liberare spazio in uno non farà nulla di buono nell'altro.
vonbrand,

Perché sono stato in grado di riempire la partizione prima che i blocchi 5Go "riservati" si riprendessero?
Psddp,

Risposte:


117

Verificare con lsofse ci sono file aperti. Lo spazio non verrà liberato fino a quando non saranno chiusi.

sudo /usr/sbin/lsof | grep deleted

ti dirà quali file eliminati sono ancora tenuti aperti.


Buono. Mi ha mostrato alcuni mysqldblocchi in / tmp, ma molti apport-gtusi dei file estinti in / var / lib / apt / lists / partial / che apparentemente si sono accumulati. Quindi potrei killall apport-gtma lo esaminerò prima.
Marcos,

1
Contrassegnare come risposta più vicina, sebbene non abbia mai "restituito" lo spazio immediatamente dopo aver chiuso gli handle / processi dei file che li utilizzano. Alla ricerca di altri approcci basati su kernel / proc / fs.
Marcos,

18
È inoltre possibile utilizzare lsof +L1(selezionare i file aperti che sono stati scollegati).
Martin Fido,

Le informazioni contenute in questa risposta sono corrette, ma il problema che l'OP stava avendo non era probabilmente causato da questo ma dallo spazio riservato alla radice (che un'altra risposta risolve).
marcelm,

37

Utilizzare lsofper trovare lo spazio cancellato, ma aperto, che consuma ancora spazio:

lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome     3446       user  128u      REG              253,2              16400       2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)  

Trova la voce /proc/<pid>/fd/che risponde al filehandle:

ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

Ora, solo cat /dev/nullnel fd:

cat /dev/null > /proc/3446/fd/128

Nota che l'inode è ancora aperto, ma ora ha lunghezza 0

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

5
Uso superfluo di cattroncare. Nella shell Bourne, > /proc/3446/fd/128lo farà.
200_successo

2
NON farlo se in futuro il tuo programma dovrebbe rileggere qualsiasi parte del file che potrebbe essere o non essere disponibile nella cache della pagina.
Michael R. Hines,

13

dfnon mostrerà lo spazio riservato per root(anche quando eseguito come root):

# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

Come modificare la "percentuale di blocco riservata"

  1. Riduci lo spazio riservato al 4%

    # tune2fs -m4 /dev/sda4

df -h ora ha mostrato 45M gratis.

  1. Ho salvato rapidamente i miei file
  2. Rimettilo al 5%

    # tune2fs -m5 /dev/sda4


2
Lo spazio riservato per root è oggigiorno quasi sempre troppo grande. Puoi ridurlo a qualche percento. dfvisualizza lo spazio utilizzabile dall'utente normale. Poiché apt viene eseguito come root, lo spazio riservato è utile solo per proteggere dai riempimenti causati da utenti non root (= utenti normali e servizi che dispongono di un proprio utente).
jofel

Sono d'accordo; uno in mkfsquesti giorni dovrebbe riservare ad es. 5% o 300 MB, a seconda di quale è inferiore . Ho appena sintonizzato alcuni dei miei server al 2% e ho liberato i GB!
Marcos,

3
@jofel, no, non lo è. Ogni volta che si supera il 90% di utilizzo, si inizia a ottenere molta frammentazione. È necessario liberare più spazio, non avvicinarsi al 100% di utilizzo.
psusi

@psusi Sei vero, grazie per il tuo commento. Ma l'opportunità di usare (temporaneamente) quasi tutto lo spazio disponibile come utente normale potrebbe essere davvero pratica e con ext4, le cose non vanno più così male, vedi unix.stackexchange.com/a/7965/15241
jofel

7

In Ubuntu, se hai eliminato file utilizzando il cestino, i tuoi file probabilmente non sarebbero stati rimossi completamente.

Anche dopo aver svuotato il cestino, i file rimarranno ~/.local/share/Trash/expungedfino a dopo un riavvio e forse anche più a lungo.

Non ho trovato una buona ragione per questo, ma se esaurisco lo spazio, ho sempre manualmente rmi file cestino espulsi.


1
Buon punto. Anche se sono uno di quelli che vivono e muoiono dalla riga di comando e usano raramente il file manager grafico. Non ho ancora notato quella cartella espulsa come nascondiglio: un clic Cestino vuoto era sempre stato finale e restituiva il mio spazio su disco quando necessario.
Marcos,

6
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

Spiegazione: Output
Grep lsofper estrarre solo i file eliminati. Sed estrae l'id del processo e l'id del filedescriptor da ciascuna riga e crea una stringa nel formato {pid}/fd/{fid}. Mentre esegui il ciclo e non restituisci nulla a ciascun file, impostandoli su vuoto.


3
Ho ricevuto un errore "Errore di sintassi vicino al token imprevisto" (""
Majid Golshadi

5

Mi chiedo se syncsia di aiuto qui - ma non dovrebbe essere, come IIRC nella maggior parte ("molti"?), I filesystem sono sincronizzati ogni 30 s.

Controllerei il registro del kernel (così dmesg) per scoprire se stava succedendo qualcosa di brutto ed eseguivo lsofper vedere se qualche file cancellato di grandi dimensioni è ancora aperto (in realtà, penso che i file cancellati saranno contrassegnati come tali lsofnell'output).

Ci sono due motivi (uno di questi indicato nella domanda che colleghi) che possono far sì che i file eliminati non rilascino spazio

  • file che non sono stati effettivamente cancellati: hai eliminato un file che è hardlink da qualche altra parte (più precisamente, hai unlink()editato un file con più di un link)
  • file che sono ancora aperti: i file aperti vengono registrati usando, beh, i file, gli inode stessi, non le voci della directory, se si elimina la voce, l'inode rimarrà lì finché sarà ancora aperto.

Ma non conosco un motivo specifico per cui ciò potrebbe accadere con così tanti file ...


syncmai aiutato. Per quanto riguarda i registri, è un sistema Ubuntu quindi è piuttosto difettoso, quindi sì, in genere sono rumorosi. apportè stato distribuito spesso perché ogni aggiornamento apt-get di notte si arresta in modo anomalo, sebbene / var / crash abbia solo 77 MB. Ho anche notato che atdha inondato / var / log / syslog con linee ripetute come atd[8892]: File a0015c0152ab76 is in wrong format - abortingprobabilmente poiché i pochi file in / var / spool / cron / atspool erano tutti di dimensioni 0, rendendo ovviamente il problema circolare
Marcos

1

CentOS 6.3 fa anche la cosa non proprio-svuotando-cestino-quando-si-svuota-cestino. Non sono riuscito a trovare un modo per recuperare lo spazio fino a quando non ho appena corso rm -rf ~/.local/share/Trash/expunged/. Ha causato molti graffi alla testa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.