Btrfs (B-Tree Filesystem) — это современная файловая система с копированием при записи (CoW) для Linux. Btrfs стремится реализовать множество расширенных функций файловой системы, уделяя особое внимание отказоустойчивости, восстановлению и простому администрированию. Файловая система btrfs разработана для поддержки требований к высокой производительности и большим серверам хранения. Он подходит для петабайтных центров обработки данных, а также для сотовых смартфонов. В этой статье мы собираемся обсудить файловую систему Btrfs и ее особенности. Итак, приступим.
Btrfs — это файловая система с копированием при записи (CoW). В файловой системе CoW, когда вы пытаетесь изменить данные в файловой системе, файловая система копирует данные, изменяет данные, а затем записывает измененные данные обратно в другое свободное место файловой системы.
Основное преимущество файловой системы Copy-on-Write (CoW) заключается в том, что экстент данных, который он хочет изменить, копируется в другое место, изменяется и сохраняется в другом экстенте файловой системы. Исходный экстент данных не изменяется. Таким образом, файловая система btrfs может устранить риск повреждения данных или частичного обновления в случае сбоя питания во время модификации данных, поскольку исходные данные остаются неизменными.
Основным недостатком файловой системы Copy-on-Write (CoW) является то, что большие файлы имеют тенденцию фрагментироваться при изменении. Таким образом, дефрагментация требуется время от времени. К счастью, файловая система btrfs поддерживает онлайн-дефрагментацию. Таким образом, вам не нужно отключать файловую систему для дефрагментации файловой системы btrfs.
Основными особенностями файловой системы Btrfs являются:
i) Хранение файлов на основе экстентов: в файловой системе на основе экстентов единица хранения называется экстентом. Экстент — это непрерывная область хранения, зарезервированная для файла. Для одного файла требуется один экстент, независимо от размера файла. Для больших файлов (размер файла больше размера экстента) потребуется несколько экстентов. Для файлов большего размера будут использоваться метаданные, чтобы отслеживать используемые файлы. В файловой системе Btrfs размер метаданных значительно меньше. Меньшие метаданные повышают эффективность хранения и производительность файловой системы.
ii) Поддержка огромного размера файла: в файловой системе Btrfs размер одного файла может составлять примерно 264 байта или 16 EiB (exbibytes). Независимо от того, насколько велик ваш файл, Btrfs может его поддержать.
iii) Компактная упаковка небольших файлов: обычно, независимо от размера файла, для хранения файла требуется один блок или один экстент. Это тратит много места на диске. Чтобы решить эту проблему, файловая система Btrfs встраивает файлы меньшего размера в метаданные, чтобы эффективно хранить файлы меньшего размера.
iv) Индексированные каталоги с эффективным использованием места: каталоги файловой системы btrfs индексируются двумя разными способами. Для поиска имени файла используется индексация на основе ключей. Для ссылки на данные используется индексирование ключей на основе inode. Двухуровневое индексирование повышает производительность поиска в каталогах/файлах и снижает требования к хранилищу для индексов.
v) Динамическое размещение inode: вам нужен 1 inode для ссылки на 1 файл. Многие файловые системы (например, Ext4) имеют фиксированное количество inodes. Итак, если вы создадите слишком много маленьких файлов, на вашем диске может остаться много места, но вы не сможете создавать новые файлы. Вы также не можете увеличить максимальное количество inodes после создания файловой системы.
Btrfs решает эту проблему, динамически выделяя inodes по мере необходимости. Таким образом, вы можете создавать столько файлов, сколько хотите, при условии, что у вас есть свободное место на диске.
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 Kernel 5.0 или новее, вы можете создавать файлы подкачки в файловой системе Btrfs.
Есть некоторые ограничения Swapfile в файловой системе Btrfs:
Файловая система Btrfs активно развивается командой Btrfs. На момент написания этой статьи большинство функций файловой системы оставались стабильными. Некоторые из расширенных функций еще недостаточно стабильны для производственной среды. Команда Btrfs усердно работает над решением этих проблем со стабильностью.
Если вы хотите использовать файловую систему Btrfs на своем производственном сервере, проверьте официальную страницу Status — btrfs Wiki, чтобы узнать, достаточно ли стабильны функции файловой системы, которые вам нужны. Кроме того, не забудьте запустить несколько тестов перед окончательным развертыванием файловой системы Btrfs и не забудьте сохранить резервные копии важных данных. Хранение резервных копий всегда важно для производственных сред.
Файловая система Btrfs быстро развивается. Команда разработчиков Btrfs также заботится о стабильности файловой системы. Поэтому они изо всех сил стараются сделать ее максимально стабильной при разработке файловой системы btrfs. Как только файловая система btrfs будет полностью разработана и все функции станут достаточно стабильными, она может заменить файловую систему Ext4.