Введение в файловую систему Btrfs
Btrfs (файловая система B-Tree) — это современная файловая система с копированием при записи (CoW) для Linux. Btrfs стремится реализовать многие расширенные функции файловой системы, уделяя особое внимание отказоустойчивости, ремонту и простоте администрирования. Файловая система btrfs предназначена для поддержки требований высокой производительности и больших серверов хранения. Он подходит для центров обработки данных с петабайтным масштабом, а также для сотовых смартфонов. В этой статье я собираюсь обсудить файловую систему Btrfs и ее функции. Итак, приступим.
Копирование при записи — файловая система CoW:
Btrfs — это файловая система с копированием при записи (CoW). В файловой системе CoW, когда вы пытаетесь изменить данные в файловой системе, файловая система копирует данные, изменяет данные, а затем записывает измененные данные обратно в другое свободное место файловой системы.
Основное преимущество файловой системы с копированием при записи (CoW) заключается в том, что экстент данных, который требуется изменить, копируется в другое место, модифицируется и сохраняется в другом экстенте файловой системы. Исходный экстент данных не изменяется. Таким образом, файловая система btrfs может устранить риск повреждения данных или частичного обновления в случае сбоя питания во время модификации данных, поскольку исходные данные остаются неизменными.
Основным недостатком файловой системы с копированием при записи (CoW) является то, что большие файлы, как правило, фрагментируются по мере их изменения. Таким образом, дефрагментация требуется время от времени. К счастью, файловая система btrfs поддерживает онлайн-дефрагментацию. Таким образом, вам не нужно размонтировать файловую систему для дефрагментации файловой системы btrfs.
Основные характеристики файловой системы Btrfs:
Основные особенности файловой системы Btrfs:
i) Хранилище файлов на основе экстентов: в файловой системе на основе экстентов единица хранения называется экстентом. Экстент — это непрерывная область памяти, зарезервированная для файла. Для одного файла требуется один экстент, независимо от того, насколько файл мал. Для больших файлов (размер файла больше размера экстента) потребуется несколько экстентов. Для больших файлов метаданные будут использоваться для отслеживания экстентов, которые использует файл. В файловой системе Btrfs размер метаданных значительно меньше. Метаданные меньшего размера повышают эффективность хранения и производительность файловой системы.
ii) Поддержка файлов большого размера. В файловой системе Btrfs один файл может иметь размер около 264 байт или 16 EiB (эксбибайт). Независимо от того, насколько большим становится ваш файл, Btrfs может его поддерживать.
iii) Компактная упаковка небольших файлов. Обычно, независимо от того, насколько мал файл, для его хранения требуется один блок или один экстент. Это тратит много места на диске. Чтобы решить эту проблему, файловая система Btrfs встраивает файлы меньшего размера в метаданные для эффективного хранения файлов меньшего размера.
iv) Индексированные каталоги с эффективным использованием пространства: Каталоги файловой системы btrfs индексируются двумя разными способами. Для поиска имени файла используется индексация на основе ключа. Для ссылки на данные используется индексация ключей на основе инодов. Двухуровневая индексация повышает производительность поиска в каталогах/файлах и снижает требования к хранилищу для индексов.
v) Динамическое выделение индексных дескрипторов: вам нужен 1 индексный дескриптор для ссылки на 1 файл. Многие файловые системы (например, Ext4) имеют фиксированное количество инодов. Таким образом, если вы создадите слишком много маленьких файлов, у вас может остаться много места на диске, но вы не сможете создавать новые файлы. Вы также не можете увеличить максимальное количество инодов после создания файловой системы.
Btrfs решает эту проблему за счет динамического выделения инодов по мере необходимости. Таким образом, вы можете создавать столько файлов, сколько хотите, пока у вас есть свободное место на диске.
vi) Моментальные снимки с возможностью записи и моментальные снимки только для чтения: Файловая система Btrfs поддерживает моментальные снимки. Вы можете сделать снимок текущей файловой системы, который вы можете использовать для восстановления ваших данных, если вы случайно удалили некоторые файлы или повредили некоторые данные.
По умолчанию моментальные снимки btrfs доступны только для чтения. После того, как вы сделали моментальный снимок, доступный только для чтения, вы не сможете изменить какие-либо файлы/каталоги в этом снимке. В любом случае, если вы хотите изменить какие-либо файлы/каталоги после создания моментального снимка существующей файловой системы Btrfs, вы можете изменить моментальный снимок, доступный только для чтения, на доступный для записи моментальный снимок и изменить любые файлы/каталоги в этом снимке.
vii) Подтома. Файловая система Btrfs может иметь много подтомов. Подтом — это именованное двоичное дерево (B-дерево) (или внутренний/логический корень файловой системы) существующего корневого дерева файловой системы (основного) файловой системы btrfs. Подтом не является самостоятельным блочным устройством. Но вы можете монтировать подтома Btrfs по отдельности. Вы можете думать о подтомах как о пространствах имен.
viii) Поддержка квот с учетом подтомов: вы также можете выделять квоты для подтомов. После превышения квоты вы не сможете добавлять новые данные в подтом. Вам не понадобятся какие-либо отдельные программы для создания квот на подтомы Btrfs.
ix) Контрольные суммы для данных и метаданных. Чтобы избежать повреждения данных, Btrfs по умолчанию использует алгоритмы контрольной суммы crc32c для данных и метаданных файловой системы. Контрольные суммы хранятся в файловой системе для автоматической проверки на наличие ошибок файловой системы и повреждений данных в фоновом режиме.
Btrfs поддерживает многие другие алгоритмы контрольных сумм: xxhash, sha256 и blake2b.
x) Сжатие: файловая система Btrfs поддерживает прозрачное сжатие файлов. Сжатие и распаковка файлов в файловой системе btrfs выполняются в фоновом режиме автоматически.
Btrfs поддерживает 3 алгоритма сжатия: ZLIB, LZO и ZSTD.
ZLIB — это метод сжатия файловой системы btrfs по умолчанию.
xi) Интегрированная поддержка нескольких устройств: файловые системы Btrfs имеют встроенную поддержку диспетчера логических томов (LVM). Вы можете добавить несколько устройств хранения в одну файловую систему btrfs. Вы также можете настроить RAID-массивы в файловой системе btrfs без дополнительного программного обеспечения.
Файловая система Btrfs поддерживает чередование данных, зеркальное отображение данных, чередование данных + зеркальное отображение, а также реализации с одинарной и двойной четностью.
С чередованием данных. Если вы добавили несколько устройств хранения в одну и ту же файловую систему btrfs, btrfs может хранить один и тот же файл на разных физических устройствах/разделах. Это называется чередованием данных. Чередование данных улучшает производительность чтения/записи файловой системы. RAID-0 широко использует функцию чередования данных.
Зеркальное отображение данных. Если вы добавили несколько устройств хранения в одну и ту же файловую систему btrfs, все данные, записанные на одно устройство хранения, будут записаны на все остальные устройства хранения. Это называется зеркалированием данных. RAID-1 широко использует функцию зеркалирования данных.
Распределение данных + единая четность: RAID-5 использует чередование данных и единую распределенную четность. Если вы добавили несколько устройств хранения в файловую систему btrfs, то RAID-5 разделит данные на нескольких устройствах хранения, а также вычислит и сохранит блоки четности на устройствах хранения. RAID-5 может выдержать отказ одного диска.
Распределение данных + двойная четность: RAID-6 использует чередование данных и двойную распределенную четность. Если вы добавили несколько устройств хранения в файловую систему btrfs, то RAID-6 разделит данные на нескольких устройствах хранения, а также вычислит и сохранит блоки с двойной четностью на устройствах хранения. RAID-6 может выдержать отказ двух дисков. В остальном это то же самое, что и RAID-5 (расслоение данных + одиночная четность).
Распределение данных+зеркалирование: RAID-10 одновременно использует чередование данных и зеркалирование данных. RAID-10 требует, чтобы к одной файловой системе btrfs добавлялось четное количество устройств хранения одинакового размера. Минимальное количество устройств хранения, которые вы можете добавить в файловую систему RAID-10 btrfs, равно 4. Половина устройства хранения будет использоваться для чередования данных, а другая половина — для зеркалирования данных первой половины устройств хранения (где данные чередуются).
xii) Поддержка SSD и оптимизация. Файловая система btrfs поддерживает SSD и имеет некоторые функции оптимизации SSD. Файловая система btrfs также поддерживает TRIM/Discard для устройств хранения SSD.
Функция TRIM может обнаруживать и помечать экстенты данных, которые больше не используются. Как только расширения помечены, файловая система btrfs может автоматически стереть их, чтобы другие файлы могли использовать эти расширения данных.
Функция Discard удалит все расширения данных SSD. Если вы хотите продать свой SSD, эта функция может вам пригодиться.
xiii) Эффективное добавочное резервное копирование: Btrfs поддерживает добавочное резервное копирование. При первом резервном копировании файловой системы btrfs делается снимок текущей файловой системы. Затем все последующие резервные копии будут сравниваться с первым снимком, и на диск будут сохраняться только изменения. Таким образом, любые последующие резервные копии будут занимать меньше места на диске, а резервные копии будут выполняться быстрее.
xiv) Фоновая очистка: это процесс файловой системы Btrfs, используемый для поиска и исправления ошибок в файлах, которые имеют избыточные копии (множественные копии), хранящиеся в файловой системе Btrfs.
xv) Онлайн-дефрагментация файловой системы: ранее я объяснял, как работает файловая система Btrfs Copy-on-Write. Большие файлы хранятся в нескольких экстентах файловой системы Btrfs. Когда вы изменяете большие файлы, экстенты, которые должны быть изменены, копируются в другие свободные экстенты файловой системы и изменяются там. Таким образом, неизмененные экстенты данных также сохраняются на случай, если это потребуется для восстановления файловой системы. Это вызывает фрагментацию (объемы данных большого файла не будут непрерывными и будут разбросаны по всему устройству хранения) в файловой системе по мере изменения больших файлов. Слишком сильная фрагментация негативно влияет на файловую систему (замедляет операции чтения/записи файловой системы).
Чтобы решить эту проблему, файловая система btrfs поддерживает онлайн-дефрагментацию файловой системы. При онлайн-дефрагментации вам не нужно размонтировать файловую систему, чтобы выполнить дефрагментацию файловой системы. Вы можете поддерживать работоспособность файловой системы и при этом дефрагментировать ее. Дефрагментация перемещает экстенты файлов по файловой системе, чтобы сохранить как можно более непрерывные экстенты одного и того же большого файла. Дефрагментация улучшает производительность файловой системы.
xvi) Автономная проверка файловой системы: файловая система Btrfs имеет множество встроенных инструментов, которые можно использовать для проверки ошибок файловой системы и их исправления. Вы также можете исправить сломанную файловую систему Btrfs (которая не может быть смонтирована) с помощью этих инструментов.
xvii) Преобразование существующих файловых систем Ext2/3/4 и ReiserFS на месте: Файловая система Btrfs имеет встроенную утилиту btrfs-convert, которую можно использовать для преобразования существующих файловых систем Ext2/3/4. и файловых систем ReiserFS в файловую систему Btrfs.
Программа преобразования файловой системы Btrfs считывает метаданные существующей файловой системы Ext2/3/4 (или ReiserFS), создает метаданные Btrfs и сохраняет их в файловой системе. Файловая система хранит метаданные Btrfs и Ext2/3/4 (или ReiserFS). Файловая система Btrfs указывает на те же блоки файлов, которые используются файлами файловой системы Ext2/3/4 (или ReiserFS). Существующая файловая система и блоки данных остаются нетронутыми, поскольку Btrfs является файловой системой с копированием при записи (CoW). При изменении файла файловая система Btrfs копирует исходные блоки данных в новые свободные экстенты и изменяет их там.
xviii) Исходные устройства: файловая система Btrfs поддерживает исходные устройства. Вы можете создать файловую систему только для чтения и использовать ее в качестве шаблона (начального устройства) для создания других файловых систем Btrfs. Преимущество этого заключается в том, что в новую файловую систему будут записаны только измененные данные. Исходные данные (на исходных устройствах) будут сохранены как есть. Эту функцию можно использовать для экономии места на диске и избыточности данных.
xix) Отправка/получение изменений подтома: файловая система btrfs может отправлять/получать изменения подтома. Файловая система Btrfs может отправлять добавочные изменения вложенного тома в другую файловую систему Btrfs (также может находиться на другом компьютере), которая может получать изменения вложенного тома. Эта функция используется для создания инкрементных резервных копий файловой системы Btrfs локально или удаленно. Этот метод быстрее и эффективнее, чем rsync.
xx) Пакетная/внеполосная дедупликация: файловая система Btrfs поддерживает пакетную или внеполосную дедупликацию. Дублирование происходит после записи файла в файловую систему. Файловая система Btrfs активно сканирует всю файловую систему на наличие идентичных экстентов и сохраняет только одну копию каждого экстента (удаляет избыточные/дублирующиеся экстенты). Для этой задачи используется тот же принцип копирования при записи (CoW). Дедупликация экономит много места на диске.
xxi) Поддержка файлов подкачки: если вы используете ядро Linux 5.0 или более позднюю версию, вы можете создавать файлы подкачки в файловой системе Btrfs.
Существуют некоторые ограничения Swapfile в файловой системе Btrfs:
- Файл подкачки должен быть выделен как NoCoW (не для копирования при записи)
– В файле подкачки не должно быть включено сжатие.
Стабильность файловой системы Btrfs:
Файловая система Btrfs активно разрабатывается командой Btrfs. На момент написания этой статьи большинство функций файловой системы стабильны. Некоторые расширенные функции еще недостаточно стабильны для производственной среды. Команда Btrfs усердно работает над решением этих проблем со стабильностью.
Если вы хотите использовать файловую систему Btrfs на своем рабочем сервере, проверьте официальную вики-страницу Status — btrfs, чтобы узнать, достаточно ли стабильны нужные вам функции файловой системы или нет. Кроме того, перед окончательным развертыванием файловой системы Btrfs обязательно выполните несколько тестов и не забудьте сохранить резервные копии важных данных. Сохранение резервной копии всегда важно для производственных сред.
Будущая замена файловой системы Ext4:
Файловая система Btrfs быстро развивается. Команда разработчиков Btrfs также заботится о стабильности файловой системы. Поэтому они изо всех сил стараются сделать ее максимально стабильной при разработке файловой системы btrfs. Как только файловая система btrfs будет полностью разработана и все функции станут достаточно стабильными, она может заменить файловую систему Ext4.