Perché il bilanciamento Btrfs si blocca dopo aver spostato i dati su un’unità più grande?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Un bilanciamento Btrfs può sembrare bloccato dopo l'aggiunta di un'unità più grande, perché la rilocazione richiede ancora spazio libero per i chunk di lavoro e potrebbe spostare l'intero filesystem.

Sostituire o copiare i dati su un dispositivo più grande non rende automaticamente compatti, distribuiti uniformemente o idonei alla rilocazione tutti i gruppi di blocchi Btrfs. Un bilanciamento opera a livello di gruppo di blocchi, crea uno spazio di lavoro temporaneo, aggiorna i metadati e può essere limitato dal dispositivo più lento, dagli snapshot, dai checksum o da un'altra operazione esclusiva. Il primo compito consiste nel distinguere una rilocazione realmente bloccata da un bilanciamento completo lento ma ancora in corso.

Verificare se il bilanciamento è in esecuzione, in pausa o in attesa

Controlla lo stato del bilanciamento, il numero di chunk elaborati, il log del kernel, il throughput dei dischi e la latenza di ogni dispositivo. Annota se il comando è in esecuzione in primo piano, in background, in pausa, annullato o ripreso automaticamente dopo un riavvio.

Un bilanciamento può trascorrere molto tempo rilocando un gruppo di blocchi fortemente utilizzato prima che il contatore visibile cambi. La guida Btrfs di ArchWiki mostra come usare lo stato del bilanciamento e l'utilizzo del filesystem per distinguere un'attività ancora in corso da un comando già arrestato.

Se non c'è attività I/O, lo stato non cambia e il log del kernel segnala un errore, consideralo arrestato anziché lento. Conserva il primo messaggio di errore prima di riavviare il bilanciamento con filtri diversi.

Verificare che il dispositivo più grande e il filesystem siano stati ridimensionati

Confronta la dimensione fisica del dispositivo, la dimensione della partizione, la dimensione del dispositivo Btrfs e l'allocazione del filesystem. Un disco sostitutivo più grande potrebbe continuare a esporre il vecchio limite della partizione o la vecchia dimensione del dispositivo Btrfs.

Conferma ogni livello nell'ordine seguente: capacità hardware, tabella delle partizioni, dispositivo a blocchi, inventario dei dispositivi Btrfs e allocazione del filesystem. SUSE documenta che il dispositivo deve essere ingrandito prima del filesystem, quindi un bilanciamento non può utilizzare una capacità che Btrfs non rileva ancora.

L'articolo di ZimaSpace sulla capacità che non aumenta dopo la sostituzione di un'unità fornisce il controllo a più livelli da eseguire prima di attribuire il problema a una rilocazione.

Distinguere i byte liberi dallo spazio libero per i chunk di lavoro

Confronta la dimensione totale del dispositivo con la quantità già assegnata ai gruppi di blocchi Btrfs. Un filesystem può mostrare byte disponibili agli utenti, ma non avere una regione completamente non allocata abbastanza grande da creare il gruppo di blocchi temporaneo necessario per la rilocazione.

La documentazione sul bilanciamento Btrfs spiega che la rilocazione richiede uno spazio di lavoro per i gruppi di blocchi completamente inutilizzato; si tratta di qualcosa di diverso dal normale spazio libero a livello di file e ciò può produrre ENOSPC durante il bilanciamento.

Se lo spazio di lavoro è limitato, recupera innanzitutto i gruppi di blocchi completamente inutilizzati con un filtro ristretto sull'utilizzo, invece di avviare un altro bilanciamento completo. Non eliminare gli snapshot indiscriminatamente finché non avrai misurato il loro contributo all'allocazione dei chunk.

-15% OFF

Verificare se è stato avviato un bilanciamento completo senza filtri

Esamina il comando originale. Un bilanciamento senza filtri per dati o metadati tenta di rilocare l'intero filesystem, anche quando l'obiettivo reale è soltanto compattare i chunk utilizzati poco o spostare le allocazioni da un determinato dispositivo.

Un bilanciamento completo può richiedere molte ore o giorni perché ogni gruppo di blocchi selezionato viene riscritto. Il manuale Linux di btrfs-balance avverte che l'esecuzione senza filtri sposta dati e metadati nell'intero filesystem e aggiorna tutti i puntatori ai blocchi.

Usa l'output dello stato e la cronologia precedente della shell per identificare i filtri attivi. Non annullare e riavviare ripetutamente il processo, perché i bilanciamenti interrotti possono lasciare gruppi di blocchi parzialmente riempiti che continuano a consumare spazio di lavoro.

Controllare i dispositivi lenti, gli errori e le operazioni esclusive concorrenti

Controlla i dati SMART, gli errori di trasporto, i ripristini del collegamento, i timeout USB o SATA e la latenza di ogni dispositivo. La velocità del bilanciamento è limitata dalle letture dalle posizioni precedenti, dalle scritture nelle nuove posizioni, dalla verifica dei checksum e dagli aggiornamenti dei metadati.

Controlla anche scrub, aggiunta o rimozione di dispositivi, ridimensionamento del filesystem, eliminazione di snapshot, invio o ricezione e altre attività di archiviazione. La guida all'amministrazione Btrfs di Red Hat descrive le modifiche ai dispositivi e il bilanciamento come operazioni di rilocazione, quindi la manutenzione sovrapposta può creare una forte contesa anche quando nessun disco è guasto.

Se un dispositivo mostra ripristini ripetuti o una latenza estrema, metti in pausa il bilanciamento e diagnostica quel percorso prima di forzare ulteriori rilocazioni. Proseguire con un dispositivo instabile può trasformare un problema di prestazioni in un problema di ripristino.

Usare filtri e limiti ristretti per un riavvio controllato

Dopo aver conservato lo stato attuale, inizia con il filtro meno rischioso che interessi i gruppi di blocchi vuoti o utilizzati poco. Limita il numero di chunk per ogni esecuzione, così potrai osservare ogni risultato prima di ampliare l'ambito.

Aumenta gradualmente la soglia di utilizzo e tratta separatamente dati e metadati. La rilocazione dei metadati può generare numerosi aggiornamenti aggiuntivi e non deve essere compattata in modo aggressivo solo perché l'utilizzo medio appare basso.

Metti in pausa, riprendi o annulla l'operazione tramite i controlli di bilanciamento supportati, anziché terminare il processo. Verifica che il gruppo di blocchi corrente venga completato e che lo stato salvato del bilanciamento corrisponda all'azione successiva.

Verificare la distribuzione e la capacità dopo il bilanciamento

Confronta l'allocazione per dispositivo, i profili di dati e metadati, lo spazio di lavoro non allocato, l'utilizzo del filesystem e il numero di chunk rilocati prima e dopo il bilanciamento controllato.

Un risultato positivo non implica necessariamente un utilizzo in byte perfettamente uniforme su ogni disco. La panoramica del kernel Linux elenca il supporto integrato per più dispositivi e il ridimensionamento online, quindi il test finale dovrebbe concentrarsi su profili validi, allocazione utilizzabile, dispositivi integri e spazio di lavoro sufficiente per le scritture future.

Il problema è risolto quando il bilanciamento viene completato o raggiunge l'ambito filtrato previsto, il dispositivo più grande riceve nuove allocazioni, lo spazio di lavoro libero per i chunk viene ripristinato e le normali scritture, gli snapshot, lo scrub e il riavvio funzionano senza che il bilanciamento riparta inaspettatamente.

Supporto e consigli

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.