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

Автоматически удалять файлы, записывая нули в Linux

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

Мы регулярно отключаем каждую виртуальную машину и записываем нули в свободные блоки гостевой файловой системы. Это позволяет нам затем уменьшить виртуальный диск на хосте.

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

Я надеюсь, что вопрос ясен и заранее спасибо за любую помощь

Использовать Fstrim команда.

Я делаю это для виртуальных машин и других файловых систем с тонким предоставлением, ZFS zvols и хранилищ на основе SSD с помощью простого скрипта cron:

#!/bin/bash

for fs in $(lsblk -o MOUNTPOINT,DISC-MAX,FSTYPE | grep -E '^/.* [1-9]+.* ' | awk '{print $1}')
  do fstrim $fs > /dev/null 2>&1
done

Я не знаю ни одной программы, утилиты или службы, которая автоматически обнуляла бы удаленные файлы. Ему нужно будет подключаться к системным вызовам или запускаться в ядре, чтобы добиться автоматичности, которую вы ищете.

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

В противном случае нет, это не простой и автоматический способ сделать это. Это обратная сторона тонкого предоставления.