Bug bilancio BTRFS nel kernel 5.Top 10.X

Bug bilancio BTRFS nel kernel 5.Top 10.X
C'è un bug nel kernel 5.14.x che fa sì che un filesystem BTRFS si svolga di sola lettura quando si converte il profilo dei metadati da separare A dup. Il filesystem va in uno stato di sola lettura. Risolvere questo problema richiede una soluzione non convenzionale.

Sui profili BTRFS

Una delle grandi caratteristiche dei BTRF è la capacità di utilizzare i diversi profili RAID. Poiché BTRFS memorizza separatamente i dati e i metadati, è possibile svuotare i dati attraverso i dischi come RAID0 e rispecchiare tutti i metadati come RAID1. Questa ridondanza nei metadati impiega poco spazio. E questo è raccomandato nelle configurazioni BTRFS RAID0.

È sempre stato suggerito di duplicare i metadati, anche su un singolo disco, poiché perdere i metadati significa anche perdere i dati.

BTRFS è in grado di modificare un profilo RAID su un sistema live, convertendo i dati e i metadati per fornire (o rimuovere) la ridondanza. Questo si verifica con a bilancia. Un saldo BTRFS riscrive tutti i blocchi del filesystem e si regola per abbinare i nuovi profili come fa.

Il bug

Ho tentato di cambiare il profilo dei metadati sul mio singolo disco da separare A dup per la ridondanza.

$ sudo btrfs saldo start -mconvert = dup /mnt

Il filesystem è andato immediatamente in uno stato di sola lettura. Il sistema è andato giù. Quando è stato riavviato, non sono riuscito a superare gli initramf di recupero. Nessun dato potrebbe essere scritto sul disco.

Quando un'operazione di bilanciamento viene interrotta sul filesystem BTRFS, riprende automaticamente la prossima volta che il filesystem è montato. Questo può essere di solito fermato con:

$ sudo monte -o skip_balance, rw /dev /sdx /mnt

Quindi, annulla se necessario utilizzando il seguente comando:

$ sudo btrfs saldo annulla /mnt

Tuttavia, il bug non solo ha causato il blocco del saldo, ma le opzioni di montaggio per impedire che continuano sono state ignorate. Ogni volta che il filesystem è montato, il saldo tenta di riprendere. Non è riuscito e il filesystem ha continuato a leggere. Se lo incontri, devi avviare qualsiasi distro usando un kernel più vecchio. Nel mio caso, era arco con 4.18.

Montare il filesystem con il vecchio Kenel:

$ sudo monte -o skip_balance, rw /dev /sdx /mnt

Annulla il saldo:

$ sudo btrfs saldo annulla /mnt

Eseguire di nuovo l'equilibrio:

$ sudo btrfs saldo start -mconvert = dup /mnt

Una volta completato il saldo, è possibile avviarsi in sicurezza in un kernel più recente, ora con metadati duplicati nel filesystem. Controlla i profili utilizzati dal filesystem. Vedrai di avere due copie dei metadati del filesytem e solo una copia dei dati:

$ sudo btrfs fi utilizzo

Conclusione

BTRFS è un filesystem sorprendente in grado di fare molte opzioni avanzate. Tuttavia, quando si utilizza BTRFS, dovresti avere backup di lavoro e un kernel avviabile da una distro LTS per il salvataggio del sistema. Anche se un saldo può essere eseguito su un filesystem di root montato, non è sempre consigliato di farlo. Ci sono ancora molti bug nel filesystem. Dovresti essere preparato per un salvataggio del filesystem quando il modulo BTRFS non è stato completamente testato contro i kernel a bordo sanguinante.