Поиск по сайту:

Как преобразовать файловую систему 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

Статьи по данной тематике: