Ridurre / ripristinare la dimensione della directory?


11

C'è un modo per ridurre una voce della directory?

Le mie directory maildir dovecot sono aumentate di dimensioni dal 4096 predefinito a diversi mega, ed è in disordine con le quote del disco.

L'unico modo che ho trovato è quello di eliminare e ricreare la directory. Spero che ci sia una funzione magica da qualche parte: sono aperto a tutto, tranne che per l'assemblatore codificato a mano.

Modifica: per i posteri, per trovare dirents> 4096:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

Risposte:


6

Vedi anche rm in una directory con milioni di file ; tangenzialmente correlati, ma ne discutiamo lì.

Per quanto ne so, almeno su ext2 / 3, no, non esiste un modo (online) per ridurli prima di eliminare + ricreare. Smontate, diverse fonti suggeriscono che e2fsck -Dpotrebbe funzionare, anche se non posso rivendicare alcuna esperienza personale con quell'opzione.

Alcuni riferimenti per ulteriori letture:


1
Il primo link è stato particolarmente utile: ha affrontato specificamente il mio problema (server di posta), e il fatto che Ted Tso abbia
influenzato

3

Di recente ho dovuto eliminare e ricreare una directory NFS per ridurne le dimensioni dopo che era stata gonfiata in precedenza. Nel processo, ho trovato un modo abbastanza efficiente per farlo usando rsync e hard link. Questo metodo evita di copiare i file effettivi, pur mantenendo l'obiettivo di ricreare la directory con lo stesso contenuto.

Dato che dovevamo eseguire i tempi di inattività per eseguire questa operazione durante la nostra finestra di manutenzione, rendere la directory ricostruita disponibile al più presto era importante per noi. Se la semplicità è più importante per te, cambia il primo comando di spostamento in 'rm -rf' nella directory di origine e salta l'altro comando 'rm -rf'.

Ho estratto questi comandi da un processo più ampio e ho estratto i nomi delle directory, quindi mi scuso se ho fatto un errore in quella traduzione.

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

Quindi, rimuoviamo la directory. A seconda delle dimensioni, potrebbe essere necessario utilizzare una tecnica più sofisticata per farlo. Ad esempio, l'utilizzo di rsync con il flag --delete per sincronizzare una directory vuota in questa directory potrebbe essere più efficiente.

rm -rf /tmp/deleteme/

2

Lo farei così.

cp -aloldir newdir && mvolddir tempname && mvnewdir olddir && rm -rtempname

dove olddir è la directory che si desidera ridurre newdir e tempname sono nomi di file temporanei

cp -alcrea collegamenti al contenuto di olddir in newdir e i successivi tre comandi li scambiano con newdir e puliscono.


chiazza di petrolio. mai saputo di cp -l
Kevin Buchs
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.