Btrfs

Материал из ALT Linux Wiki

BTRFS на ALT

Подтом (subvolume) не является блочным устройством, но в каждом томе btrfs создаётся один подтом верхнего уровня (subvolid=5), в этом подтоме могут создаваться другие подтома и снапшоты. Подтома (подразделы, subvolumes) создаются ниже вершины дерева btrfs по мере необходимости, например, для / и /home создаются подтома с именами @ и @home. Это означает, что для монтирования подтомов необходимы определенные параметры вместо корня системы btrfs по умолчанию:

  • подтом @ монтируется в / с помощью опции subvol=@
  • подтом @home (если он используется) монтируется с помощью параметра монтирования subvol=@home


Т.к. для Timeshift система должна быть установлена на раздел BTRFS с разбивкой на подразделы @ и @home, то в данной статье рассмотрен именно этот вариант.

В данной статье использовались дистрибутивы на основе десятой платформы.

Установка ALT на btrfs

В некоторых дистрибутивах ALT (Рабочая станция, Рабочая станция К, Сервер Виртуализации) btrfs доступен в инсталляторе.

Создание подтомов в инсталляторе

В дистрибутиве Рабочая станция К, начиная с версии 10.1 можно создать подтома (@ и @home) в инсталляторе.

В этом случае после установки системы не потребуется никаких действий по созданию подтомов.

Автоматический профиль разбиения диска

Если выбрать автоматический профиль разбиения диска «Установка рабочей станции (совместима с Timeshift)»:

Профиль разбиения диска «Установка рабочей станции (совместима с Timeshift)»

то при разбиении диска будут выделены отдельные разделы для подкачки и для корневой файловой системы (файловая система BtrFS). При этом будут созданы:

  • подтом @ с точкой монтирования в /;
  • подтом @home с точкой монтирования в /home.

Основной раздел (ФС BtrFS) с разбивкой на подразделы @ и @home

Ручной профиль

Создание подтомов @ и @home при выборе профиля разбиения диска «Вручную»:

  1. Создать раздел для корневой файловой системы. При указании файловой системы, выбрать BtrFS:
    Создание раздела с файловой системой BtrFS
    Не указывать точку монтирования, для этого в следующем окне нажать кнопку «Отменить»:
    Точка монтирования
  2. Создать два подтома (@ и @home):
    Нажать кнопку «Создать подтом»:
    Кнопка «Создать подтом»
    Указать имя подтома (@, @home) или путь до него (/@, /@home):
    Имя подтома
  3. Указать точки монтирования для каждого подтома:
    Нажать кнопку «Изменить точку монтирования»:
    Кнопка «Изменить точку монтирования»
    Указать точку монтирования:
    Указание точки монтирования для подтома @home

Результат:

Основной раздел (ФС BtrFS) с разбивкой на подразделы @ и @home

Ручной профиль

Если инсталлятор не поддерживает разбивку на подтома, то в этом случае при установке системы, на этапе «Подготовка диска» можно воспользоваться профилем разбиения вручную, создать swap и корень системы (файловая система BtrFS):

Разметка диска

Далее установить систему как обычно и после установки системы создать подтома (см. раздел Создание подтомов).

Преобразование Ext3/4 в Btrfs

Внимание! Убедитесь, что у вас есть рабочие резервные копии данных.


Внимание! Используйте btrfs-convert из btrfs-progs 5.15.1-alt1 и выше.


Если дистрибутив не позволяет выбрать файловую систему BtrFS на этапе установки, можно при установке системы выбрать файловую систему Ext2/3/4, а после завершения установки системы преобразовать файловую систему в BtrFS.

Загрузиться в LiveCD. Убедиться что корень системы установлен в /dev/sda2:

# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  1,7G  1 loop /.ro
sda      8:0    0   48G  0 disk 
├─sda1   8:1    0 1023M  0 part 
└─sda2   8:2    0   47G  0 part 
sr0     11:0    1  4,9G  0 rom  /image

