Как отобразить ограничение квоты на подобтоме btrfs?

Я не могу определить, как получить лимит квоты, который в настоящее время установлен для подтома btrfs. Вики btrfs по квоте , похоже, этого не показывает.

Вот что я знаю:

  • установить квоту: btrfs qgroup limit 21G / path
  • check используемое пространство: btrfs qgroup show / path

Но как проверить уже установленный предел?

4
задан 17 August 2016 в 00:31
3 ответа

Используйте опции -r и -e:

btrfs qgroup show -pcre /path
3
ответ дан 3 December 2019 в 02:49

Как мы говорим, btrfs в этом отношении нарушена намеренно.

В настоящее время в btrfs-progs нет функции, которая показывала бы, у какого субтома какая квота. Вы должны написать сценарий (и многие из тех, кто попался на btrfs), чтобы проанализировать номера абстрактных групп квот, которые он выводит, и перечислить подтомы внутри этих групп квот под ними. Его можно было бы добавить, но разработчики btrfs неукоснительно отказываются это делать.

Хуже того, нет не только способа показать, какая часть квоты в данный момент израсходована субтомом. Вот почему df показывает только общее свободное пространство. Это невозможно сделать вообще из-за того, как btrfs спроектирован в самом его ядре. Это связано с тем, что вложенные тома работают как снимки. То есть, чтобы узнать, сколько данных находится в подобтоме, вам нужно будет просканировать всю файловую систему, найти все файлы, связанные с этим подтомом / снимком, и сложить их. Как и команда du . На это уходит много времени. Я понятия не имею, как тогда btrfs узнает, что квота вообще заполнена… Канал IRC не смог дать мне никакого ответа на этот вопрос. (Они были слишком заняты защитой своего хрупкого чрезмерно раздутого эго.) Разумно было бы менять счетчик субобъема каждый раз, когда данные добавляются или удаляются. Какого рода должно быть то, как btrfs знает, что он заполнен. По крайней мере, я не знаю другого пути. Но почему они тогда решили сохранить эту доступную информацию в основном в качестве государственной тайны, охраняемой военными, я не знаю ...

Если бы у zfs не было таких безумных требований к оперативной памяти (1 ГБ на ТБ ... не вариант, например, для одного -платный компьютер ARM) и риск потери данных из-за несвоевременной записи данных из-за того, что он разработан для серверов с защитой от сбоев, я бы рекомендовал сбросить btrfs в его пользу.

2
ответ дан 3 December 2019 в 02:49

Я создал простой скрипт, который покажет предел квоты для каждого подтома в указанном пути, а также используемое пространство. Синтаксис довольно прост:

./quota.sh path

Чтобы распечатать используемое пространство для всех подтомов, используйте флаг -a:

./quota.sh path -a

Не забудьте добавить разрешения на выполнение для сценария.

Script:


#! /bin/sh
volumes=$(btrfs subvolume list  $1 | cut -d " " -f 9 )
snapshots=$(btrfs subvolume list -s  $1 | cut -d " " -f 14 )
regsnap=$(echo $snapshots | sed 's/ /,/g')
normalv=$(echo $volumes | sed "s/\($regsnap\)//g" )

if [ ! -z "$snapshots" ] ; then
    echo SNAPSHOTS
for p in $snapshots; do 
    quot=$(btrfs qgroup show -rF $1/$p | tail -1)
    if [ -z $2 ]; then
        (echo $quot | grep -q none) || echo $p $quot
    else
     [ "$2" == "-a" ] && echo $p $quot
    fi
done
fi

if [ ! -z "$normalv" ] ; then
    echo SUBVOLUMES
for p in $normalv; do 
    quot=$(btrfs qgroup show -rF $1/$p | tail -1)
    if [ -z $2 ]; then
        (echo $quot | grep -q none) || echo $p $quot
    else
     [ "$2" == "-a" ] && echo $p $quot
    fi
done

fi

Он будет сначала напечатайте традиционные подтомы, а ниже - тома моментальных снимков. Пример вывода:

SNAPSHOTS
apple 0/258 1.32MiB 16.00KiB 20.00MiB
SUBVOLUMES
citrus/orange 0/256 1.32MiB 16.00KiB 20.00MiB
3
ответ дан 3 December 2019 в 02:49

Теги

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