Ho un NAS implementato su una macchina virtuale dove gira FreeNAS. Buona soluzione: economica e discretamente affidabile. Questo FreeNAS gira con file system ZFS.
Il file system ZFS include alcune tecniche e funzionalità ispirate a ciò che di meglio hanno da offrire i file system concorrenti.
Una delle caratteristiche che rendono unico lo ZFS è la gestione del disco: per gestire i dati su disco utilizza un algoritmo chiamato
copy-on-write.
Per i nostri scopi diciamo che è un file system che esegue la deduplica al volo dei dati che deve gestire, quindi non scrive o cancella i dati come noi saremmo abituati a pensare.
Quindi, per esempio, di fronte a una richiesta di cancellazione di un file, questo non viene effettivamente cancellato dal disco, ma vengono creati dei nuovi blocchi con le modifiche al file originale.
Ho esaurito lo spazio su questo NAS
Avevo messo dei monitoraggi per inviarmi degli alert quando lo spazio andava esaurendosi, ma preso da mille altre cose non ho guardato il NAS. Come risolvo il problema?
Se mi collego al NAS e cerco di eliminare dei file per liberare risorse, il sistema mi dice che non ha spazio sufficiente per cancellare i file.
E questo è dovuto a come funziona ZFS: per cancellare dei dati, il sistema crea dei nuovi blocchi di disco con scritte le modifiche e, poiché il disco è pieno, non c’è spazio per creare un nuovo file corrispondente a quello che vorrei cancellare.
Se avessi FreeNAS installato su un hardware fisico basterebbe aggiungere un disco USB e dire al sistema di utilizzare anche questo disco per espandere le risorse disponibili.
Ma, come detto, gira su una macchina virtuale e non è possibile espanderle ulteriormente.
Che fare dunque?
Si può ricorrere a un trucco assolutamente efficace: usare il comando echo per creare un file ex-novo, invece che aggiungere contenuti a un file.
Quindi, se invece di mettere informazioni in coda al file da eliminare riscriviamo da zero il file, possiamo raggiungere il nostro scopo: liberare spazio su disco.
Un esempio pratico
Nella figura qui sopra si vede un file test.txt di dimensione 6.
Come cancellare o ridurre la dimensione di quel file se il file system è pieno e quindi non accetta ulteriori scritture su disco?
Basta digitare il comando echo > test.txt.
Questo infatti forza lo ZFS a scrivere il nuovo file (invece di andare in coda al file test.txt che esiste già) che però ha una dimensione inferiore al file originario, riuscendo quindi a liberare spazio.
Nella parte inferiore della figura infatti si può vedere che il file test.txt da dimensione 6 diventa di dimensione 1.
Tu lo conoscevi questo trucco?
Se si tratta di file di grandi dimensioni il trucco funziona ma come fare quando si hanno tanti file di piccole dimensioni annidati in sottocartelle?
A me non funziona continua a dire che il file non può essere cancellato perchè il disco è pieno
Buongiorno e grazie per il contributo.
Hai verificato di aggiungere il percorso (assoluto o relativo) dello specifico file che vuoi ridimensionare? Verifica anche che il file che ridimensioni liberi spazio sufficiente per permettere la cancellazione dei successivi file.
Se vuoi, posta qui l’output del comando
ls -la
sulla cartella che contiene il file da ridimensionare, segnalando quale esso sia.
Grazie.
Fatto con il percorso assoluto funziona. Grazie