C'è un modo per monitorare i progressi di un riequilibrio btrfs?


13

Sto sostituendo un disco rigido guasto in un btrfs con mirroring.

btrfs device delete missing /[mountpoint]sta impiegando molto tempo, quindi presumo che in realtà riequilibri i dati attraverso l'unità sostitutiva.

Esiste un modo per monitorare l'avanzamento di tale operazione?

Non mi aspetto necessariamente una GUI piuttosto carina, o nemmeno un contatore%; e sono disposto a scrivere un paio di righe di script di shell se è necessario, ma non so nemmeno da dove iniziare a cercare dati pertinenti. btrfs filesystem showad esempio si blocca, presumibilmente in attesa del completamento dell'operazione di bilanciamento prima che visualizzi qualsiasi informazione sulla fs speculare.

Risposte:


25
btrfs balance status /mountpoint

man 8 btrfs

 [filesystem] balance status [-v] <path>
        Show status of running or paused balance.

        Options

        -v   be verbose

4
Grazie, si scopre che nel mio caso btrfs non sembra considerare l'operazione corrente come un saldo, in quanto ciò non restituisce nulla, ma vedo che esiste anche uno "stato di sostituzione", che probabilmente avrei potuto usare, se avessi usato il comando di sostituzione . Buona risposta a prescindere.
user50849

Lo stato di equilibrio dovrebbe essere simile: Balance on '/volume1' is running 28 out of about 171 chunks balanced (1156 considered), 84% left. Insolitamente, la percentuale conta alla rovescia.
mwfearnley,

7
sudo btrfs fi show

questo produrrà qualcosa del genere:

Label: none  uuid: 2c97e7cd-06d4-4df0-b1bc-651397edf74c
        Total devices 16 FS bytes used 5.36TiB
        devid    1 size 931.51GiB used 770.48GiB path /dev/sdc
        devid    2 size 931.51GiB used 770.48GiB path /dev/sdg
        devid    3 size 931.51GiB used 770.48GiB path /dev/sdj
        devid    4 size 0.00 used 10.02GiB path
        devid    5 size 931.51GiB used 770.48GiB path /dev/sdh
        devid    6 size 931.51GiB used 770.48GiB path /dev/sdi
        devid    7 size 931.51GiB used 770.48GiB path /dev/sdd
        devid    8 size 931.51GiB used 770.48GiB path /dev/sdo
        devid    9 size 465.76GiB used 384.31GiB path /dev/sdn
        devid    10 size 931.51GiB used 770.48GiB path /dev/sdp
        devid    11 size 931.51GiB used 770.48GiB path /dev/sdr
        devid    12 size 931.51GiB used 770.48GiB path /dev/sdm
        devid    13 size 931.51GiB used 769.48GiB path /dev/sdq
        devid    14 size 931.51GiB used 770.48GiB path /dev/sdl
        devid    15 size 931.51GiB used 770.48GiB path /dev/sde
        devid    16 size 3.64TiB used 587.16GiB path /dev/sdf

Btrfs v3.12

E se noti che l'ID del dispositivo n. 4 sembra un po 'diverso dal resto. quando fai "dispositivo btrfs elimina missing / mntpoint", inizierà a rigenerare i meta / dati del raid necessari per liberare quell'unità "mancante".

se fai qualcosa del genere

"watch -n 10 sudo btrfs fi show"

allora puoi vedere lo spazio sul dispositivo "mancante" offensivo che diventa gradualmente sempre più piccolo fino al completamento dell'operazione e verrà rimosso dal fi.


4

BTRFS potrebbe impiegare un po 'di tempo a leggere o riorganizzare i dati prima di scrivere i dati sull'unità su cui ci si aspetta che scriva.

Puoi vedere quanto tempo della CPU è dedicato alle operazioni BTRFS tra cui riequilibrare, aggiungere, eliminare, convertire, ecc:

ps -ef | grep btrfs

Per vedere quanto è impegnata ogni unità, installa sysstat ed esegui:

iostat

Aggiungi alcune opzioni per fare in modo che iostat mostri le statistiche in megabyte e aggiorni ogni 30 secondi:

iostat -m -d 30

Output di esempio da scrub, quindi nessuna scrittura durante questo intervallo:

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda             700.30       170.10         0.00       6804          0
sdb               0.78         0.00         0.01          0          0
sdc             520.20       127.98         0.00       5119          0
sdd             405.72        92.02         0.00       3680          0
sde             630.05       153.66         0.00       6146          0
sdf             627.43       153.60         0.00       6144          0

Installa ed esegui munin per vedere i grafici storici dell'attività dell'unità e molte altre informazioni. https://www.digitalocean.com/community/tutorials/how-to-install-the-munin-monitoring-tool-on-ubuntu-14-04


1

Mi chiedevo anche quando sarebbe terminata una cancellazione di lunga durata, quindi ho pensato a questo piccolo pezzo di codice shell:

get_bytes() {
  btrfs device usage --raw /mnt/data | egrep -- '-[0-9]+' | sed -E 's/[^0-9]+([0-9]+)/\1/'
}

prev=$(get_bytes)

while [ 1 ]; do
  current=$(get_bytes)
  diff=$((current-prev))
  if [ "$diff" -gt 0 ]; then
    dd if=/dev/zero iflag=count_bytes count="$diff" 2>/dev/null
  fi
  prev="$current"
  sleep 1
done | pv -petraW -s $(get_bytes) >/dev/null

Questo ti darà una bella barra di avanzamento come questa:

0:13:54 [0,00 B/s] [16,0MiB/s] [>                             ]  1% ETA 19:23:19

L'idea generale è quella di utilizzare pvper visualizzare i progressi. Dal momento che quel comando consente solo di monitorare i byte che fluiscono attraverso una pipe, usiamo ddper generare una quantità appropriata di zeri e inoltrarli pv.

Il vantaggio di questo metodo è che ottieni una bella barra di avanzamento. Tuttavia, poiché sembra btrfseliminare sempre i dati un GB alla volta, ci vuole del tempo prima che si possa osservare una nuova differenza nelle dimensioni dei byte.

Per risolvere questo problema, il flag -aviene aggiunto ai flag predefiniti di pvper visualizzare una velocità di trasmissione media (poiché la velocità di trasmissione corrente normale sarà 0 il più delle volte).

Mi rendo conto che questa non è la soluzione migliore ma la migliore che ho potuto inventare. Se qualcuno ha idee per miglioramenti, per favore fatemelo sapere! :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.