Источник (англ.): Dani A. et al. Next4: Snapshots in Ext4 File System //arXiv preprint arXiv:2403.06790. – 2024.
Моментальные снимки также могут быть реализованы на уровне тома с помощью диспетчера томов, такого как LVM/LVM2 [1]. Диспетчер логических томов (LVM)/LVM2 - это диспетчер томов, расположенный между файловой системой и драйвером устройства. Моментальный снимок в LVM достигается с помощью копирования при записи на уровне блока (COW) и выполняется на единице логического тома в группе томов.
Однако возможности моментального снимка на уровне LVM имеют некоторые оговорки, как показано ниже:
В любой системе хранения функция, которая имеет первостепенное значение для пользователя, является защита данных. В то время как пользователь принимает как должное, что данные не будут потеряны из-за сбоя системы или ошибки дизайна, пользователь также ожидает, что система хранения данных защитит его или ее от непреднамеренных удалений, нежелательных модификаций, вредоносных агентов и т.д. Различные решения были предложены индустрией хранения данных, и были адаптированы в различной степени. Одним из очень распространенных методов является регулярное создание резервных копий либо в самой системе хранения, либо на магнитные ленты. Этот метод имеет основной недостаток, заключающийся в том, что требуется большая емкость хранилища и, кроме того, вызывает существенные сбои в обслуживании во время создания резервной копии. Кроме того, из-за этих недостатков невозможно создавать резервные копии чаще, чем примерно раз в день, что приводит к большому периоду потери данных при необходимости восстановления.
Моментальный снимок - это копия тома на определенный момент времени, аналогичная тому, как делается снимок данных в данный момент. Моментальные копии выглядят и ведут себя как полные резервные копии - их можно монтировать как тома, считывать одновременно, не затрагивая том, для которого они являются моментальными снимками, при необходимости выполнять откат на том и удалять, чтобы освободить место. Простота и гибкость, с которыми могут выполняться эти операции, способствовали ускорению внедрения технологии snapshot в ИТ-индустрии.
Некоторые из этих предостережений могут быть устранены изменениями в реализации моментального снимка LVM, но некоторые из них являются фундаментальными для подхода к моментальному снимку уровня громкости. По этой причине имеет смысл попытаться достичь целей проектирования путем реализации моментальных снимков на уровне файловой системы.
Next4 занимается реализацией функции моментальных снимков на основе файловой системы в файловой системе Ext4, не нарушая базовой структуры и функций Ext4. Ext4 является преемником популярной и наиболее широко используемой файловой системы Ext3. Next4 позволит создавать инкрементный моментальный снимок файловой системы, доступный только для чтения, который может быть восстановлен обратно путем монтирования файла моментального снимка на устройство обратной связи. Моментальные снимки Next4 обеспечивают простоту моментальных снимков LVM при высокой производительности и масштабируемости. Возможности управления моментальными снимками включают в себя создание любого количества моментальных снимков по желанию и удаление всех прошлых снимков, чтобы освободить место в файловой системе.
Каждый сделанный снимок сохраняется в файле моментального снимка, который представляет собой обычный разреженный файл. Разреженный файл - это тип компьютерного файла, который пытается более эффективно использовать пространство файловой системы, когда блоки, выделенные для файла, в основном пусты. Это достигается за счет записи краткой информации (метаданных), представляющей пустые блоки на диск вместо фактического "пустого" пространства, из которого состоит блок, используя меньший объем дискового пространства.
Файл моментального снимка имеет размер, такой же, как у всей файловой системы, и представляет состояние файловой системы на момент создания снимка. Каждое смещение логического блока в файле моментального снимка представляет собой физический блок в базовом блочном устройстве. Сопоставленный блок в файле моментального снимка содержит копию данных физического блока на момент создания моментального снимка. "Дыра" в файле моментального снимка означает, что версия этого блока моментального снимка идентична более поздней версии моментального снимка в файловой системе. Файлы моментальных снимков помечаются флагом файла моментального снимка, который наследуется от их родительского каталога и не может быть иным образом установлен для обычных файлов.
Ext4 - это файловая система на основе экстентов, в которой файлы с отображением экстентов могут использоваться вместо традиционных файлов с отображением блоков. Экстент - это комбинация двух целых чисел, первое из которых указывает блок смещения, а второе обозначает длину, т.е. количество смежных блоков после смещения, которые свободны или выделены. Это таким образом повышает производительность больших файлов и уменьшает фрагментацию. Один экстент в ext4 может отображать до 128 МБ непрерывного пространства с размером блока 4 КБ [2]. В индексе может храниться 4 экстента. Если в файле больше 4 экстентов, остальные экстенты индексируются в Htree.
Копирование при записи - это стратегия, при которой перед записью выполняется копия данных, которые должны быть изменены. В этом методе данные из исходного физического блока копируются в новое физическое местоположение. Затем старые данные в исходном физическом блоке перезаписываются новыми данными. В случае перезаписи, после создания моментального снимка, исходные данные сохраняются в файле моментального снимка с помощью операции COW. Таким образом, логическое смещение в файле моментального снимка, соответствующее смещению исходного физического блока, сопоставляется с новым физическим местоположением, содержащим исходные данные.
Продолжайте писать - это небольшая вариация техники копирования при записи. В этом случае также выполняется копирование данных в новое физическое местоположение, однако новые данные записываются в новое физическое местоположение вместо исходного физического местоположения. Таким образом, в случае перезаписи после моментального снимка логическое смещение в файле моментального снимка соответствует самому исходному физическому местоположению.
Cow bitmap отслеживает блоки, над которыми должна выполняться операция COW или MOW, таким же образом, как block bitmap отслеживает блоки, используемые файловой системой. Растровое изображение COW по сути является копией растрового изображения блока на момент создания моментального снимка и, таким образом, сохраняет отслеживание блоков, которые присутствовали в файловой системе на тот момент. Бит "set" в COW bitmap указывает, что соответствующий блок используется моментальным снимком.
Exclude Bitmap отслеживает блоки, которые должны быть пропущены при выполнении любой операции COW или MOWING, по сути, файловую систему.
Давайте проиллюстрируем работу следующим примером: предположим, что изначально файловая система состоит из файла, который содержит данные "HEADSHOT". Как показано на рисунке 3.1, файл состоит из двух экстентов данных (40-43) "HEAD" и (50-53) "SHOT", на которые ссылается его индекс в блоке под номером 10.
Теперь, на этом этапе, если мы сделаем снимок S1, то будет создан новый разреженный файл для снимка с его индексом в блоке под номером 90, как показано на рисунке 3.2. Этот снимок является "активным" снимком, поскольку он единственный, который изменяется. Изначально файл моментального снимка пуст и состоит из отверстий для соответствующих блоков данных. Таким образом, логические смещения (L) 10, 40-43, 50-53 сопоставляются физическим смещениям (P) '0', что представляет "дыру".
Предположим, у нас есть запрос на повторную запись данных в экстенте 40-43 с "HEAD" на "SNAP". Таким образом, теперь мы выполняем операцию MOW для данных и операцию COW для метаданных (inode). Как объяснялось ранее, "ПРИВЯЗКА" данных записывается в новое местоположение 60-63 (MOW), а копия индекса в местоположении 10 создается в местоположении 20 (COW). Метаданные в местоположении 10 затем изменяются для определения экстентов "SNAP" (60-63) и "SHOT" (50-53). Логические смещения в 10 и 40-43 в файле моментального снимка затем сопоставляются блокам 20 и 40-43 вместо "отверстий". Таким образом, файл ссылается на данные "SNAPSHOT" в файловой системе, и тот же файл ссылается на данные "HEADSHOT" в snapshot S1.
Теперь мы создадим еще один снимок S2, таким образом, будет создан пустой файл снимок, состоящий из всех отверстий, сопоставленных блокам данных на диске (показано на рисунке 3.4). Теперь S2 - это "активный" снимок, как объяснялось ранее.
Предположим, у нас есть запрос на повторную запись данных из "SH" в "FS" в местоположении 50-51. Данные "FS" записываются в новое местоположение 70-71 (MOW), а копия индекса в местоположении 10 переносится в местоположение 30 (COW). Метаданные в местоположении 10 затем изменяются до точечных экстентов "SNAP" (60-63), "FS" (70-71) и "OT" (52-53). Логические смещения в 10 и 50-51 в файле моментального снимка S2 затем сопоставляются блокам 30 и 50-51 вместо "отверстий". Таким образом, файл ссылается на данные "SNAPFSOT" в файловой системе, и тот же файл ссылается на данные "SNAPSHOT" в файловой системе snapshot S2.
Предположим, теперь есть запрос на удаление данных "OT". Таким образом, запись для индекса экстента 70-71 в строке 10 удаляется, и индекс указывает только на "SNAP" 60-63 и "FS" 50-51. Экстент, содержащий данные "OT", не освобождается, но защищается в активном моментальном снимке S2 с помощью операции MOW. В файле моментального снимка индекс отображает логическое смещение 52-53 в блоки 52-53 вместо отверстия.
Теперь мы хотим удалить снимок S2, затем данные блоки под S2 проверяются на наличие ссылок на какие-либо предыдущие снимки. В этом случае (как показано на рисунке 3.6) на данные "СНИМОК" (50-53) ссылается S1. Логические смещения 50-53 в файле моментального снимка S1 затем сопоставляются блокам 50-53 вместо "отверстий". Блоки индексных индексов в местоположениях 80 (S2) и 30 (Файл под S2) затем нераспределяются, и пространство возвращается файловой системе (как показано на рисунке 3.7).
В этой статье мы представляем дизайн моментального снимка на уровне файловой системы, подходящий для восстановления и резервного копирования. Технология моментальных снимков представляет собой одно из наиболее значительных усовершенствований системы хранения данных за последние годы, которое обещает изменить будущие решения для резервного копирования и восстановления данных. Помимо систем резервного копирования, snapshot также может оказаться полезным в таких приложениях, как тестирование программного обеспечения и инструменты восстановления системы. Мы реализуем snapshot в файловой системе Ext4 на основе экстентов. Ext4 является преемником Ext3, наиболее широко используемой файловой системы, и поставляется в качестве базовой файловой системы в большинстве современных дистрибутивов Linux. Таким образом, внедрение функции моментальных снимков в Ext4 удовлетворит огромное количество пользователей ее преимуществами.