Btrfs+LXC: есть ли способ показать хотя бы приблизительную оценку свободного места для квотируемого subvol, размещающего контейнер LXC?

Btrfs+LXC: есть ли способ показать хотя бы приблизительную оценку свободного места для квотируемого subvol, размещающего контейнер LXC?

Я экспериментирую с LXC, используя Btrfs в качестве резервного хранилища. Btrfs позволяет легко делать снимки/дедупликацию и идеально подходит для запуска нескольких «псевдо-ВМ».

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

Приложение имеет функцию проверки на отказоустойчивость — когда оно обнаруживает, что в файловой системе, в которую оно записывает, свободного места на диске меньше определенного объема (например, 512 МБ), оно начинает очищать старые журналы, чтобы освободить место для новых.

Проблема в том, что даже при применении квоты корневая файловая система LXC по-прежнему сообщает полный размер файловой системы Btrfs хоста.

Пример: если моя файловая система Btrfs составляет 250 ГБ, и я создаю контейнер LXC с помощью параметров -B btrfsи -s, теперь у меня есть подтом в файловой системе Btrfs, представляющий корень этого нового контейнера. Затем я хочу ограничить пространство, занимаемое контейнером, поэтому я применяю к контейнеру ограничение qgroup в 32 ГБ. Однако команда dfпри выполнении в контейнере LXC по-прежнему показывает общий размер файловой системы в 250 ГБ и свободное пространство, примерно основанное на фактическом свободном пространстве файловой системы хоста; т. е. ограничения квот не отображаются для df.

Это означает, что мое приложение журнала может заполнить всю квоту и все еще считать, что у него есть 200+ ГБ места для записи, поэтому оно не перерабатывает свои старые данные. В конце концов квота будет превышена, и благодаря ограничениям файловых систем COW мне придется отключить квоту и вручную удалить старые журналы — если квота все еще применяется на том же размере, удалить данные невозможно, поскольку для операции удаления нет дополнительного места.

Я достаточно прочитал и достаточно понял о Btrfs, чтобы понимать, что идея "свободного пространства" в Btrfs запутана и может быть сложной для понимания, но есть ли способ получить хотя бы "примерную" цифру из LXC того, сколько осталось места квоты? Предпочтительно, чтобы это делалось стандартными API для получения свободного места на диске (теми, которые dfиспользуют), поскольку это означает, что это также будет применяться к другим приложениям, получающим доступ к файловой системе и нуждающимся в информации о ее приблизительном свободном пространстве.

Если бы я мог получить, скажем, 1 ГБ или около того от фактического свободного пространства (предоставляемого квотой), этого было бы достаточно, чтобы настроить параметры истечения срока хранения журнала так, чтобы файловая система не превышала квоту.

решение1

Вот лучший инструмент, который я нашел для управления распределением пространства подтомов BTRFS: Получите размер ваших снимков BTRFS | Блог PoisonPacket

Все заслуги принадлежат Кайлу Агронику (автору этого сценария)

Связанный контент