Перенос Ubuntu на другой диск с FSArchiver

    8 минут

Сегодня мы познакомимся с интересной утилитой позволяющей клонировать диск с рабочей системой и развернуть её на другом диске или даже машине. Этой утилитой является FSArchiver, разработанной автором PartImage на основе его же более старой реализации, но с расширенными возможностями. И здесь я хочу рассказать об опыте её использования.

В прошлой статье мы уже рассматривали один из способов переноса ОС Linux с помощью команды DD, что позволило мигрировать систему на другой диск без особых трудностей и затрат времени. Но в этом способе есть один большой минус — целевой диск должен быть в объёме не меньше, чем диск-источник, что в ряде случаев достаточно неудобно или вообще невозможно.

FSArchiver лишён этого недостатка в силу того, что сохраняет образ диска не на его физическом уровне, а на логическом —  уровне файлов, то есть исключив пустые кластеры. Это даёт нам усиление компрессии. Также в конечном итоге применяется сжатие одним из архиваторов:

  • lzo: очень быстрое, но с низкой степенью сжатия. Вы можете использовать его, если у вас очень медленный процессор. Вам следует рассмотреть lz4, если вам нужна быстрая распаковка.
  • lz4: очень быстрое, но с низкой степенью сжатия. Вы можете использовать его, если у вас очень медленный процессор. Он похож на lzo, но обеспечивает лучшую производительность при распаковке, поэтому рекомендуется вместо lzo.
  • gzip: наиболее распространенный алгоритм сжатия. Он довольно быстрый и обеспечивает хорошую степень сжатия.
  • bzip2: довольно медленный алгоритм с очень хорошей степенью сжатия.
  • xz/lzma: имеет превосходную степень сжатия, но сжимает очень медленно, при этом распаковывает гораздо быстрее, чем bzip2.
  • zstd: довольно новый алгоритм, который в большинстве случаев (от хорошей скорости до хорошего сжатия) обеспечивает лучшее соотношение сжатие/скорость, чем вышеуказанные. Поэтому в последних версиях FSArchiver это рекомендуемый метод сжатия.

Как для сохранения, так и для восстановления дисков нам доступно два способа решения задачи: через терминал с любого загрузочного LiveCD и посредством проекта Qt-FSArchiver предоставляющего нам графический интерфейс. Для первого способа будет достаточно установочной флешки с Ubuntu, тогда, как второй предлагает нам скачать и развернуть на флешке систему восстановления. При этом способ из терминала можно использовать не только с загрузочного диска, но и непосредственно с работающей системы, хотя нужно понимать, что в данном случае всё же присутствует риск создать плохой образ, но у меня это получилось успешно и восстановленный с этого образа диск был работоспособен. Для выполнения сохранения в рабочей среде нужно в команду добавить опцию -A.

Интерфейс восстановительного диска Qt-FSArchiver
Интерфейс восстановительного диска Qt-FSArchiver

Мы рассмотрим оба варианта параллельно. Далее предполагаем, что загрузочный диск готов к работе.

Подготовка образа исходной системы

В первую очередь, независимо от выбранного способа, нам нужно определиться с местом сохранения образа. Предварительно переключитесь на рута командой sudo su. Если это будет папка на другом ПК локальной сети, то её нужно смонтировать

mkdir /mnt/backup; mount.cifs //192.168.0.2/backup/ /mnt/backup/ -o user=ЮЗЕР_УДАЛЁННОГО_ПК,pass=ПАРОЛЬ,iocharset=utf8,file_mode=0777,dir_mode=0777

Вместо ЮЗЕР_УДАЛЁННОГО_ПК и ПАРОЛЬ введите актуальные для вас данные.

Также можно было бы смонтировать удалённый диск с помощью стандартной утилиты Files, соединившись с ним с помощью протокола smb

Files
Files

Далее сценарий будет зависеть от выбранного вами способа.

В данном варианте устанавливать нам ничего не придётся. Загружаемся с флешки Qt-FSArchiver. Тут нужно сразу предупредить, что суперпользователь имеет пароль — ubuntu, мало ли что.

На LiveCD присутствует целый набор программ для восстановления системы и работы с дисками, нам же в данном случае нужна лишь Qt-FSArchiver. Её иконка запуска находится в самом верху боковой панели. В самой программе доступен русский и другие языки, которые можно установить в её настройках. После изменения их нужно перезапустить Qt-FSArchiver.

Интерфейс Qt-FSArchiver
Интерфейс Qt-FSArchiver

Тут выбираем диск с которого будем снимать образ, имя файла образа и каталог для сохранения. Также можно установить дополнительные опции такие, как степень сжатия и число задействованных потоков. В отличии от утилиты FSArchiver, запускаемой непосредственно из терминала, здесь не предусмотрено сохранение нескольких дисков в одном файле, как, собственно, и распаковка такого файла и нам придётся создать несколько файлов образов, по одному на каждый сохраняемый диск.

