Soluzioni tecniche

Che fare se il disco è pieno?

04 Marzo 2014

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
 

ZFS

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?
Autore
Claudio Panerai
Gli ultimi prodotti che vi ho portato, nel 2020: Vade Secure Il primo sistema antispam/antihishing/antimalware basato sull'intelligenza artificiale e appositamente progettato per Office 365. Naturalmente a misura di MSP. ID Agent Piaffaforma che consente agli MSP di monitorare le credenziali (proprie e dei clienti) che sono in vendita nel dark web.
Nato a Ivrea nel 1969, è sposato e padre di due figlie. Laureato in Scienze dell’Informazione nel 1993, ha dapprima svolto numerose consulenze e corsi di formazione per varie società per poi diventare responsabile IT per la filiale italiana del più grande editore mondiale di informatica, IDG Communications. Dal 2004 lavora in Achab dapprima come Responsabile del Supporto Tecnico per poi assumere dal 2008 la carica di Direttore Tecnico. Giornalista iscritto all’albo dei pubblicisti, dal 1992 pubblica regolarmente articoli su riviste di informatica e siti web di primo piano. E' stimato da colleghi e clienti per la schiettezza e onestà intellettuale. Passioni: viaggi, lettura, cinema, Formula 1, sviluppo personale, investimenti immobiliari, forex trading. Claudio è anche su LinkedIn e Facebook.
Commenti (4)
guest
4 Commenti
Più vecchio
Più recente Più votato
Inline Feedbacks
Guarda tutti i commenti
difficile 73
difficile 73
7 anni fa

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?

difficile 73
difficile 73
8 anni fa

A me non funziona continua a dire che il file non può essere cancellato perchè il disco è pieno

Furio Borsi
Furio Borsi
8 anni fa

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.

difficile 73
difficile 73
8 anni fa

Fatto con il percorso assoluto funziona. Grazie