Проверить файловую систему на ошибки и выполнить конвертацию:

# fsck.ext4 /dev/sda2
e2fsck 1.46.2 (28-Feb-2021)
/dev/sda2: clean, 228869/3080192 files, 2106725/12320512 blocks

# btrfs-convert /dev/sda2
btrfs-convert from btrfs-progs v5.15.1 

Source filesystem:
  Type:           ext2
  Label:          
  Blocksize:      4096
  UUID:           94ce97d2-86c4-4f68-8130-98c360d094f2
Target filesystem:
  Label:          
  Blocksize:      4096
  Nodesize:       16384
  UUID:           94bbd745-0f41-4be1-becb-287f67df3f8e
  Checksum:       crc32c
  Features:       extref, skinny-metadata, no-holes (default)
    Data csum:    yes
    Inline data:  yes
    Copy xattr:   yes
Reported stats:
  Total space:     50464817152
  Free space:      40641953792 (80.54%)
  Inode count:         3080192
  Free inodes:         2851323
  Block count:        12320512
Create initial btrfs filesystem
Create ext2 image file
Create btrfs metadata
Copy inodes [O] [    223962/    228869]
Conversion complete

Смонтировать файловую систему и подготовить chroot:

# mount /dev/sda2 /mnt
# for i in dev sys proc run; do mount -o bind /$i /mnt/$i; done
# chroot /mnt/ /bin/bash

Просмотреть UUID файловой системы и скопировать его:

# blkid  | grep sda2
/dev/sda2: UUID="94bbd745-0f41-4be1-becb-287f67df3f8e" UUID_SUB="b6c759f5-1a11-4f51-b482-f366cc111d58" TYPE="btrfs"
Примечание: UUID файловой системы также отображается в выводе команды btrfs-convert.


Внести изменения в файл /etc/fstab: для корня системы изменить UUID, изменить тип файловой системы ext4→btrfs (исходная строка закомментирована):

#UUID=94ce97d2-86c4-4f68-8130-98c360d094f2      /       ext4    relatime        1       1
UUID=94bbd745-0f41-4be1-becb-287f67df3f8e      /       btrfs    relatime        1       1
Примечание: Возможно следует установить порядок проверки раздела при загрузке [последнее поле в строке] равным 0, так как Btrfs не выполняет проверку файловой системы при загрузке:
UUID=94bbd745-0f41-4be1-becb-287f67df3f8e      /       btrfs    relatime        1       0


Обновить GRUB:

# grub-install /dev/sda
Выполняется установка для платформы i386-pc.
Установка завершена. Ошибок нет.

# update-grub
Generating grub configuration file ...
Found theme: /boot/grub/themes/spworkstation/theme.txt
Found background image: /usr/share/plymouth/themes/spworkstation/grub.jpg
Found linux image: /boot/vmlinuz
Found initrd image: /boot/initrd.img
Found linux image: /boot/vmlinuz-std-def
skipping symlink: /boot/vmlinuz-std-def
Found linux image: /boot/vmlinuz-5.10.83-std-def-alt0.c9f.2
Found initrd image: /boot/initrd-5.10.83-std-def-alt0.c9f.2.img
done

Перегенерировать initrd, иначе система не загрузится. Для этого выполнить команду make-initrd с указанием версии ядра установленного по умолчанию:

# make-initrd --kernel=5.10.83-std-def-alt0.c9f.2
Примечание: Версию ядра можно увидеть в выводе команды update-grub или, выполнив команду:
# ls -1d /lib/modules/*
/lib/modules/5.10.83-std-def-alt0.c9f.2


Выйти из chroot, перезагрузиться.

Примечание: Если что-то пошло не так, всегда есть возможность отката, если резервный подтом ext2_saved не удалён. Для отмены изменений следует использовать команду btrfs-convert -r /dev/partition

.

Убедившись в отсутствии проблем, можно удалить подтом ext2_saved резервной копии:

