Я не могу определить, как получить лимит квоты, который в настоящее время установлен для подтома btrfs. Вики btrfs по квоте , похоже, этого не показывает.
Вот что я знаю:
btrfs qgroup limit 21G / path
btrfs qgroup show / path
Но как проверить уже установленный предел?
Как мы говорим, btrfs в этом отношении нарушена намеренно.
В настоящее время в btrfs-progs нет функции, которая показывала бы, у какого субтома какая квота. Вы должны написать сценарий (и многие из тех, кто попался на btrfs), чтобы проанализировать номера абстрактных групп квот, которые он выводит, и перечислить подтомы внутри этих групп квот под ними. Его можно было бы добавить, но разработчики btrfs неукоснительно отказываются это делать.
Хуже того, нет не только способа показать, какая часть квоты в данный момент израсходована субтомом. Вот почему df
показывает только общее свободное пространство.
Это невозможно сделать вообще из-за того, как btrfs спроектирован в самом его ядре. Это связано с тем, что вложенные тома работают как снимки. То есть, чтобы узнать, сколько данных находится в подобтоме, вам нужно будет просканировать всю файловую систему, найти все файлы, связанные с этим подтомом / снимком, и сложить их. Как и команда du
. На это уходит много времени.
Я понятия не имею, как тогда btrfs узнает, что квота вообще заполнена… Канал IRC не смог дать мне никакого ответа на этот вопрос. (Они были слишком заняты защитой своего хрупкого чрезмерно раздутого эго.)
Разумно было бы менять счетчик субобъема каждый раз, когда данные добавляются или удаляются. Какого рода должно быть то, как btrfs знает, что он заполнен. По крайней мере, я не знаю другого пути. Но почему они тогда решили сохранить эту доступную информацию в основном в качестве государственной тайны, охраняемой военными, я не знаю ...
Если бы у zfs не было таких безумных требований к оперативной памяти (1 ГБ на ТБ ... не вариант, например, для одного -платный компьютер ARM) и риск потери данных из-за несвоевременной записи данных из-за того, что он разработан для серверов с защитой от сбоев, я бы рекомендовал сбросить btrfs в его пользу.
Я создал простой скрипт, который покажет предел квоты для каждого подтома в указанном пути, а также используемое пространство. Синтаксис довольно прост:
./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