HAMMER - файловая система HAMMER
Чтобы собрать ядро, содержащее этот драйвер, поместите следующие строки в ваш файл конфигурации ядра:
Вместо этого вы можете загрузить драйвер как модуль во время загрузки, поместив следующую строку в loader.conf(5):
Для монтирования через fstab(5):
Файловая система HAMMER предоставляет средства для хранения файловой системы на дисковых устройствах и предполагается, что она заменит ffs(5) в качестве файловой системы по умолчанию используемой в DragonFly. Среди её возможностей мгновенное восстановление при сбоях, огромные файловые системы, распределённые на нескольких томах, проверка целостности данных, мелкозернистая история, способность к зеркалированию и псевдо-файловые системы.
Все функции, относящиеся к управлению файловой системой HAMMER предоставляются утилитами newfs_hammer(8), mount_hammer(8), hammer(8) и undo(1).
За подробным введением обратитесь к статье и слайдам перечисленным в разделе СМОТРИ ТАКЖЕ. С некоторыми аспектами использования HAMMER можно ознакомиться в разделе ПРИМЕРЫ ниже.
После неправильного выключения системы файловая система HAMMER вернётся назад к полностью согласованному состоянию при монтировании файловой системы, обычно менее чем за несколько секунд.
Файловая система HAMMER может размещаться на до 256 томах. Каждый том занимает дисковый слайс или раздел DragonFly, или другой специальный файл, и может иметь размер до 4096 Терабайт. Для томов размером свыше 2 Терабайт обычно нужно воспользоваться gpt(8) и disklabel64(8).
Одной из главных задач HAMMER является обеспечение целостности данных, проверки CRC выполняются для всех важных структур и данных. Мгновенные снимки HAMMER позволяют делать проверку целостности данных проще: поля atime и mtime фиксируются в значение ctime для файлов доступных через мгновенный снимок. Поле st_dev основывается на разделяемом uuid PFS, а не на реальном устройстве. Это означает, что архивирование содержимого мгновенного снимка например с помощью tar(1) и перенаправление его через нечто вроде md5(1) даст целостный результат. Целостность также поддерживается на зеркалируемых объектах.
Файловая система HAMMER использует 64 битные шестнадцатричные идентификаторы транзакций для обращения к файлу истории или каталогу данных. Идентификатор имеет формат printf(3) %#016llx, такой как 0x00000001061a8ba6.
Команды hammer(8), относящиеся к теме: synctid
Метаданные истории записываются на носитель при каждой операции sync, поэтому разрешение истории файлов составляет 30-60 секунд до следующей операции подрезания (prune). Предшествующие версии файлов и каталогов обычно доступны посредством дополнения имени файла символами @@ и идентификатором транзакции. Это общий способ доступа к истории, однако он требует мгновенных снимков.
Мгновенные снимки - это мягкие ссылки к предыдущим версиям каталогов и их файлов. Их данные удерживаются до операции подрезания до тех пор, пока существуют мягкие ссылки. Удаление мягкой ссылки заставляет файловую систему восстановить пространство до следующих операций подрезания (prune) и перераспределения блоков (reblock).
Команды hammer(8), относящиеся к теме: cleanup, history, snapshot; смотри также undo(1)
Подрезание (pruning) - это акт удаления истории файловой системы. Будет удержана только история используемая заданными мгновенными снимками и история следующая за последним мгновенным снимком. Вся остальная история удаляется. Перераспределение блоков (reblocking) переупорядочивает все элементы, таким образом дефрагментирует файловую систему и освобождает пространство для повторного использования. После подрезания файловая система должна перераспределить блоки для восстановления всего доступного пространства. Перераспределение блоков требуется даже если вы воспользовались для монтирования опцией nohistory команды mount_hammer(8).
Команды hammer(8), относящиеся к теме: cleanup, prune, prune-everything, reblock, reblock-btree, reblock-inodes, reblock-dirs, reblock-data
Чтобы разрешить дубликацию номеров inode на подчинённые (slaves) файловые системы HAMMER, подсистема зеркалирования использует псевдо-файловые системы (Pseudo File System - PFS). Файловая система HAMMER поддерживает до 65535 PFS'ов. Поддерживается множество подчинённых одному хозяину (master), но несколько хозяев на одного подчинённого - нет. Подчинённые всегда доступны только для чтения. Поддерживается обновление подчинённых до хозяев и откат (downgrade) хозяев до подчинённых.
Рекомендуется использовать null-точку монтирования для доступа к PFS; этот способ не собьёт с толку инструменты корнем PFS, являющимся ссылкой, и inode'ами, не являющимися уникальными во всей файловой системе HAMMER.
Команды hammer(8), относящиеся к теме: pfs-master, pfs-slave, pfs-cleanup, pfs-status, pfs-update, pfs-destroy, pfs-upgrade, pfs-downgrade, mirror-copy, mirror-stream, mirror-read, mirror-read-stream, mirror-write, mirror-dump
Файловая система HAMMER поддерживает экспорт по NFS. Экспорт PFS по NFS выполняется с использованием null-монтирования. Например, для экспорта PFS /hammer/pfs/data, создайте null-монтирование, например, к /hammer/data и экспортируйте последний путь.
Не экспортируйте каталог, содержащий PFS (например, вышеуказанный /hammer/pfs). Должен экспортироваться только null-смонтированный корень PFS (например, вышеуказанный /hammer/data) (подкаталоги могут быть экранированы при экспорте).
Чтобы создать и смонтировать файловую систему HAMMER воспользуйтесь командами newfs_hammer(8) и mount_hammer(8). Отметим, что все файловые системы HAMMER должны иметь уникальные имена в пределах одной машины.
Таким же образом, указав дополнительные аргументы, можно создавать многотомные файловые системы.
Однажды созданная и смонтированная, файловая система HAMMER требует периодической очистки, создающей мгновенные снимки, подрезающей и перераспределяющей блоки, чтобы доступ к истории и файловой системе не заполнял диски. Для этого рекомендуется использовать метакоманду hammer(8) cleanup.
По умолчанию, DragonFly настраивает запуск hammer cleanup каждую ночь из periodic(8).
Можно также производить эти операции индивидуально через crontab(5). Например, чтобы перераспределять блоки файловой системы /home каждую ночь в 2:15 не дольше 5 минут:
Команда snapshots утилиты hammer(8) предоставляет несколько способов получения мгновенных снимков. Все они принимают каталог, в котором хранятся мгновенные снимки.
Мягкие ссылки в /snaps указывают на состояние каталога /home во время каждого выбранного мгновенного снимка, и могут использоваться для копирования данных в другое место для задач резервного копирования.
По умолчанию DragonFly настраивает создание мгновенных снимков каждую ночь для всех файловых систем HAMMER из periodic(8) и хранит их 60 дней.
Каталог мгновенного снимка - это аргумент для команды hammer(8) prune, которая освобождает исторические данные из файловой системы, на которые не ссылается ни одна ссылка мгновенного снимка, из более поздних снимков и из-за последнего снимка.
Зеркалирование может быть настроено с использованием псевдо-файловых систем HAMMER. Для связывания подчинённого с хозяином, его разделяемый UUID должен быть задан таким же, как разделяемый UUID на хозяине, который выводится командой hammer pfs-master.
Ссылка /home/pfs/slave не доступна до тех пор, пока операция зеркалирования не будет завершена.
Для зеркалирования данных хозяина, воспользуйтесь любой из команд: командами чтения из канала mirror-read и записи в канал mirror-write, или воспользуйтесь сокращением, используйте команду mirror-copy (которая также работает через подключения ssh(1)). Начальное зеркалирование может быть выполнено в путь PFS (так как mount_null(8) всё ещё не доступно).
После начального шага можно настроить null-монтирование для /home/pfs/slave. Следующие операции могут использовать null-монтирование.
Для экспорта по NFS из файловой системы HAMMER /hammer каталога /hammer/non-pfs без PFSs, и PFS /hammer/pfs/data, последний null-монтируется в /hammer/data.
Добавим к /etc/fstab (смотри fstab(5)):
Добавим к /etc/exports (смотри exports(5)):
md5(1), tar(1), undo(1), ffs(5), disklabel64(8), gpt(8), hammer(8), mount_hammer(8), mount_null(8), newfs_hammer(8)
Мэтью Диллон (Matthew Dillon), Файловая система HAMMER, июнь 2008, http://www.dragonflybsd.org/hammer/hammer.pdf.
Мэтью Диллон (Matthew Dillon), Презентация с NYCBSDCon 2008, октябрь 2008, http://www.dragonflybsd.org/hammer/nycbsdcon/.
Файловая система HAMMER впервые появилась в DragonFly 1.11.
Файловая система HAMMER была спроектирована и реализована Мэтью Диллоном (Matthew Dillon). Эта страница руководства была написана Сашей Уилднером (Sascha Wildner).
Перевод на русский язык выполнил Владимир Ступин