Btrfs (Русский)
Из Btrfs Вики:
- Btrfs - это современная файловая система "копирование при записи" (CoW) для Linux, нацеленная на реализацию расширенных возможностей, а также на отказоустойчивость, ремонт и простоту администрирования. Совместно разработанная несколькими компаниями, Btrfs лицензирована под GPL и открыта для участия всех желающих.
Подготовка
Для утилит пользовательского пространства установите пакет btrfs-progs, который необходим для базовых операций.
Если вам нужно загрузиться с файловой системы Btrfs (т.е. ваше ядро и initramfs находятся на разделе Btrfs), проверьте, поддерживает ли ваш загрузчик Btrfs.
Создание файловой системы
Ниже показано, как создать новую файловая система Btrfs. Чтобы преобразовать раздел ext3/4 в Btrfs, смотрите #Преобразование ext3/4 в Btrfs. Чтобы использовать установку без разделов, смотрите #Диск Btrfs без разделов.
Дополнительную информацию смотрите в mkfs.btrfs(8).
Файловая система на одном устройстве
Чтобы создать файловую систему Btrfs на разделе /dev/partition
:
# mkfs.btrfs -L mylabel /dev/partition
Размер узла по умолчанию в Btrfs для метаданных составляет 16 КБ, а размер сектора по умолчанию для данных равен размеру страницы и определяется автоматически. Чтобы использовать больший размер узла для метаданных (он должен быть кратен размеру сектора, допускается до 64 КБ), укажите значение nodesize
с помощью переключателя -n
, как показано в этом примере с блоками по 32 КБ:
# mkfs.btrfs -L mylabel -n 32k /dev/partition
Файловая система с несколькими устройствами
Для создания RAID-массива можно использовать несколько устройств. Поддерживаемые уровни RAID включают RAID 0, RAID 1, RAID 10, RAID 5 и RAID 6. Начиная с ядра 5.5 поддерживаются RAID1c3 и RAID1c4 для 3- и 4- копий уровня RAID 1. Уровни RAID могут быть настроены отдельно для данных и метаданных с помощью опций -d
и -m
соответственно. По умолчанию данные имеют одну копию (single
), а метаданные зеркалируются (raid1
). Это похоже на
созданию конфигурации JBOD, где диски воспринимаются как одна файловая система, но файлы не дублируются. Дополнительную информацию о том, как создать том Btrfs RAID, смотрите в Использование Btrfs с несколькими устройствами.
# mkfs.btrfs -d single -m raid1 /dev/part1 /dev/part2 ...
Вы должны включить либо udev
хук, либо btrfs
хук в /etc/mkinitcpio.conf
, чтобы использовать несколько устройств Btrfs в пуле. Дополнительную информацию см. в статье Mkinitcpio#Общие хуки.
- Существует возможность добавить устройства в файловую систему с несколькими устройствами позже. Дополнительную информацию см. в статье Btrfs wiki.
- Устройства могут быть разных размеров. Однако, если один диск в конфигурации RAID больше остальных, дополнительное пространство не будет использоваться.
- Некоторые загрузчикы, такие как Syslinux, не поддерживают файловые системы с несколькими устройствами.
- Btrfs не читает автоматически с самого быстрого устройства, поэтому смешивание различных типов дисков приводит к нестабильной производительности. Подробности см. в [1].
Советы по обслуживанию многоуровневых файловых систем Btrfs см. в #RAID.
Настройка файловой системы
Копирование при записи (CoW)
По умолчанию Btrfs постоянно использует copy-on-write для всех файлов. При записи данные не перезаписываются; вместо этого модифицированная копия блока записывается в новое место, а метаданные обновляются, чтобы указать на новое место. Подробности реализации, а также преимущества и недостатки см. в разделе Btrfs Sysadmin Guide.
Отключение CoW
nodatacow
. В сочетании с RAID 1 перебои в электропитании или другие источники повреждений могут привести к рассинхронизации данныхЧтобы отключить копирование при записи для вновь созданных файлов в смонтированном субтоме, используйте параметр монтирования nodatacow
. Это повлияет только на вновь созданные файлы. Для существующих файлов копирование при записи все равно будет происходить. Опция nodatacow
также отключает сжатие. Подробности смотрите в btrfs(5).
- в рамках одной файловой системы невозможно монтировать одни подтома с
nodatacow
, а другие сdatacow
. Опция монтирования первого смонтированного субтома применяется ко всем остальным субтомам.
Чтобы отключить копирование при записи для отдельных файлов/каталогов, выполните следующие действия:
$ chattr +C /dir/file
Это отключит копирование при записи для тех операций, в которых существует только одна ссылка на файл. Если ссылок больше одной, например, из-за клонирования файлов / облегченного клонирования или снимков файловой системы, копирование при записи все равно будет происходить. Обратите внимание, что начиная с coreutils 9.0, cp
пытается выполнять облегченные копии по умолчанию— см. cp(1) для более подробной информации.
- Для btrfs, флаг '
C
' должен быть установлен для новых или пустых файлов. Если он установлен на файле, который уже имеет блоки данных, то неизвестно, когда блоки, назначенные файлу, станут полностью стабильными. Если флаг 'C
' установлен для каталога, он не будет иметь никакого эффекта на каталог, но новые файлы, созданные в этом каталоге, будут иметь атрибутNo_COW
.
$ mv /path/to/dir /path/to/dir_old $ mkdir /path/to/dir $ chattr +C /path/to/dir $ cp -a --reflink=never /path/to/dir_old/. /path/to/dir $ rm -rf /path/to/dir_oldУбедитесь, что данные не используются во время этого процесса. Также обратите внимание, что
mv
или cp
без --reflink=never
, как описано ниже, работать не будут.Сжатие
Btrfs поддерживает прозрачное и автоматическое сжатие. Это уменьшает размер файлов, а также значительно увеличивает срок службы флеш-носителей за счет уменьшения усиления записи. См. Fedora:Changes/BtrfsByDefault#Compression, [2] и [3]. Это также может улучшить производительность, в некоторых случаях (например, однопоточные задачи с интенсивным файловым вводом-выводом), и в то же время явно ухудшить производительность в других случаях (например, многопоточные задачи и/или задачи с интенсивным процессором и большим файловым вводом-выводом). Более высокая производительность обычно достигается при использовании самых быстрых алгоритмов сжатия, zstd и lzo, и некоторые benchmarks предоставляют подробные сравнения.
Опция монтирования compress=alg
позволяет автоматически рассматривать каждый файл на предмет сжатия, где alg
- это либо zlib
, lzo
, zstd
, либо no
. (для отсутствия сжатия). Используя этот параметр, btrfs будет проверять, уменьшает ли сжатие первой порции данных. Если да, то вся запись в этот файл будет сжата. Если нет, то ничего не будет сжато. При использовании этой опции, если первая часть записи не уменьшится, сжатие не будет применено к записи, даже если остальные данные сильно уменьшатся. [4]. Это сделано для того, чтобы не заставлять диск ждать начала записи, пока все записываемые данные не будут полностью переданы btrfs и сжаты.
Вместо этого можно использовать опцию монтирования compress-force=alg
, которая заставляет btrfs пропустить проверку, сжимает ли сжатие первую часть, и включает автоматическую попытку сжатия для каждого файла. В худшем случае это может привести к (незначительному) увеличению загрузки процессора без всякой цели. Однако эмпирическое тестирование на нескольких системах смешанного использования показало значительное улучшение примерно на 10% сжатия диска при использовании compress-force=zstd
по сравнению с просто compress=zstd
, который также имел 10% сжатие диска.
Только файлы, созданные или измененные после добавления опции монтирования, будут сжаты.
Чтобы применить сжатие к существующим файлам, используйте команду btrfs filesystem defragment -calg
, где alg
- это zlib
, lzo
или zstd
. Например, чтобы повторно сжать всю файловую систему с помощью zstd, выполните следующую команду:
# btrfs filesystem defragment -r -v -czstd /
Чтобы включить сжатие при установке Arch на пустой раздел Btrfs, используйте опцию compress
при монтирование файловой системы: mount -o compress=zstd /dev/sdxY /mnt/
. Во время настройки добавьте compress=zstd
в опции монтирования корневой файловой системы в fstab.
compress
; для этого примените chattr +c
к файлу. Когда эта опция применяется к каталогам, новые файлы будут автоматически сжиматься по мере их появления.- Системы, использующие старые ядра или btrfs-progs без поддержки
zstd
, могут быть не в состоянии прочитать или восстановить вашу файловую систему, если вы используете эту опцию. - GRUB ввел поддержку zstd в версии 2.04. Убедитесь, что вы действительно обновили загрузчик, установленный в MBR/ESP с тех пор, запустив
grub-install
с соответствующими опциями для вашей настройки BIOS/UEFI, поскольку это не делается автоматически. См. FS#63235.
Просмотр типов и коэффициентов сжатия
compsize берет список файлов (или всю файловую систему btrfs) и измеряет используемые типы сжатия и эффективные коэффициенты сжатия. Размер без сжатия может не совпадать с числом, выдаваемым другими программами, такими как du(1), потому что каждый объем учитывается один раз, даже если он перелинкован несколько раз, и даже если часть его больше нигде не используется, но не была собрана в мусор. Опция -x
удерживает его на одной файловой системе, что полезно в ситуациях типа compsize -x /
, чтобы избежать попыток поиска в подкаталогах не-btrfs и сбоя всего запуска.
Субтома
"Подтомник btrfs не является блочным устройством (и не может рассматриваться как устройство), вместо этого подтомник btrfs можно рассматривать как пространство имен файлов POSIX. Доступ к этому пространству имен может осуществляться через подтомный том верхнего уровня файловой системы, или он может быть смонтирован сам по себе." [5].
Каждая файловая система Btrfs имеет подтомник верхнего уровня с идентификатором 5. Он может быть смонтирован как /
(по умолчанию), или вместо него может быть смонтирован другой субтом mounting subvolumes. Подтома можно перемещать в файловой системе, и они идентифицируются скорее по их идентификатору, чем по пути.
Более подробную информацию можно найти по следующим ссылкам:
- Btrfs Wiki SysadminGuide#Subvolumes
- Btrfs Wiki Начало работы#Основные команды файловой системы
- Btrfs Wiki Деревья.
Создание подтома
Чтобы создать субтом:
# btrfs subvolume create /path/to/subvolume
Список подтомов
Чтобы просмотреть список текущих подтомов и их идентификаторы под path
:
# btrfs subvolume list -p path.
Удаление подтома
Чтобы удалить подтомник:
# btrfs subvolume delete /path/to/subvolume.
Начиная с Linux 4.18, можно также удалять подтомник как обычный каталог (rm -r
, rmdir
).
Монтирование подтомов
Подтомные тома можно монтировать как разделы файловой системы, используя флаги монтирования subvol=/path/to/subvolume
или subvolid=objectid
. Например, вы можете иметь субтом с именем subvol_root
и монтировать его как /
. Можно имитировать традиционные разделы файловой системы, создавая различные подтома на верхнем уровне файловой системы и затем монтируя их в соответствующих точках монтирования. Предпочтительнее монтировать, используя subvol=/path/to/subvolume
, а не субтом, поскольку субтом может измениться при восстановлении #Snapshots, что потребует изменения конфигурации монтирования.
/
(что делается по умолчанию). Вместо этого следует создать подтомник для хранения фактических данных и смонтировать его как /
.- Большинство опций монтирования применяются к всей файловой системе, и только опции для первого монтируемого субтома будут иметь силу. Это связано с недостаточной реализацией и может измениться в будущем.
Смотрите в Btrfs Wiki FAQ, какие опции монтирования можно использовать для каждого подтома.
Смотрите Snapper#Предлагаемая схема файловой системы, Btrfs SysadminGuide#Managing Snapshots и Btrfs SysadminGuide#Layout для примеров схем файловых систем с использованием субтомов.
Полный список опций монтирования, специфичных для btrfs, приведен в разделе btrfs(5).
Монтирование субтома в качестве корневого
Чтобы использовать субтом в качестве корневой точки монтирования, укажите субтом через kernel parameter, используя rootflags=subvol=/path/to/subvolume
. Отредактируйте корневую точку монтирования в /etc/fstab
и укажите параметр монтирования subvol=
. В качестве альтернативы можно указать субтом с его id, rootflags=subvolid=objectid
в качестве параметра ядра и subvolid=objectid
в качестве опции монтирования в /etc/fstab
. Предпочтительнее монтировать, используя subvol=/path/to/subvolume
, а не субтом, поскольку субтом может измениться при восстановлении #Snapshots, что потребует изменения конфигурации монтирования, иначе система не загрузится.
Изменение субтома по умолчанию
Подтом по умолчанию монтируется, если не указан параметр монтирования subvol=
. Чтобы изменить субтом по умолчанию, выполните следующие действия:
# btrfs subvolume set-default subvolume-id /.
где subvolume-id можно найти с помощью listing.
grub-install
снова, чтобы уведомить загрузчик об изменениях. См. эту тему форума.Изменение подтома по умолчанию с помощью btrfs subvolume set-default
сделает верхний уровень файловой системы недоступным, за исключением использования опций монтирования subvol=/
или subvolid=5
[6].
Квота
Поддержка квот в Btrfs реализована на уровне субтома с помощью групп квот или qgroup: По умолчанию каждому субтому назначается группа квот в виде 0/subvolume_id. Однако при желании можно создать группу квот с любым номером.
Для использования qgroups необходимо сначала включить квотирование с помощью команды
# btrfs quota enable path
С этого момента вновь созданные субтома будут контролироваться этими группами. Чтобы ретроспективно включить их для уже существующих субтомов, включите квотирование в обычном режиме, затем создайте qgroup (группу квотирования) для каждого из этих субтомов, используя их subvolume_id, и повторно просканируйте их:
# btrfs subvolume list path | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} path # btrfs quota rescan path
Группы квот в Btrfs образуют древовидную иерархию, в которой qgroups прикреплены к субтомам. Ограничения на размер устанавливаются для каждой qgroup и применяются при достижении любого предела в дереве, содержащем данный субтом.
Ограничения на группы квот могут применяться либо к общему использованию данных, либо к использованию данных без общего доступа, либо к использованию сжатых данных, либо к обоим. Копирование и удаление файлов могут влиять на лимиты, так как лимит нераспределенных данных другой qgroup может измениться, если файлы исходного тома удалены и осталась только одна копия. Например, свежий снимок разделяет почти все блоки с исходным субтомом, новые записи в любой из субтомов будут увеличивать эксклюзивный лимит, удаление общих данных в одном томе увеличивает эксклюзивный лимит в другом.
Чтобы применить ограничение к qgroup, используйте команду btrfs qgroup limit
. В зависимости от использования вы можете использовать либо общий лимит, либо неразделенный лимит (-e
), либо сжатый лимит (-c
).
Чтобы показать использование и лимиты для заданного пути в файловой системе, используйте
# btrfs qgroup show -reF path
Интервал фиксации
Периодичность записи данных в файловую систему диктуется самой Btrfs и общесистемными настройками. По умолчанию Btrfs устанавливает 30-секундный интервал между контрольными точками, через который новые данные фиксируются в файловой системе. Это можно изменить, добавив опцию монтирования commit
в /etc/fstab
для раздела btrfs.
LABEL=arch64 / btrfs defaults,compress=zstd,commit=120 0 0
Общесистемные настройки также влияют на интервалы фиксации. Они включают файлы в разделе /proc/sys/vm/*
и выходят за рамки данной вики-статьи. Документация по ядру для них доступна по адресу https://docs.kernel.org/admin-guide/sysctl/vm.html.
SSD TRIM
Файловая система Btrfs может освобождать неиспользуемые блоки с SSD диска, поддерживая команду TRIM. Начиная с версии ядра 5.6 имеется поддержка асинхронного отбрасывания, включаемая опцией монтирования discard=async
. Освобожденные экстенты не отбрасываются сразу, а группируются и обрезаются позже отдельным рабочим потоком, что улучшает задержку фиксации.
Дополнительную информацию о включении и использовании TRIM можно найти в Solid State Drives#TRIM.
Использование
Файл подкачки
Файл_подкачки в Btrfs поддерживаются начиная с ядра Linux 5.0.[7]. Правильный способ инициализации файла подкачки заключается в том, чтобы сначала создать подтомник без снэпшотов для размещения файла, а затем установить атрибут No_COW
на весь каталог с помощью chattr.
# chattr +C /path/to/swapsubvolume
С этого момента любой новый файл, созданный внутри поддиска подкачки, будет иметь установленный атрибут No_COW
.
Продолжите действия в разделе Файл подкачки#Создание файла подкачки. Настройка гибернации для файла подкачки описана в Power_management_(Русский)/Suspend_and_hibernate_(Русский)#Гибернация_в_файл_подкачки_на_Btrfs.
- Файл подкачки не может находиться на подтоме с моментальным снимком. Правильной процедурой является создание нового подтома для размещения в нем файла подкачки.
- Не поддерживаются файлы подкачки на файловых системах, которые охватывают несколько устройств. См. btrfs(5) § SWAPFILE SUPPORT и обсуждение на форумах Arch.
Отображение используемого/свободного пространства
Общие инструменты пользовательского пространства linux, такие как df(1), будут неточно отображать свободное пространство на разделе Btrfs. Рекомендуется использовать btrfs filesystem usage
для запроса разделов Btrfs. Например, для получения полной статистики распределения и использования устройств:
# btrfs filesystem usage /
btrfs filesystem usage
в настоящее время не работает корректно с RAID5/RAID6
RAID-уровнями.В качестве альтернативы, btrfs filesystem df
позволяет быстро проверить использование выделенного пространства без необходимости запуска от имени root:
$ btrfs filesystem df /
Более подробную информацию см. в [8].
Те же ограничения относятся к инструментам, анализирующим использование пространства для некоторого подмножества файловой системы, таким как du(1) или ncdu(1), поскольку они не учитывают перелинковку, снимки и сжатие. Вместо этого смотрите btduAUR и compsize для альтернатив с поддержкой btrfs.
Дефрагментация
autodefrag
в этих версиях, следует даже использовать noautodefrag
, чтобы убедиться, что автоматическая дефрагментация отключена. См. [9] и [10].Btrfs поддерживает онлайн-дефрагментацию через опцию монтирования autodefrag
, см. btrfs(5) § MOUNT OPTIONS. Чтобы вручную дефрагментировать корень, используйте:
# btrfs filesystem defragment -r /
Использование вышеприведенной команды без ключа -r
приведет к дефрагментации только метаданных, хранящихся в подтоме, содержащем каталог. Это позволяет дефрагментировать один файл, просто указав путь.
Дефрагментация файла, имеющего COW-копию (либо моментальную копию, либо копию, созданную с помощью cp
или bcp), плюс использование переключателя -c
с алгоритмом сжатия может привести к созданию двух несвязанных файлов, что эффективно увеличит использование диска.
RAID
Btrfs предлагает встроенный "RAID" для #Многоустройственная файловая системаов. Примечательными особенностями, которые отличают btrfs RAID от mdadm, являются самовосстанавливающиеся избыточные массивы и онлайн балансировка. Дополнительную информацию см. на вики-странице Btrfs. На странице сисадмина Btrfs также есть раздел с более подробной технической информацией.
Скраб
В Btrfs Wiki Glossary говорится, что Btrfs scrub - это "[a]онлайн инструмент проверки файловой системы. Считывает все данные и метаданные в файловой системе, использует контрольные суммы и дубликаты копий из RAID-хранилища для выявления и восстановления поврежденных данных."
Запуск вручную
Чтобы запустить (фоновый) скруб на файловой системе, содержащей /
:
# btrfs scrub start /
Чтобы проверить состояние запущенного скраба, выполните следующие действия:
# btrfs scrub status /
Запуск с помощью службы или таймера
Пакет btrfs-progs приносит блок btrfs-scrub@.timer
для ежемесячной очистки указанной точки монтирования. Включите таймер с помощью экранированного пути, например, btrfs-scrub@-.timer
для /
и btrfs-scrub@home.timer
для /home
. Вы можете использовать systemd-escape -p /path/to/mountpoint
для экранирования пути, подробности смотрите в systemd-escape(1).
Вы также можете запустить скраб, starting btrfs-scrub@.service
(с тем же кодированным путем). Преимущество этого способа перед btrfs scrub
(от имени пользователя root) в том, что результаты очистки будут записаны в журнал systemd journal.
На больших NVMe-дисках с недостаточным охлаждением (например, в ноутбуке) скрабирование может считывать данные достаточно быстро и долго, чтобы диск сильно нагрелся. Если вы запускаете скрабы с помощью systemd, вы можете легко ограничить скорость скрабирования с помощью опции IOReadBandwidthMax
, описанной в systemd.resource-control(5), используя drop-in файл.
Баланс
"Баланс" снова пропускает все данные в файловой системе через аллокатор. В первую очередь он предназначен для восстановления баланса данных в файловой системе между устройствами, когда устройство добавляется или удаляется. Баланс восстанавливает недостающие копии для избыточных уровней RAID, если устройство вышло из строя." [11] См. Страница FAQ по Upstream.
В файловой системе с одним устройством баланс может быть также полезен для (временного) уменьшения количества выделенных, но неиспользуемых (мета)чанков данных. Иногда это необходимо для устранения проблем "filesystem full".
# btrfs balance start --bg / # btrfs balance status /
Снапшоты
"Снапшот - это просто субтом, который делится своими данными (и метаданными) с другим субтомом, используя возможности COW в btrfs." Подробности смотрите в Btrfs Wiki SysadminGuide#Snapshots.
Чтобы создать моментальный снимок:
# btrfs subvolume snapshot source [dest/]name
Для создания снимка, доступного только для чтения, добавьте флаг -r
. Чтобы создать доступную для записи версию снимка, доступного для чтения, просто создайте его снимок.
- Возможно преобразование моментального снимка на месте из readonly в writeable. Однако, это не рекомендуется, поскольку это вызывает проблемы с любой будущей инкрементной отправкой/получением. Создание нового снимка с возможностью записи предотвращает такие проблемы.
- Снимки не являются рекурсивными. Каждый вложенный подтомник будет пустым каталогом внутри моментального снимка.
Отправка/получение
Подтомник может быть отправлен на stdout или в файл с помощью команды send
. Обычно это наиболее полезно при передаче в команду Btrfs receive
. Например, для отправки снимка с именем /root_backup
(возможно, снимок, который вы сделали ранее из /
) в /backup
, вы должны сделать следующее:
# btrfs send /root_backup | btrfs receive /backup
Отправляемый снимок должен быть доступен только для чтения. Приведенная выше команда полезна для копирования подтома на внешнее устройство (например, USB-диск, смонтированный по адресу /backup
выше).
Вы также можете отправить только разницу между двумя моментальными снимками. Например, если вы уже отправили копию root_backup
выше и сделали новый снимок с возможностью чтения в вашей системе с именем root_backup_new
, то для отправки только инкрементной разницы в /backup
сделайте следующее:
# btrfs send -p /root_backup /root_backup_new | btrfs receive /backup
Теперь в root_backup_new
будет присутствовать новый субтом с именем /backup
.
Смотрите Btrfs Wiki's Incremental Backup page и #Incremental backup to external drive о том, как использовать это для инкрементального резервного копирования и об инструментах, автоматизирующих этот процесс.
Дедупликация
Используя копирование при записи (CoW), Btrfs может копировать файлы или целые подтома без фактического копирования данных. Однако каждый раз, когда файл изменяется, создается новая "правильная" копия. Дедупликация делает еще один шаг вперед, активно определяя блоки данных с общими последовательностями и объединяя их в объем с той же семантикой копирования при записи.
Инструменты, предназначенные для дедупликации разделов в формате Btrfs, включают duperemove, bees, bedupAUR и btrfs-dedup. Также может потребоваться просто дедуплицировать данные на уровне файлов, используя, например, rmlint, jdupesAUR или dduper-gitAUR. Обзор возможностей этих программ и дополнительную информацию можно найти на upstream Wiki entry.
Кроме того, разработчики Btrfs работают над внутриполосной (также известной как синхронная или поточная) дедупликацией, то есть дедупликацией, выполняемой при записи новых данных в файловую систему. В настоящее время это все еще эксперимент, который разрабатывается вне дерева. Пользователям, желающим протестировать новую функцию, следует ознакомиться с соответствующей вики-страницей ядра.
Изменение размера
Вы можете увеличить файловую систему до максимального пространства, доступного на устройстве, или указать точный размер. Убедитесь, что вы увеличили размер устройства или логического тома, прежде чем пытаться увеличить размер файловой системы. При указании точного размера файловой системы убедитесь, что новый размер удовлетворяет следующим условиям:
- Новый размер должен быть больше размера существующих данных; в противном случае произойдет потеря данных.
- Новый размер должен быть равен или меньше текущего размера устройства, поскольку размер файловой системы не может выходить за пределы доступного пространства.
При уменьшении размера файловой системы на устройстве убедитесь, что новый размер удовлетворяет следующим условиям:
- Новый размер должен быть больше размера существующих данных; в противном случае произойдет потеря данных.
- Новый размер должен быть равен или меньше текущего размера устройства, так как размер файловой системы не может выходить за пределы доступного пространства.
Чтобы увеличить размер файловой системы до максимально доступного размера устройства:
# btrfs filesystem resize max /
Чтобы расширить файловую систему до определенного размера:
# btrfs filesystem resize size /
Замените size
на желаемый размер в байтах. Вы также можете указать единицы измерения значения, например K (килобайты), M (мебибайты) или G (гибибайты). В качестве альтернативы можно указать увеличение или уменьшение текущего размера, дополнив значение знаком плюс (+) или минус (-) соответственно:
# btrfs filesystem resize +size / # btrfs filesystem resize -size /
Известные проблемы
Несколько ограничений следует знать, прежде чем пробовать.
Шифрование
Btrfs не имеет встроенной поддержки шифрования, но это может появиться в будущем. Пользователи могут зашифровать раздел перед запуском mkfs.btrfs
. См. dm-crypt/Шифрование всей системы#Вложенные тома Btrfs с подкачкой.
Существующие файловые системы Btrfs могут использовать что-то вроде EncFS или TrueCrypt, хотя, возможно, без некоторых возможностей Btrfs.
Проблемы проверки btrfs
Инструмент btrfs check
имеет известные проблемы и не должен запускаться без дополнительного чтения, см. раздел #btrfs check.
Советы и рекомендации
Диск Btrfs без разделов
Btrfs может занимать все устройство хранения данных, заменяя схемы разбиения MBR или GPT, используя subvolumes для имитации разделов. Однако использование схемы без разделов не обязательно для того, чтобы просто Создать файловую систему Btrfs на существующем раздел, который был создан другим методом. Существуют некоторые ограничения для однодисковых установок без разделов:
- Невозможно разместить другие файловые системы на другом разделе того же диска.
- В связи с предыдущим пунктом, размещение ESP на этом диске невозможно. Для загрузки UEFI необходимо другое устройство.
- Если используется версия ядра Linux до 5.0, вы не можете использовать swap area, так как Btrfs не поддерживала swap files до 5.0 и нет места для создания swap partition.
Чтобы перезаписать существующую таблицу разделов в Btrfs, выполните следующую команду:
# mkfs.btrfs /dev/sdX
Например, используйте /dev/sda
, а не /dev/sda1
. Последний вариант форматирует существующий раздел, а не заменяет всю схему разметки. Поскольку корневым разделом является Btrfs, убедитесь, что btrfs
скомпилирован в ядро, или поместите btrfs
в mkinitcpio.conf#MODULES и Mkinitcpio_(Русский)#Создание_загрузочного_образа.
Установите загрузчик, как для устройства хранения данных с Partitioning_(Русский)#Главная_загрузочная_запись_(MBR). Смотрите Syslinux#Ручная установка или GRUB/Типы и трюки#Установка на диск с разделами или без разделов. Если ядро не загружается из-за Failed to mount /sysroot.
, добавьте GRUB_PRELOAD_MODULES="btrfs"
в /etc/default/grub
и создайте конфигурацию grub (GRUB#Generate the main configuration file).
Преобразование Ext3/4 в Btrfs
Загрузитесь с установочного CD, а затем выполните конвертацию:
# btrfs-convert /dev/partition
Смонтируйте раздел и проверьте преобразование, проверив файлы. Обязательно измените /etc/fstab
, чтобы отразить изменения (type на btrfs
и fs_passno [последнее поле] на 0
, поскольку Btrfs не выполняет проверку файловой системы при загрузке). Также обратите внимание, что UUID раздела изменился, поэтому обновите fstab соответствующим образом при использовании UUID. chroot
в систему и перестройте список меню загрузчиков (см. Install_Arch_Linux_from_existing_Linux_(Русский)). При преобразовании корневой файловой системы, пока она еще chrooted, запустите mkinitcpio -p linux
для регенерации initramfs, иначе система не сможет успешно загрузиться.
/ext2_saved
все еще там. Для отката используйте команду btrfs-convert -r /dev/partition
, которая отменит все изменения в новой файловой системе btrfs.Убедившись в отсутствии проблем, завершите преобразование, удалив резервный подтом ext2_saved
. Обратите внимание, что без него вы не сможете вернуться к ext3/4.
# btrfs subvolume delete /ext2_saved
Наконец, balance файловая система восстановит пространство.
Помните, что некоторые приложения, которые были установлены ранее, должны быть адаптированы к Btrfs.
Аппаратное ускорение контрольной суммы
CRC32 - это новая инструкция в Intel SSE4.2. Чтобы проверить, является ли контрольная сумма Btrfs аппаратно ускоренной:
# dmesg | grep crc32c
Btrfs loaded, crc32c=crc32c-intel
Если вы видите crc32c=crc32c-generic
, это, вероятно, потому, что ваш корневой раздел - Btrfs, и вам придется скомпилировать crc32c-intel
в ядро, чтобы заставить его работать. Вставка crc32c-intel
в mkinitcpio.conf не работает.
Восстановление повреждений
btrfs check
имеет известные проблемы, см. раздел #btrfs checkbtrfs-check не может быть использован на смонтированной файловой системе. Чтобы иметь возможность использовать btrfs-check без загрузки с live USB, добавьте его на начальный ramdisk:
/etc/mkinitcpio.conf
BINARIES=(btrfs)
Затем, если возникнут проблемы с загрузкой, утилита будет доступна для восстановления.
Дополнительную информацию см. на Btrfs Wiki page.
Загрузка в моментальные снимки
Для загрузки в снимок применяется та же процедура, что и для монтирования подтома в качестве корневого раздела, как описано в разделе mounting a subvolume as your root partition, поскольку снимки можно монтировать как подтома.
- При использовании GRUB вы можете автоматически заполнить меню загрузки снимками btrfs при регенерации конфигурационного файла с помощью grub-btrfs или grub-btrfs-gitAUR.
- При использовании rEFInd вы можете автоматически заполнить загрузочное меню снимками btrfs с помощью refind-btrfsAUR, после Systemd_(Русский)#Использование_юнитов.
refind-btrfs.service
.
Использование подтомов Btrfs с помощью systemd-nspawn
См. статьи Systemd-nspawn#Use Btrfs subvolume as container root и Systemd-nspawn#Use temporary Btrfs snapshot of container.
Сокращение времени доступа к обновлению метаданных
Из-за того, что Btrfs работает по принципу copy-on-write, простой доступ к файлам может вызвать копирование и запись метаданных. Уменьшение частоты обновления времени доступа может устранить это непредвиденное использование диска и увеличить производительность. Смотрите fstab#atime options для доступных опций.
Инкрементное резервное копирование на внешний диск
Следующие пакеты используют btrfs send
и btrfs receive
для инкрементной отправки резервных копий на внешний диск. Обратитесь к их документации, чтобы увидеть различия в реализации, возможностях и требованиях.
- btrbk — Инструмент для создания моментальных снимков и удаленных резервных копий подтомов Btrfs.
- buttersink — Buttersink - это как rsync для моментальных снимков Btrfs. Требуется Python 2.
- snap-sync — Используйте снимки Snapper для резервного копирования на внешний диск или удаленную машину.
- snapsync — Утилита синхронизации для Snapper.
Следующий пакет позволяет создавать резервные копии моментальных снимков snapper на файловые системы, отличные от Btrfs.
- snapborg — borgmatic-подобный инструмент, который интегрирует моментальные снимки snapper с borg резервными копиями.
Устранение неполадок == Устранение неполадок ==
Для общего устранения неполадок смотрите Btrfs Problem FAQ.
GRUB
Смещение раздела
Проблема смещения может возникнуть, когда вы пытаетесь встроить core.img
в диск с разделами. Это означает, что it is OK можно внедрить core.img
от GRUB в пул Btrfs на диске без разделов (например, /dev/sdX
) напрямую.
GRUB может загружать разделы Btrfs, однако модуль может быть больше, чем у других файловая система. А файл core.img
, созданный grub-install
, может не поместиться в первые 63 сектора (31.5KiB) диска между MBR и первым разделом. Современные инструменты разметки, такие как fdisk
и gdisk
, позволяют избежать этой проблемы, смещая первый раздел примерно на 1 или 2 Мбайт.
Отсутствующий корень
Пользователи сталкиваются со следующим: error no such device: root
при загрузке с RAID-массива, то отредактируйте /usr/share/grub/grub-mkconfig_lib и уберите обе кавычки из строки echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"
. Пересоздайте конфиг для grub и система должна загрузиться без ошибок.
Монтирование затянулось
Иногда, особенно на больших массивах RAID1, монтирование может прерваться во время загрузки с сообщением в журнале, например:
Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating. Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result 'timeout'. Jan 25 18:05:46 host systemd[1]: Failed to mount /storage. Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)> Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed
Это можно легко обойти, обеспечив более длительный тайм-аут с помощью специфической для системы опции монтирования x-systemd.mount-timeout
в fstab. Например:
/dev/sda /storage btrfs rw,relatime,x-systemd.mount-timeout=5min 0 0
BTRFS: open_ctree failed
По состоянию на ноябрь 2014 года, похоже, существует ошибка в systemd или mkinitcpio, вызывающая следующую ошибку на системах с многоуровневой файловой системой Btrfs, использующих хук btrfs
в mkinitcpio.conf
:
BTRFS: open_ctree failed mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg|tail or so. You are now being dropped into an emergency shell.
Обходным решением является удаление btrfs
из массива HOOKS
в /etc/mkinitcpio.conf
и добавление btrfs
в массив MODULES
. Затем Mkinitcpio_(Русский)#Создание_загрузочного_образа и перезагрузитесь.
Вы получите ту же ошибку, если попытаетесь смонтировать raid-массив без одного из устройств. В этом случае необходимо добавить опцию монтирования degraded
в /etc/fstab
. Если ваш root находится на массиве, вы также должны добавить rootflags=degraded
в параметры ядра.
По состоянию на август 2016 года, потенциальным обходным решением этой ошибки является монтирование массива только по одному диску в /etc/fstab
и разрешение btrfs обнаруживать и добавлять остальные диски автоматически. Похоже, что сбою способствуют групповые идентификаторы, такие как UUID и LABEL. Например, массив RAID1 из двух устройств, состоящий из 'disk1' и disk2', будет иметь присвоенный ему UUID, но вместо UUID будет использоваться только /dev/mapper/disk1
в /etc/fstab
. Более подробное объяснение см. в следующей статье blog post.
Другим возможным обходным решением является удаление хука udev
в mkinitcpio.conf и замена его хуком systemd
. В этом случае btrfs
не должен находиться в массивах HOOKS
или MODULES
.
Смотрите оригинальную тему на форумах и FS#42884 для дальнейшей информации и обсуждения.
Проверка btrfs
btrfs check
, настоятельно рекомендуется создать System_maintenance_(Русский)#Резервное_копирование и проконсультироваться с btrfs-check(8) перед выполнением btrfs check
с ключом --repair
.Команда btrfs-check(8) может быть использована для проверки или восстановления размонтированной файловой системы Btrfs. Однако этот инструмент ремонта еще не доработан и не может исправить некоторые ошибки файловой системы, даже те, которые не делают файловую систему немонтируемой.
См. также
- Официальный сайт
- Связанные с производительностью
- Разное
- Funtoo:BTRFS Fun
- Ави Миллер представляет Btrfs на SCALE 10x, январь 2012 г.
- Резюме выступления Криса Мейсона с LFCS 2012 г.
- Btrfs: прекратите предоставлять операцию bmap, чтобы избежать повреждений файла подкачки 2009-01-21
- Выполнение быстрого инкрементального резервного копирования с помощью Btrfs Send and Receive