Есть ли способ контролировать прогресс перебалансировки btrfs?

13

Я заменяю неисправный жесткий диск в зеркальном btrfs.

btrfs device delete missing /[mountpoint]Это занимает очень много времени, поэтому я предполагаю, что на самом деле происходит перебалансировка данных на сменном диске.

Есть ли способ следить за ходом такой операции?

Я не обязательно ожидаю красивый графический интерфейс или даже счетчик%; и я готов написать пару строк сценария оболочки, если это необходимо, но я даже не знаю, с чего начать поиск соответствующих данных. btrfs filesystem showнапример, просто зависает, по-видимому, ожидая завершения операции балансировки, прежде чем она отобразит какую-либо информацию о зеркальных фс.

user50849
источник

Ответы:

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
источник
4
Спасибо, получается, что в моем случае btrfs не считает текущую операцию балансом, так как это ничего не возвращает, но я вижу, что есть также «состояние замены», которое я мог бы использовать, если бы использовал команду replace , Хороший ответ в любом случае.
user50849
Статус баланс должен выглядеть примерно так: Balance on '/volume1' is running 28 out of about 171 chunks balanced (1156 considered), 84% left. Необычно, процент отсчитывается.
mwfearnley
7
sudo btrfs fi show

это выведет что-то вроде этого:

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

И если вы заметите, что идентификатор устройства № 4 выглядит немного иначе, чем остальные. когда вы выполняете «btrfs устройство удалить отсутствующее / mntpoint», тогда оно начнет восстанавливать метаданные / данные raid, необходимые для освобождения этого «отсутствующего» диска.

если вы делаете что-то вроде

"watch -n 10 sudo btrfs fi show"

затем вы можете видеть, что пространство на «недостающем» устройстве, которое нарушает работу, постепенно становится все меньше и меньше, пока операция не будет завершена, и она будет удалена из файла.

туз
источник
4

BTRFS может занять некоторое время для чтения или перестановки данных перед записью данных на диск, на который вы ожидаете их записать.

Вы можете увидеть, сколько процессорного времени отводится операциям BTRFS, включая перебалансировку, добавление, удаление, преобразование и т. Д .:

ps -ef | grep btrfs

Чтобы увидеть, насколько занят каждый диск, установите sysstat и запустите:

iostat

Добавьте некоторые параметры, чтобы iostat отображал статистику в мегабайтах и ​​обновлялся каждые 30 секунд:

iostat -m -d 30

Пример вывода из скраба, поэтому нет записи в течение этого интервала:

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

Установите и запустите munin, чтобы увидеть исторические графики активности дисков и много другой информации. https://www.digitalocean.com/community/tutorials/how-to-install-the-munin-monitoring-tool-on-ubuntu-14-04

Чарльз Янг
источник
1

Мне также было интересно, когда закончится длительное удаление, поэтому я придумал этот небольшой кусочек шелл-кода:

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

Это даст вам хороший индикатор, например:

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

Общая идея заключается в использовании pvдля отображения прогресса. Поскольку эта команда позволяет отслеживать только байты, проходящие через канал, который мы используем, ddчтобы сгенерировать соответствующее количество нулей и направить их в канал pv.

Преимущество этого метода в том, что вы получаете хороший индикатор выполнения. Однако, поскольку кажется, что btrfsданные всегда удаляются по одному ГБ за раз, требуется некоторое время, пока не появится новая разница в размерах байтов.

Чтобы решить эту проблему, флаг -aдобавляется к флагам по умолчанию, pvчтобы он отображал среднюю скорость передачи (поскольку нормальная текущая скорость передачи в большинстве случаев будет равна 0).

Я понимаю, что это не лучшее решение, но лучшее, что я мог придумать. Если у кого-то есть идеи по улучшению, пожалуйста, дайте мне знать! :)

Эрки дер Луни
источник