Назад | Перейти на главную страницу

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

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

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

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

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

./quota.sh path

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

./quota.sh path -a

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

Сценарий:


#! /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

Варианты использования -r и -e:

btrfs qgroup show -pcre /path

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

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

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

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