2013-03-03 2 views
0

Я установил раздел s3backer, чтобы сохранить данные в облаке через службы amazon s3. Как стандартное поведение файловых систем, удаленные файлы просто отключаются от fs, оставляя базовые блоки неизменными. Это не исключает удаления блоков на амазонке, и поэтому используемое пространство выставляется также, если оно было стерто. Чтобы предотвратить это, я мог бы использовать утилиту zerofree, чтобы принудительно записать нуль на неиспользуемые блоки в файловой системе. Это приводит к тому, что s3backer удаляет неиспользуемый блок в облаке.zerofree on s3backer, сэкономить место в облаке

Проблема в том, что утилита zerofree нуждается в разделе только для чтения, что предотвращает сохранение пространства при использовании раздела.

Знаете ли вы, есть ли другие варианты для этого на rw смонтированном разделе? как варианты установки файловой системы или другие решения?

Спасибо

ответ

0

Раньше не было хорошего ответа, но теперь там может быть. Однако в цепочке есть несколько ссылок ...

Во-первых: вам нужно ядро ​​Linux, поддерживающее команду блока блоков TRIM (добавлено в 2.6.28) и файловую систему, которая ее поддерживает (XFS, ext4 , btrfs в Linux 3.7 или новее). Первоначально, предназначенный для информирования SSD-устройств блоков, которые они могут перерабатывать, эта команда сообщает блочному устройству, что блок больше не нужен файловой системой, использующей его. Некоторые (но не все) файловые системы, когда файл удаляется, сообщают блочное устройство через TRIM.

Следующее звено в цепи this kernel patch, который в случае монтажа шлейфа, преобразует команду устройства в блоке TRIM в fallocate() используя FALLOC_FL_PUNCH_HOLE опции на файл петлевых обратно. По-видимому, это перешло в Linux в версии 3.2.

Следующая ссылка в цепочке - это поддержка для передачи системного вызова fallocate() в код пользователя FUSE, который был добавлен в версию FUSE 2.9.2.

Конечная ссылка в цепи - это поддержка FUSE fallocate() в s3backer. Я начал смотреть на это, но он еще не завершен.

Итак, подведем итог всем требованиям (в отводками порядке):

  • "Верхнюю" файловой системы поддержки TRIM (например, ext4 или Btrfs в Linux> = 3,7)
  • Linux ядра> = 3,2 TRIM на петлевых креплениях
  • FUSE версия> = 2.9.2 поддерживает fallocate()
  • GLibC версию> = 2.18, содержащие заголовки, которые определяют FALLOC_FL_PUNCH_HOLE постоянной
  • Обновленная версия s3backer поддерживающей fallocate()

Я пошлю что-то к s3backer mailing list когда это было реализовано и протестирована.

+0

Ну, я не мог заставить это работать на Linux 3.4.11. По какой-то причине с монтированием ext4 с использованием '-o loop, discard' поверх файла s3backer ', удаление большого файла не приводит к тому, что уведомление' falllocate() 'отправляется в процесс s3backer. – Archie

+0

Да! Он работает на Linux 3.8.По-видимому, файловая система FUSE в Linux 3.4 не поддерживает 'FALLOC_FL_PUNCH_HOLE', но ту, что в 3.8. – Archie

+0

Я узнал, что вам нужна версия Linux версии 3.5 или новее. [Эта веб-страница] (https://code.google.com/p/s3backer/wiki/UnsedBlockDeletion) содержит подробные сведения. – Archie

Смежные вопросы