# btrfs subvolume list  ./
ID 256 gen 3 top level 5 path ext2_saved

# btrfs subvolume delete /ext2_saved
Delete subvolume (no-commit): '//ext2_saved

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

Внимание! Дальнейшее описание представлено для legacy-режима.


Загрузиться в LiveCD.

Примонтировать систему в каталог /mnt/alt:

# mkdir /mnt/alt
# mount /dev/sda2 /mnt/alt/

Перейти в каталог /mnt/alt:

# cd /mnt/alt/

Создать подтома (@ и @home) в системе btrfs на разделе /dev/sda2, который смонтирован в /mnt/alt:

# btrfs subvolume create ./@
Create subvolume './@'
# btrfs subvolume create ./@home
Create subvolume './@home'

Убедиться, что подтома созданы верно (вывести список подтомов):

# btrfs subvolume list  ./
ID 256 gen 46 top level 5 path @
ID 257 gen 47 top level 5 path @home

Перенести каталоги с пользователями из каталога /home в /@home:

# mv  ./home/* ./@home/

Перенести остальные каталоги (кроме /@home и /home) в подтом @:

# mv ./boot ./@/
# mv  ./etc ./@/

и т.д. Каталог /home нужно не переносить, а скопировать в подтом @ (т.к. он будет точкой монтирования для подтома @home):

# cp -r  ./home ./@/

В каталоге /mnt/alt должно остаться три каталога:

# ls ./
@ home @home

Далее необходимо внести изменения в файл /etc/fstab и обновить загрузчик Grub. Для этого:

  1. Создать каталог /mnt/alt2
    # mkdir /mnt/alt2
    
  2. Проверить расположение системы и параметры монтирования:
    # mount |grep alt
    /dev/sda2 on /mnt/alt type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/)
    
  3. Примонтировать btrfs раздел с опцией subvol=@:
    # mount /dev/sda2 /mnt/alt2 -o subvol=@
    
  4. Примонтировать временные интерфейсные файловые системы в /mnt/alt2 (из хостовой системы в гостевую):
    # for i in dev sys proc run; do mount --bind -v /$i /mnt/alt2/$i; done
    mount: /dev bound on /mnt/alt2/dev.
    mount: /sys bound on /mnt/alt2/sys.
    mount: /proc bound on /mnt/alt2/proc.
    mount: /run bound on /mnt/alt2/run.
    
  5. Сделать chroot в /mnt/alt2:
    # chroot /mnt/alt2
    
  6. Внести изменения в /etc/fstab:
    UUID=9306bd96-eaee-41d9-a65d-6385c68357d2       /           btrfs   relatime,nofail,subvol=@        1       1
    UUID=9306bd96-eaee-41d9-a65d-6385c68357d2       /home       btrfs   relatime,nofail,subvol=@home        1       1
    UUID=14e23578-5cec-48cb-98e4-220e78138123       swap        swap    defaults
    
  7. Обновить загрузчик:
    # update-grub
    Generating grub configuration file ...
    Found theme: /boot/grub/themes/branding-xalt-kworkstation/theme.txt
    Found background image: /boot/grub/themes/branding-xalt-kworkstation/grub.png
    Found linux image: /boot/vmlinuz-un-def
    skipping symlink: /boot/vmlinuz-un-def
    Found linux image: /boot/vmlinuz
    Found initrd image: /boot/initrd.img
    Found linux image: /boot/vmlinuz-5.14.21-un-def-alt1
    Found initrd image: /boot/initrd-5.14.21-un-def-alt1.img
    Found memtest image: /boot/memtest-5.31b.bin
    done
    
  8. Установить загрузчик в /dev/sda (только обновления загрузчика недостаточно):
    # grub-install /dev/sda
    
  9. Выйти из chroot:
    # exit
    
  10. Перезагрузить систему.

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

Снимки/snapshots удобно делать и использовать в программе с графическим интерфейсом Timeshift.

Ссылки

См. также Первая версия

https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3