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.
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

Plex può condividere una GPU con un altro container Docker?
Plex e un altro container possono spesso accedere alla stessa GPU, ma è necessario testare il supporto dei driver, la mappatura dei dispositivi, il...

Come capire se un errore di Plex proviene dal client o dal server
Riproduci lo stesso elemento su un altro client, confronta il percorso della sessione, quindi raccogli le prove dal server solo dopo che l’ambito ti...

Come configurare la cache di Plex e l’archiviazione temporanea per la transcodifica
Proteggi lo stato persistente di Plex collocando i file temporanei di transcodifica su un’unità locale adatta, quindi verifica la pulizia, lo spazio libero e...

