Avevo bisogno di eseguire btrfs balance
sul mio filesystem a dispositivo singolo perché stavo ottenendo ENOSPC
anche se cera davvero spazio libero.
Perché è necessario eseguirlo?
Cosa fa effettivamente la bilancia?
Risposta
A differenza della maggior parte dei filesystem convenzionali, BTRFS utilizza un allocatore a due fasi. La prima fase alloca ampie regioni di spazio note come blocchi per tipi specifici di dati , quindi la seconda fase alloca i blocchi come un normale filesystem allinterno di queste regioni più grandi. Ci sono tre diversi tipi di blocchi:
-
Pezzi di dati: questi memorizzano dati di file regolari.
-
Porzioni di metadati: memorizzano i metadati sui file, inclusi tra laltro timestamp, checksum, nomi di file, proprietà, autorizzazioni e attributi estesi.
-
Chunk di sistema: si tratta di un tipo speciale di chunk che memorizza i dati su dove si trovano tutti gli altri chunk.
Solo il tipo di dati per cui è allocato il blocco può essere memorizzato in quel blocco. Il caso più comune in questi giorni in cui si ottiene un errore -ENOSPC su BTRFS è che il filesystem ha esaurito lo spazio per i dati o i metadati nei blocchi esistenti e non è possibile allocare un nuovo blocco. Puoi verificare che sia così facendo eseguendo btrfs fi df
sul filesystem che ha generato lerrore. Se la riga Dati o Metadati mostra un valore Totale che è significativamente diverso dal valore Usato, probabilmente questa è la causa.
Ciò che btrfs balance
fa è restituire le cose tramite lallocatore, il che si traduce in un utilizzo dello spazio nei blocchi che vengono compattati. Ad esempio, se hai due blocchi di metadati che sono entrambi Pieni al 40%, un saldo li farà diventare un blocco di metadati pieno all80%. Compattando lutilizzo dello spazio in questo modo, loperazione di bilanciamento è quindi in grado di eliminare i blocchi ora vuoti e quindi libera spazio per lallocazione di nuovi blocchi. Se esegui di nuovo btrfs fi df
dopo aver eseguito il saldo, dovresti vedere che i valori Totale e Utilizzato sono molto più vicini tra loro, poiché il saldo ha eliminato i blocchi che “non erano più necessari.