Перенос Linux на btrfs
Перенос Gentoo Linux с одного диска на другой. На новом диске делается система btrfs.
Содержание
1 Исходное состояние системы
- Переносил несколько вариантов исходных систем.
1.1 Система на LVM
- Исходно система установлена на LVM:
/dev/sda1
:/boot/EFI
;/dev/sda2
:/boot
;/dev/vgs/root
:/
;/dev/vgs/var
:/var
;/dev/vgs/var_tmp
:/var/tmp
;/dev/vgs/vm
:/var/vm
;/dev/vgs/portage
:/usr/portage
;/dev/vgs/portage_local
:/usr/local/share/portage
;/dev/vgs/portage_com
:/com/lib/portage
;/dev/vgs/home
:/home
.
1.2 Система на btrfs
- Система на btrfs:
/dev/sda1
:/boot/EFI
;/dev/sda2
:/boot
;/dev/sda3
:swap
;/dev/sda4
: партиция с файловой системой btrfs.
2 Разбиение диска
- Установим тип разбиения в GPT.
2.1 Выделенная boot-партиция
- Разобьём на партиции:
- p1 — 512M, для
EFI
. - p2 — 500–1024M, для
/boot
. - p3 — двойная оперативная память, для
swap
.- Также можно разместить файл подкачки на
btrfs
(см. Файл подкачки на btrfs).
- Также можно разместить файл подкачки на
- p4 — всё остальное для
btrfs
.
- p1 — 512M, для
- Создадим файловые системы:
2.2 Все разделы на файловой системе btrfs
- Разобьём на партиции:
- p1 — 1024M, для
EFI
. - Файл подкачки на
btrfs
(см. Файл подкачки на btrfs). - p4 — всё остальное для
btrfs
.
- p1 — 1024M, для
- Разобьём диск:
- Создадим файловые системы:
- p1 (
EFI
):1mkfs.vfat -F32 -n EFI /dev/sdc1
- p2 (
btrfs
) (см. btrfs. Контрольные суммы):1mkfs.btrfs --checksum blake2 -L gentoo /dev/sdc2
- p1 (
3 Подготовка раздела с btrfs
- Подмонтируем раздел с btrfs:
- Создадим подтома на btrfs (см. Подтома btrfs):
- Подтома для Gentoo Linux.
- Используется, если portage размещается локально:
- Если используется файл подкачки на файловой системе, то создадим для него подтом:
4 Копирование существующих файловых систем
4.1 Система на LVM
- Создадим точку монтирования:
1mkdir /mnt/from
- Подмонтируем и скопируем root-партицию:
- Подмонтируем и скопируем
/var
: - Подмонтируем и скопируем
/boot
: - Подмонтируем и скопируем
portage
: - Подмонтируем и скопируем
portage_local
:
4.2 Система на btrfs
4.2.1 Подготовка к копированию
- Создадим точки монтирования:
1mkdir -p /mnt/from
- Подмонтируем исходную файловую систему btrfs:
1mount /dev/sda4 /mnt/from/
4.2.2 Копирование основных файловых систем
- Скопируем root-партицию:
1rsync -av -HS -AX --delete /mnt/from/@/* /mnt/to/@
- Скопируем
/var
:1rsync -av -HS -AX --delete /mnt/from/@var/* /mnt/to/@var
- Подмонтируем и скопируем
/boot
:
4.2.3 Копируем portage
- Если
portage
размещён локально, то его тоже надо скопировать. - Скопируем
@portage
:
1rsync -av -HS --delete /mnt/from/@portage/* /mnt/to/@portage
- Скопируем
@portage@local
:
1rsync -av -HS --delete /mnt/from/@portage@local/* /mnt/to/@portage@local
4.2.4 Копируем системы с отключением CoW
- Для файловых систем с образами виртуальных машин следует отключить CoW (copy-on-write) (см. Подтома btrfs).
- Так же стоит отключить CoW для часто изменяемых файлов (например, журналов).
- Подмонтируем файловую систему
btrfs
:1mkdir -p /mnt/gentoo 2mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@ /dev/sdc2 /mnt/gentoo/ 3mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var /dev/sdc2 /mnt/gentoo/var 4mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var@tmp /dev/sdc2 /mnt/gentoo/var/tmp 5mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@vm /dev/sdc2 /mnt/gentoo/var/vm 6mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@libvirt /dev/sdc2 /mnt/gentoo/var/lib/libvirt/images 7mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var@log /dev/sdc2 /mnt/gentoo/var/log
Копирование
/var/vm
- Отключим для этого подтома CoW:
- Скопируем
/var/vm
:1rsync -av -HS -AX --delete /mnt/from/@vm/* /mnt/to/@vm
Копирование
/var/lib/libvirt/images
- Отключим для подтома
/var/lib/libvirt/images
CoW: - Скопируем
/var/lib/libvirt/images
:1rsync -av -HS -AX --delete /mnt/from/@libvirt/* /mnt/to/@libvirt
- Отключим для подтома
Копирование
/var/log
- Для
/var/log
- Отключим для подтома
/var/log
CoW: - Скопируем
/var/log
:1rsync -av -HS -AX --delete /mnt/from/@var@log/* /mnt/to/@var@log
- Для
Настройки
/var/tmp
- Для
/var/tmp
- Посмотреть результат можно командой:
- Для
5 Установка загрузчика
- Перемонтируем файловую систему
btrfs
:1mkdir -p /mnt/gentoo 2mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@ /dev/sdc2 /mnt/gentoo/ 3mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var /dev/sdc2 /mnt/gentoo/var 4mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@var@tmp /dev/sdc2 /mnt/gentoo/var/tmp 5mount -tbtrfs -orelatime,discard=async,autodefrag,compress=zstd:9,subvol=@boot /dev/sdc2 /mnt/gentoo/boot 6mount /dev/sdc1 /mnt/gentoo/boot/efi
- Подмонтируем псевдо-файловые системы:
- Установим загрузчик:
6 Файл монтирования fstab
- Создадим файл монтирования fstab.
- Узнаем идентификатор партиции с файловой системой btrfs:
1blkid /dev/sdc2
- Получим строчку:
1UUID="<uuid_number>"
- Создадим файл
/mnt/to/etc/fstab
:1LABEL="boot" /boot ext4 relatime,discard=async 1 1 2LABEL="EFI" /boot/efi vfat defaults,discard=async,flush,tz=UTC 0 0 3LABEL="swap" none swap sw 0 0 4UUID="<uuid_number>" / btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@ 0 0 5UUID="<uuid_number>" /var btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@var 0 0 6UUID="<uuid_number>" /var/tmp btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@var_tmp 0 0 7UUID="<uuid_number>" /var/vm btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@vm 0 0 8UUID="<uuid_number>" /home btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@home 0 0 9UUID="<uuid_number>" /usr/portage btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@portage 0 0 10UUID="<uuid_number>" /usr/local/share/portage btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@portage_local 0 0 11UUID="<uuid_number>" /com/lib/portage btrfs relatime,discard=async,autodefrag,compress=zstd:9,subvol=@portage_com 0 0
- Если используется файл подкачки, то вместо отдельной партиции следует подключить этот файл в
/mnt/to/etc/fstab
:
7 Файл подкачки на файловой системе btrfs
7.1 Подготовка к созданию файла подкачки
- Для раздела файла подкачки следует отключить CoW (copy-on-write).
- Подмонтируем файловую систему
btrfs
: - Создадим точку монтирования:
1mkdir /mnt/gentoo/swap
- Подмонтируем подтом
@swap
:1mount -tbtrfs -orelatime,discard,autodefrag,compress=zstd:9,subvol=@swap /dev/sdc2 /mnt/gentoo/swap
- Отключим для этого подтома CoW:
1chattr +C /mnt/gentoo/swap
7.2 Создание файла подкачки
7.2.1 Старый подход
- Создадим файл подкачки:
1truncate -s 0 /mnt/gentoo/swap/swapfile
- Установим права доступа
600
к файлу подкачки:1chmod 600 /mnt/gentoo/swap/swapfile
- Установим размер файла подкачки исходя из размера оперативной памяти:
1fallocate -l $(free -h --si | awk 'NR == 2 {print $2}') /mnt/gentoo/swap/swapfile
- Отформатируем файл подкачки:
1mkswap /mnt/gentoo/swap/swapfile
7.2.2 Новый подход
- Работает начиная с версии утилит 6.1.
- Создадим файл подкачки размером 8ГБ:
1btrfs filesystem mkswapfile --size 4g --uuid clear /mnt/gentooswap/swapfile
- Создадим файл подкачки исходя из размера оперативной памяти:
1btrfs filesystem mkswapfile --size $(free -h --si | awk 'NR == 2 {print $2}') --uuid clear /mnt/gentoo/swap/swapfile
7.3 Активация файла подкачки
- Активируем файл подкачки:
1swapon /mnt/gentoo/swap/swapfile