Btrfs
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)»:
то при разбиении диска будут выделены отдельные разделы для подкачки и для корневой файловой системы (файловая система BtrFS). При этом будут созданы:
- подтом @ с точкой монтирования в /;
- подтом @home с точкой монтирования в /home.
Ручной профиль
Создание подтомов @ и @home при выборе профиля разбиения диска «Вручную»:
- Создать раздел для корневой файловой системы. При указании файловой системы, выбрать BtrFS:
- Создать два подтома (@ и @home):
- Указать точки монтирования для каждого подтома:
Результат:
Ручной профиль
Если инсталлятор не поддерживает разбивку на подтома, то в этом случае при установке системы, на этапе «Подготовка диска» можно воспользоваться профилем разбиения вручную, создать swap и корень системы (файловая система BtrFS):
Далее установить систему как обычно и после установки системы создать подтома (см. раздел Создание подтомов).
Преобразование Ext3/4 в Btrfs
Если дистрибутив не позволяет выбрать файловую систему 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"
Внести изменения в файл /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
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
# ls -1d /lib/modules/*
/lib/modules/5.10.83-std-def-alt0.c9f.2
Выйти из chroot, перезагрузиться.
.
Убедившись в отсутствии проблем, можно удалить подтом 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
Создание подтомов
Загрузиться в 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. Для этого:
- Создать каталог /mnt/alt2
# mkdir /mnt/alt2
- Проверить расположение системы и параметры монтирования:
# mount |grep alt /dev/sda2 on /mnt/alt type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/)
- Примонтировать btrfs раздел с опцией subvol=@:
# mount /dev/sda2 /mnt/alt2 -o subvol=@
- Примонтировать временные интерфейсные файловые системы в /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.
- Сделать chroot в /mnt/alt2:
# chroot /mnt/alt2
- Внести изменения в /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
- Обновить загрузчик:
# 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
- Установить загрузчик в /dev/sda (только обновления загрузчика недостаточно):
# grub-install /dev/sda
- Выйти из chroot:
# exit
- Перезагрузить систему.
Создание снимков
Снимки/snapshots удобно делать и использовать в программе с графическим интерфейсом Timeshift.
Ссылки
См. также Первая версия
https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3