Установка общесистемной квоты на ZFS
Обычно рекомендуется не заполнять том ZFS больше 70-80%, чтобы предотвратить фрагментацию. Я, однако, обнаружил, что в прошлом я вышел за пределы этого (синдром "Мне нужно чуть больше, я проясню это позже"). Вскоре я перенесу некоторые из своих томов на новые, чтобы они снова стали "чистыми" и хотели бы установить ограничение на указанные тома. По сути, квота для всех пользователей, чтобы я не смог преодолеть этот барьер.
Итак, это так же просто, как просто установить следующее (в данном случае предполагается диск объемом 3 ТБ)?
zfs set quota=2000G storage/data
Если да, то можно ли здесь использовать процент?
Наконец, учитывая большие объемы, рекомендация все еще составляет 70-80%, или следует рассчитать более разумную сумму, умножив наибольший возможный файл, который будет сохранен / скопирован на него, на количество х (очень похоже на то, что мониторинг не будет выбрасываться критическое предупреждение на 90% объема 10EB, но будет рассчитывать средний рост данных и устанавливать что-то более реалистичное)?
Я думаю, что я могу найти первые вопросы с некоторым поиском, но последний вопрос нацелен на экспертов.
1 ответ
Я не уверен, почему, но мой первый инстинкт был использовать оговорку, а не квоту. Я подумал (ошибочно), что, возможно, суперпользователь сможет обойти квоту, но быстрый тест показал, что моя догадка была неверной.
Тем не менее, просто ради назидания, рассмотрите возможность использования резервирования вместо квоты:
zfs create \
-o reservation=500G \
-o canmount=off \
-o mountpoint=none storage/unusable
Помните, что квоты и резервирование используют дополнительные числа. В вашем примере ваш размер в 2000 ГБ - это объем используемого пространства, которое вы хотите иметь. В приведенном выше примере резервирования 500 ГБ - это объем неиспользуемого пространства, которое будет удержано из общего пространства пула. Отрегулируйте по вкусу.
Различия небольшие, поэтому я предлагаю это просто как альтернативное решение, а не как "лучший способ сделать это". Однако есть одно небольшое преимущество, которое может окупиться лишь в будущем.
С квотой вы никогда не сможете использовать это зарезервированное пространство, даже в качестве суперпользователя. Но с оговоркой суперпользователь может получить доступ к этому пространству:
zfs set canmount=noauto,mountpoint=/root/temporary storage/unusable
zfs mount /root/temporary
и иметь экстренный доступ к этой в противном случае непригодной части бассейна. С квотой я не знаю, каким образом даже суперпользователь может переопределить ограничение хранилища.
РЕДАКТИРОВАТЬ:
Чтобы проиллюстрировать, что резервирование делает с пулом, вот небольшой пул виртуальных дисков 4G с резервированием 1G:
# zfs list -o name,used,avail,reservation,refer,mountpoint -r mypool
NAME USED AVAIL RESERV REFER MOUNTPOINT
mypool 1.00G 2.62G none 88K /mypool
mypool/unusable 88K 3.62G 1G 88K none
mypool/usable 88K 2.62G none 88K /mypool/usable
# zpool list mypool
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
mypool 3.75G 744K 3.75G - - 0% 0% 1.00x ONLINE -