Проделываем данную процедуру для каждого диска.

Устанавливаем FSArchiver

apt install fsarchiver -y

Определяем сохраняемые диски

ls -l /dev
Вывод команды
Вывод команды

Находим в списке нужный нам, как в данном случае, это sda с двумя разделами sda1 и sda2 и выполняем команду сохранения. Тут стоит сразу решить, будем ли мы сохранять оба раздела в одном файле или каждый в отдельном.

fsarchiver savefs -v -j28 /mnt/backup/backup.fsa --exclude={"/src","/tmp/*","*/*cache/*","lost+found","*.tar","*.gz"} /dev/sda1 /dev/sda2

-v обеспечит показ в терминале обрабатываемых файлов;
-j28 установит количество потоков для обработки. В данном случае их 28
—exclude исключит указанные файлы и папки

Утилита вернёт статистику выполнения, но отпустит командную строку только после полного сохранения образа на диск.

Так мы получили образ диска на удалённом ПК

Развёртывание образа на диск

Если вы сохранили в образы все диски системы, то нам не нужно устанавливать её, достаточно распилить диск на разделы и залить на них соответствующие образы.

Монтируем удалённую папку с образом

mkdir /mnt/backup; mount.cifs //192.168.0.2/backup/ /mnt/backup/ -o user=ЮЗЕР_УДАЛЁННОГО_ПК,pass=ПАРОЛЬ,iocharset=utf8,file_mode=0777,dir_mode=0777

Для этого можно воспользоваться утилитой GParted или аналогичной. Qt-FSArchiver имеет её в составе своего набора.

GParted
GParted

Открываем Qt-FSArchiver и выбираем режим Восстановление раздела с помощью qt-fsarchiver, также выбираем диск на который будем заливать образ, файл самого образа и Число потоков, которое не должно превышать количество ядер вашего процессора.

Восстановление раздела с помощью qt-fsarchiver
Восстановление раздела с помощью qt-fsarchiver

Дожидаемся окончания процесса восстановления и выходим из программы

Если восстанавливаем несколько дисков, то повторяем процесс.

Устанавливаем FSArchiver

apt install fsarchiver -y

Если в образе несколько дисков, то их следует перечислить в том же порядке, как они были записаны

fsarchiver restfs /mnt/backup/backup.fsa id=0,dest=/dev/sda1 id=1,dest=/dev/sda2

По окончании развёртывания не забудьте установить для первого раздела, который является Efi System флаги boot и esp, если также восстанавливали его

Manage flags
Manage flags

Монтирование образа для выборочного копирования

В этом случае нам придётся предварительно установить Ubuntu той же версии, что имеет образ диска. После установки, хоть и не обязательно, но всё же желательно войти в чистую систему и обновиться.

В качестве устройства для монтирования используем Loop — петлевое устройство, являющееся обычным файлом, но представляющее собой что-то вроде виртуального диска, позволяющего быть смонтированным в качестве файловой системы.

Далее загружаемся с LiveCD Ubuntu 24.04 и открываем терминал и устанавливаем FSArchiver

apt-get install fsarchiver -y

Создаём пустой файл образа с несколько большим размером нежели сам образ после распаковки. Чтобы определить размер файла, выполните команду

fsarchiver archinfo /mnt/backup/full_1.fsa
Информация об образе
Информация об образе

В данном случае объём распакованных файлов займёт 39,89 ГБ. Значит нам нужно создать образ размером в 50 ГБ. Разместим его в удалённой папке.

dd if=/dev/zero of=/mnt/backup/vd.img count=50000 bs=1M

то есть мы создаём пустой образ диска с именем vd.img общим количеством 50000 блоков по 1 МБ/блок. Дожидаемся завершения его создания.

Успешное создание образа
Успешное создание образа

Определяем свободное петлевое устройство:

losetup -f
Свободное петлевое устройство
Свободное петлевое устройство

Монтируем на него наш только что созданный образ

losetup /dev/loop1 /mnt/backup/vd.img

и заливаем образ исходного диска

fsarchiver restfs /mnt/backup/full_1.fsa id=0,dest=/dev/loop1

Ждём, когда завершится процесс распаковки и развёртывания.

Проверяем наличие устройств

fdisk -l
Доступные дисковые устройства
Доступные дисковые устройства

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

mkdir /mnt/loop; mount /dev/loop1 /mnt/loop -o ro

Также монтируем целевой диск и работаем с ними.

mkdir /mnt/target; mount /dev/sda2 /mnt/target -o rw

Например, копируем нужную папку

cp -prT --preserve /mnt/loop/etc /mnt/target

По окончании работы размонтируем петлевой диск и удалим его

umount /dev/loop1; losetup -d /dev/loop1

Также удалим созданный нами образ

rm /mnt/backup/vd.img

Оставьте комментарий