Gibt es eine Möglichkeit, den Fortschritt einer BTRFS-Neuverteilung zu überwachen?

13

Ich ersetze eine ausgefallene Festplatte in einem gespiegelten BTRFS.

btrfs device delete missing /[mountpoint]dauert sehr lange, daher gehe ich davon aus, dass die Daten tatsächlich auf das Ersatzlaufwerk übertragen werden.

Gibt es eine Möglichkeit, den Fortschritt einer solchen Operation zu überwachen?

Ich erwarte nicht unbedingt eine hübsch aussehende Benutzeroberfläche oder sogar einen Prozentzähler. und ich bin bereit, ein paar Zeilen Shell-Skript zu schreiben, wenn dies erforderlich ist, aber ich weiß nicht einmal, wo ich anfangen soll, nach relevanten Daten zu suchen. btrfs filesystem showBeispiel: Hängt nur und wartet vermutlich auf den Abschluss des Balance-Vorgangs, bevor Informationen zu den gespiegelten fs angezeigt werden.

user50849
quelle

Antworten:

25
btrfs balance status /mountpoint

man 8 btrfs

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

        Options

        -v   be verbose
llua
quelle
4
Vielen Dank, es stellt sich heraus, dass in meinem Fall btrfs die aktuelle Operation nicht als Saldo betrachtet, da dies nichts zurückgibt, aber ich sehe, dass es auch einen "Ersetzungsstatus" gibt, den ich wahrscheinlich hätte verwenden können, wenn ich den Ersetzungsbefehl verwendet hätte . Trotzdem gute Antwort.
user50849
Der Balance - Status sollte ungefähr so aussehen: Balance on '/volume1' is running 28 out of about 171 chunks balanced (1156 considered), 84% left. Ungewöhnlich zählt der Prozentsatz herunter.
Mwfearnley
7
sudo btrfs fi show

dies wird ungefähr so ​​aussehen:

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

Und wenn Sie bemerken, dass die Geräte-ID Nr. 4 etwas anders aussieht als die anderen. Wenn Sie "btrfs device delete missing / mntpoint" ausführen, wird die Wiederherstellung der RAID-Metadaten gestartet, die zur Freigabe dieses "fehlenden" Laufwerks erforderlich sind.

wenn du sowas machst

"watch -n 10 sudo btrfs fi show"

Dann können Sie sehen, dass der Speicherplatz auf dem fehlerhaften "fehlenden" Gerät allmählich kleiner wird, bis der Vorgang abgeschlossen ist und es aus der Datei entfernt wird.

As
quelle
4

Es kann einige Zeit dauern, bis BTRFS Daten gelesen oder neu angeordnet hat, bevor Daten auf das Laufwerk geschrieben werden, auf das sie voraussichtlich geschrieben werden.

Sie können sehen, wie viel CPU-Zeit für BTRFS-Vorgänge aufgewendet wird, einschließlich Neuverteilung, Hinzufügen, Löschen, Konvertieren usw.:

ps -ef | grep btrfs

Installieren Sie sysstat und führen Sie Folgendes aus, um festzustellen, wie viele Festplatten ausgelastet sind:

iostat

Fügen Sie einige Optionen hinzu, damit iostat Statistiken in Megabyte anzeigt und alle 30 Sekunden aktualisiert:

iostat -m -d 30

Beispielausgabe von Scrub, sodass während dieses Intervalls keine Schreibvorgänge ausgeführt werden:

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

Installieren Sie munin und führen Sie es aus, um historische Diagramme der Laufwerksaktivität und viele andere Informationen anzuzeigen. https://www.digitalocean.com/community/tutorials/installationsanleitung-des-munin-monitoring-tools-auf-ubuntu-14-04

Charles Young
quelle
1

Ich habe mich auch gefragt, wann ein lang anhaltender Löschvorgang abgeschlossen sein wird, also habe ich mir dieses kleine Stück Shell-Code ausgedacht:

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

Dies gibt Ihnen einen schönen Fortschrittsbalken wie diesen:

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

Die allgemeine Idee ist, pvden Fortschritt anzuzeigen. Da dieser Befehl nur das Überwachen von Bytes erlaubt, die durch eine Pipe fließen dd, generieren wir eine angemessene Anzahl von Nullen und leiten sie weiter pv.

Der Vorteil dieser Methode ist, dass Sie einen schönen Fortschrittsbalken erhalten. Da jedoch btrfsDaten anscheinend immer jeweils um ein GB gelöscht werden, dauert es einige Zeit, bis ein neuer Unterschied in der Bytegröße festgestellt werden kann.

Um dieses Problem zu beheben, -awird das Flag zu den Standard-Flags von hinzugefügt pv, damit eine durchschnittliche Übertragungsrate angezeigt wird (da die normale aktuelle Übertragungsrate die meiste Zeit 0 ist).

Mir ist klar, dass dies nicht die beste Lösung ist, aber die beste, die ich finden konnte. Wenn jemand Verbesserungsvorschläge hat, lass es mich wissen! :)

Erki der Loony
quelle