Существует ли способ контролировать прогресс восстановления равновесия btrfs?

Это - довольно стандартная причина изменить оболочку. Обычно /bin/false или другие оболочки как /bin/cat используются.

Обычно Вы не можете сбежать /bin/cat и это маловероятно это cat имеет ошибку безопасности, но другие методы могут все еще работать, как создание DoS или обход правил Брандмауэра.

Другой, вероятно, более серьезная проблема состоит в том, если Вы используете internal-sftp модуль для sftp. Это позволило бы пользователям с /bin/cat как окружают для использования sftp получить доступ к Вашей файловой системе и просмотреть ее содержание.

Для Вашего определенного примера использования я рекомендовал бы использовать туннели или vpns вместо того, чтобы предоставить ssh доступ Вашим клиентам.

13
26.01.2014, 16:21
4 ответа
btrfs balance status /mountpoint

man 8 btrfs

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

        Options

        -v   be verbose
25
27.01.2020, 19:52
  • 1
    Спасибо, оказывается, что в моем случае btrfs, кажется, не считает текущую операцию балансом, поскольку это ничего не возвращает, но я вижу, что существует также "состояние замены", которое я, возможно, вероятно, использовал, имел, я использовал команду замены. Хороший ответ независимо. –  user50849 26.01.2014, 17:28
  • 2
    Состояние баланса должно посмотреть что-то как: Balance on '/volume1' is running 28 out of about 171 chunks balanced (1156 considered), 84% left. Необычно, процент считает в обратном порядке. –  mwfearnley 30.04.2018, 12:41
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 device delete missing / mntpoint», он начнет восстанавливать мета / данные рейда, необходимые для освобождения этого «отсутствующего» диска.

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

"watch -n 10 sudo btrfs fi show"

, то вы увидите, что пространство на "пропавшем" устройстве, которое нарушает, постепенно становится все меньше и меньше, пока операция не завершится и оно не будет удалено из fi.

7
27.01.2020, 19:52

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

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

ps -ef | grep btrfs

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

iostat

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

iostat -m -d 30

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

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

4
27.01.2020, 19:52

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

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всегда удаляет данные по одному ГБ за раз, требуется некоторое время, прежде чем можно будет наблюдать новую разницу в размерах байтов.

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

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

1
27.01.2020, 19:52

Теги

Похожие вопросы