[Btrfs] Btrfs - что это и как это

Btrfs (иногда произносится butter fs) — новая свободная файловая система, разрабатываемая при поддержке компании Oracle. Распространяется по лицензии GPL. Несмотря на то, что её разработка ещё далека от завершения, 9 января 2009 года файловая система была интегрирована в ядро Linux, и доступна в Debian Squueze.

Хотя Btrfs была включена в ядро 2.6.29, разработчики утверждают, что “начиная от ядра 2.6.31, мы только планируем сделать впредь совместимый формат изменений диска”. Разработчики по-прежнему хотят улучшить пользовательские/управленческие средства, чтобы сделать их более удобными в использовании.

Ext2/3/4 могут быть превращены в Btrfs (но не наоборот).

Примеры команд по работе с btrfs

Создание файловой системы:

mkfs.btrfs

Управление томами, подтомами, снимками; проверка целостности файловой системы:

btrfsctl

Сканирование в поисках файловых систем btrfs:

btrfsctl -a
btrfsctl -A /dev/sda2

Создание снимков и подтомов:

mount -t btrfs -o subvol=. /dev/sda2 /mnt
btrfsctl -s new_subvol_name /mnt
btrfsctl -s snapshot_of_default /mnt/default
btrfsctl -s snapshot_of_new_subvol /mnt/new_subvol_name
btrfsctl -s snapshot_of_a_snapshot /mnt/snapshot_of_new_subvol
ls /mnt

Проверка extent-деревьев файловой системы:

btrfsck

Вывести метаданные в текстовой форме:

debug-tree
debug-tree /dev/sda2 >& big_output_file

Показать файловые системы btrfs на жестком диске:

btrfs-show /dev/sda*

Дефрагментация (по умолчанию не требуется):

btrfs filesystem defragment /mnt

или

btrfs filesystem defragment /mnt/file.iso

Превращение файловой системы ext3 в btrfs

Файловую систему ext3 можно превратить в btrfs, и работать с ней дальше уже как с новой файловой системой. Причём состояние исходной файловой системы ext3, будет доступно и потом.

# Always run fsck first
fsck.ext3 -f /dev/xxx

# Convert from Ext3->Btrfs
btrfs-convert /dev/xxx

# Mount the resulting Btrfs filesystem
mount -t btrfs /dev/xxx /btrfs

# Mount the ext3 snapshot
mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved

# Loopback mount the image file
mount -t ext3 -o loop,ro /ext2_saved/image /ext3

Теперь в каталоге /ext3 видно состояние исходной файловой системы.

Размонтирование происходит в обратном порядке:

umount /ext3
umount /ext2_saved
umount /btrfs

Можно вернуться на файловую систему ext3 и потерять сделанные изменения:

btrfs-convert -r /dev/xxx

Или можно остаться на btrfs и удалить сохранённый образ файловой системы ext3:

rm /ext2_saved/image

Примечание: у новой файловой системы после конвертирования иногда бывает очень большой размер метаданных.

Посмотреть размер метаданных:

btrfs filesystem df /mnt/data1tb/

Нормализировать их размер:

btrfs fi balance /mnt/btrfs

Изменение размера файловой системы и разделов

Для btrfs доступно онлайн (на лету) изменение размера файловой системы. Для начала нужно примонтировать нужный раздел:

mount -t btrfs /dev/xxx /mnt

Добавление 2Гб:

btrfs filesystem resize +2G /mnt

или

btrfsctl -r +2g /mnt

Уменьшение на 4Гб:

btrfs filesystem resize -4g /mnt

или

btrfsctl -r -4g /mnt

Задать размер в 20Гб файловой системе:

btrfsctl -r 20g /mnt

или

btrfs filesystem resize 20g /mnt

Использование всего свободного места:

btrfs filesystem resize max /mnt

или

btrfsctl -r max /mnt

Вышеперечисленные команды справедливы только для файловой системы. Чтобы изменить размер раздела, надо воспользоваеться еще другими утилитами, например fdisk. Рассмотрим пример для уменьшения раздела на 4Гб. Монтируем и уменьшаем раздел:

mount -t btrfs /dev/xxx /mnt
btrfsctl -r -4g /mnt

Теперь отмонтируем раздел и используем fdisk:

umount /mnt
fdisk /dev/xxx

где:

  • dev/xxx - жесткий диск с нужным нам разделом
  • p - выводит список разделов, узнаем номер нужного нам (N)
  • d - удалить раздел, не пугайтесь
  • Номер раздела (1-4): N - вводим число - номер нужного нам раздела
  • n - создать новый раздел на месте старого:
  • p - основной раздел
  • Номер раздела (1-4): N - вводим конечно тоже самое число
  • Первый цилиндр, ставим тот, который программа предлагает по умолчанию
  • Последний цилиндр ставим как разницу старого размера раздела и 4Гб: например, если размер был 100Гб, ставим: +96G
  • p - посмотреть в списке разделов, все ли сделано правильно
  • w - записать изменения

После надо перемонтировать раздел или перезагрузиться. Проверяем на ошибки новый раздел(нужно отмонтировать):

btrfsck /dev/xxx

Profit!

Обсудить статью в чате TG или в Slack