Автоматически удалять файлы, записывая нули в Linux
Мы запускаем виртуальные машины Ubuntu с тонким предоставлением, которые выполняют много операций записи и удаления файлов. В то время как использование диска гостями увеличивается медленно (чистая запись - удаление), размер виртуального диска на хостах растет гораздо быстрее, потому что хосты не могут знать, что многие из блоков являются свободным пространством.
Мы регулярно отключаем каждую виртуальную машину и записываем нули в свободные блоки гостевой файловой системы. Это позволяет нам затем сжать виртуальный диск на хосте.
Мне было интересно, знает ли кто-нибудь об утилите, которую мы можем установить на гостях, которая будет автоматически записывать нули при каждом удалении файла. Если бы такая утилита существовала, мы могли бы автоматизировать сжатие виртуальных дисков на хосте, не записывая вручную нули поверх удаленных файлов в гостевой системе.
Надеюсь вопрос понятен и заранее спасибо за любую помощь
2 ответа
Используйте команду 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
Я не знаю ни одной программы, утилиты или сервиса, которые бы автоматически обнуляли удаленные файлы. Нужно подключиться к системным вызовам или запустить в ядре, чтобы достичь требуемой автоматичности.
Существуют утилиты, которые удаляют файлы , сначала обнуляя их. Вы не сказали, какая программа создает и удаляет файлы, но, может быть, если это скрипт или что-то еще, что вы можете подключить к этим утилитам?
В противном случае нет, не простой и автоматический способ сделать это. Это обратная сторона тонкого обеспечения.