Как преобразовать файловую систему Ext4 в Btrfs |
Btrfs — это современная файловая система, объединяющая файловую систему, основанную на принципе COW (копирование при записи) для систем Linux. Эта файловая система призвана реализовать расширенные функции, такие как восстановление, отказоустойчивость и упрощенное администрирование файловых систем Linux. По своей конструкции Btrfs обеспечивает высокую производительность и поддерживает большие серверы хранения.
Реализованный здесь принцип COW означает, что когда данные изменяются в файловой системе, они копируются, изменяются и записываются в другое свободное место файловой системы. Это помогает избежать повреждения данных или ошибок частичного обновления во время сбоев питания.
Btrfs предлагает следующие возможности:
- Поддержка огромного размера файлов
- Хранилище файлов на основе экстентов
- Компактная упаковка небольших файлов
- Снимки с возможностью записи и снимки только для чтения
- Поддержка подтомов
- Поддержка квот с учетом субтома
- Интегрированная поддержка нескольких устройств с поддержкой LVM, настройка RAID-массивов и т. д.
- Контрольные суммы данных и метаданных
- Индексированные каталоги с эффективным использованием пространства
Основная цель этого руководства — предоставить обзор файловой системы Btrfs, а также систематическое описание того, как можно преобразовать файловую систему Ext4 в Btrfs. Преобразование файловой системы без полномочий root можно легко выполнить без перезагрузки. Чтобы преобразовать корневую файловую систему, вам необходимо загрузиться с Live CD. В этом руководстве мы узнаем, как преобразовать корневую файловую систему и при необходимости откатить ее до Ext4.
Начиная.
Настоятельно рекомендуется сделать резервную копию вашей домашней папки и любых важных данных в вашей системе, таких как/и т. д.
После создания резервной копии обновите системные пакеты до последних доступных версий.
##On Debian/ubuntu
sudo apt update && sudo apt upgrade
##On Fedora
sudo dnf update
Шаг 1. Освободите место на диске.
Команда btrfs-convert
воссоздала данные файловой системы в свободном пространстве раздела, сохранив при этом существующие данные EXT4 в их текущем местоположении.
Объем необходимого свободного места не может быть известен. Если у вас недостаточно места, преобразование завершится неудачно, но это не повредит вашим данным. Чтобы получить больше свободного места:
- Очистите неиспользуемые пакеты и пакеты Flatpak:
dnf autoremove
,Flatpak Remove –unused
, - Очистите кеши пакетов:
pkcon Refresh Force -c -1
,dnf очистить все
- Очистите неиспользуемые образы виртуальных машин внутри, например. GNOME-ящики
- Очистите старые системные журналы: Journalctl –vacuum-size=100M.
- Если вы используете Docker, осторожно используйте такие инструменты, как
docker Volume prune
,docker image prune -a
- Используйте
baobab
для определения больших файлов и папок, которые необходимо удалить. Не удаляйте вручную файлы за пределами домашней папки, если это возможно.
Как только это будет сделано и станет достаточно свободного места, действуйте, как показано ниже.
Шаг 2 – Создайте живое изображение
Поскольку конвертировать смонтированную файловую систему невозможно, нам нужно использовать Live-образ. Я продемонстрирую это на системе Ubuntu 22.04 с загруженным живым образом, как показано ниже:
# Download with wget - Desktop Edition (Intel 64-bit)
wget https://cdimage.ubuntu.com/daily-live/current/jammy-desktop-amd64.iso
# Download with wget - Desktop Edition (ARM 64-bit)
wget https://cdimage.ubuntu.com/daily-live/current/jammy-desktop-arm64.iso
Вы также можете использовать другой образ для Live-загрузки, подходящий для системы. Например, образ Fedora 35:
wget https://download.fedoraproject.org/pub/fedora/linux/releases/35/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-35-1.2.iso
Используя файл ISO, создайте загрузочный USB-накопитель, как показано ниже.
# Identify USB device
$ sudo lsblk
# Flash OS to USB drive
$ sudo dd bs=4M if=/jammy-desktop-amd64.iso of=/dev/sdx status=progress oflag=sync
Обязательно замените /dev/sdx на путь USB-диска, а jammy-desktop-amd64.iso на путь правильный путь к файлу ISO.
Шаг 3 – Загрузите Live CD
После создания установочного носителя загрузитесь с него. Возможно, вам придется изменить параметры загрузки для загрузки с Live CD.
Перейдите в режим реального времени, как показано. Для Убунту 22.04:
Переключитесь на пользователя root:
sudo su -
Определите свое устройство с помощью gnome-disk или, альтернативно, с помощью Fdisk, как показано ниже.
$ fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 50B1DEBD-1E51-47C6-A980-272DCF1B9287
Device Start End Sectors Size Type
/dev/sda1 2048 79903539 79901492 38.1G Linux filesystem
/dev/sda2 79904768 79908863 4096 2M BIOS boot
.......
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 89C5C503-8E64-4CC2-8E0C-B54634768D73
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 1054719 1050624 513M EFI System
/dev/sda3 1054720 83884031 82829312 39.5G Linux filesystem
...
Здесь мой раздел — /dev/sda3. Убедитесь, что это файловая система EXT4.
$ file -sL /dev/sda3
/dev/sda3: Linux rev 1.0 ext4 filesystem data, UUID=0c84a840-1dfb-4ea3-b387-57d6182f7672 (extents) (64bit) (large files) (huge files)
Шаг 4. Преобразуйте файловую систему Ext4 в Btrfs.
Как только соответствующий диск будет определен, вы можете запустить приведенные ниже команды для преобразования в Btrfs:
Размонтируйте диск и проверьте его целостность.
sudo umount /dev/sda3
sudo fsck.ext4 -fyv /dev/sda3
Пример вывода:
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
216559 inodes used (8.37%, out of 2588672)
89 non-contiguous files (0.0%)
240 non-contiguous directories (0.1%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 181707/22
2701443 blocks used (26.09%, out of 10353664)
0 bad blocks
1 large file
158883 regular files
20244 directories
8 character device files
0 block device files
0 fifos
6 links
37408 symbolic links (34807 fast symbolic links)
7 sockets
------------
216556 files
После проверки целостности действуйте, как показано ниже.
sudo btrfs-convert /dev/sda3
Не забудьте заменить sda3 на свой раздел. В случае возникновения каких-либо проблем обратитесь за помощью с помощью команды man: man btrfs-convert
Пример вывода выполнения:
create btrfs filesystem:
blocksize: 4096
nodesize: 16384
features: extref, skinny-metadata (default)
checksum: crc32c
free space report:
total: 41874882560
free: 40559443968 (96.86%)
creating ext2 image file
creating btrfs metadata
copy inodes [.] [ 83935/ 80608]
conversion complete
Этот процесс занимает довольно много времени в зависимости от размера вашего раздела и от того, является ли он твердотельным или ротационным.
Если вы обнаружите ошибки, вам нужно создать больше свободного места и запустить btrfs-convert -n
Шаг 5 – Подключите диск
Теперь, когда у вас есть новая файловая система Btrfs, вам необходимо смонтировать ее, как показано ниже.
sudo mount /dev/sda3 /mnt
Перечислите подтома в пути.
$ btrfs subvolume list /mnt
ID 256 gen 3 top level 5 path ext2_saved
В приведенном выше выводе у нас есть несколько подтомов, таких как toplevel и ext2_saved, созданных по умолчанию.
Шаг 6 – Создайте субтома.
Если вы хотите иметь плоский макет подтома, в котором вы можете иметь снимки для каталога /home и различные параметры монтирования для каждого тома, действуйте, как показано ниже.
cd /mnt
btrfs subvolume snapshot ./ ./root2
btrfs subvolume create home2
cp -a home/* home2/
Теперь нам нужно создать тома
- root2 – полный снимок раздела.
- home2 — создал пустой том и скопировал в него содержимое home/*.
Теперь, когда созданы два подтома, удалите все в /mnt , кроме root2, home2 и ext2_saved.
sudo rm -rf bin dev boot cdrom etc home lib* lost+found media mnt opt proc root run sbin snap srv swap.img tmp usr sys var usr
- Переименуйте подтома root2 и home2 в root и home.
mv root2 root
mv home2 home
- Внутри корневого субтома очистите домашнюю папку, чтобы мы могли позже смонтировать туда домашний субтом.
cd root/home
rm -rf *
Шаг 7 – Измените Fstab
Нам нужно сделать тома постоянными после загрузки, поэтому нам нужно изменить fstab, заменив старые файлы ext4 на Btrfs, как показано ниже.
Сначала определите UUID раздела.
# blkid
.....
/dev/sda3: UUID="a8c320fa-a9d6-42c4-8fa2-95c10c6b202f" UUID_SUB="93562e7f-f631-45dc-a49c-34be5b393b9a" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="8d3d5e37-635b-4ce5-a52e-34adb5a18da1"
.......
Откройте файл FSTAB
vim /mnt/root/etc/fstab
Добавьте строки ниже.
###Comment out the existing EXT4 filesystem and add this##
UUID=xx / btrfs subvol=root 0 0
UUID=xx /home btrfs subvol=home 0 0
Замените XX на UUID раздела BTRS. UUID тот же, и не забудьте закомментировать предыдущий раздел ext4.
Например:
Сохраните файл и перемонтируйте каталоги.
cd
umount /mnt
mount -o subvol=root /dev/sda3 /mnt
mount /dev/sda3 /mnt/boot
mkdir /mnt/boot/efi
mount /dev/sda3 /mnt/boot/efi
Продолжайте и монтируйте системные устройства, как показано ниже.
mount -t proc /proc /mnt/proc
mount --rbind /dev /mnt/dev
mount --make-rslave /mnt/dev
mount --rbind /sys /mnt/sys
mount --make-rslave /mnt/sys
cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.chroot
cp -L /etc/resolv.conf /mnt/etc
Теперь Chroot в вашей системе.
chroot /mnt /bin/bash
Проверьте, можете ли вы получить доступ к Интернету, пропинговав указанный ниже URL-адрес.
# ping google.com
PING google.com (172.217.18.14) 56(84) bytes of data.
64 bytes from fra15s28-in-f14.1e100.net (172.217.18.14): icmp_seq=1 ttl=118 time=5.21 ms
64 bytes from fra24s22-in-f14.1e100.net (172.217.18.14): icmp_seq=2 ttl=118 time=5.19 ms
^Z
[1]+ Stopped ping google.com
Если проблему решить невозможно, создайте файл resolv.conf, как показано ниже.
rm -rf etc/resolv.conf
vi etc/resolv.conf
Добавьте приведенные ниже строки и повторите проверку связи:
nameserver 8.8.8.8
nameserver 8.8.4.4
Шаг 8 – Переустановите GRUB и ядро
Оставаясь внутри chroot, переустановите ядро и GRUB, как показано ниже:
В Debian/Ubuntu:
Отредактируйте файл ниже и добавьте строку:
# vim etc/default/grub
.....
GRUB_DISABLE_OS_PROBER=false
Теперь переустановите grub с помощью команд:
mount /boot/efi
apt reinstall grub-efi shim*
grub-mkconfig -o /boot/efi/efi/grub.cfg
grub-install /dev/sda
Пример вывода:
Список образов Linux
# dpkg -l | grep linux-image-.*-generic
rc linux-image-5.15.0-25-generic 5.15.0-25.25 amd64 Signed kernel image generic
ii linux-image-5.15.0-33-generic 5.15.0-33.34 amd64 Signed kernel image generic
ii linux-image-5.15.0-40-generic 5.15.0-40.43 amd64 Signed kernel image generic
Переустановите предпочтительный образ:
apt-get install --reinstall linux-image-5.15.0-40-generic
update-grub
В Fedora используйте приведенные ниже команды для переустановки grub.
mount /boot/efi
dnf reinstall grub2-efi shim
dnf reinstall kernel-core
grub-install /dev/sda
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Как только все будет выполнено, выключите систему, извлеките установочный носитель и загрузитесь с диска.
Шаг 9 – Действия после конверсии
Если система загружается правильно и новая система Btrfs работает должным образом, теперь вы можете вернуть том, занятый старым моментальным снимком ext4. Этот снимок можно использовать для отката к старой файловой системе EXT4. Потерять возможность отката можно только в том случае, если вы дефрагментируете и балансируете субтома.
На этом этапе вы можете удалить снимок, если вас устраивает файловая система Btrfs.
Смонтируйте подобъем верхнего уровня:
sudo su -
mount -o subvol=/ /dev/sda3 /mnt
cd /mnt
Возможно, вам придется установить указанный ниже инструмент, прежде чем приступить к удалению моментального снимка.
apt install btrfs-progs
Удалить снимок:
btrfs subvolume delete ext2_saved
Наконец, проверьте изменения:
mount | grep "^/dev"
Пример вывода:
Обновить харч:
update-grub
Вот и все!
Подведение итогов
Это руководство предоставило вам необходимые знания о том, как преобразовать файловую систему Ext4 в файловую систему Btrfs. Я надеюсь, что это руководство было для вас важным.
Узнать больше:
Понимание и работа с файловой системой BtrFS в Linux
Как изменить размер файловых систем XFS/Btrfs в Linux
Как установить Arch Linux с помощью установщика Arch Linux