Блог / Статьи

Полезная информация для вашего хостинга

Когда переезд важнее перезагрузки: миграция Ubuntu 24.04 как искусство системного администрирования

Когда переезд важнее перезагрузки: миграция Ubuntu 24.04 как искусство системного администрирования

Как перенести Ubuntu 24.04 на новый сервер без переустановки: полное руководство

Перенос операционной системы с одного сервера на другой — это не просто копирование файлов. Это почти как пересадка сердца: нужно сохранить все связи, настройки, артефакты конфигурации, но при этом адаптировать организм к новому телу. В современных реалиях, где простои измеряются не часами, а тысячами упущенных запросов в секунду, умение перенести Ubuntu 24.04 без полной переустановки становится не просто полезным навыком — оно превращается в элемент выживания.

В этой статье мы подробно разберём три проверенных метода миграции: через rsync, побитовое копирование с помощью dd и перенос LVM-томов. Каждый из них имеет свои особенности, риски и преимущества. Мы не просто покажем команды — мы погрузим вас в логику каждого шага, объясним, почему и для чего выполняется та или иная операция, и покажем, как избежать самых опасных ловушек. Начнём с основ — с подготовки, без которой даже самый гениальный план рухнет в первые пять минут.

Подготовительный этап: основа успеха миграции

Прежде чем даже думать о том, как скопировать систему, необходимо подготовить «почву» — на старом и новом серверах. Этот этап включает резервное копирование, диагностику текущего состояния и настройку целевой машины. Пренебрежение хотя бы одним из пунктов может привести к потере данных или невозможности загрузки.

Создание полной резервной копии

Первое и самое важное правило: никогда не мигрируйте без бэкапа. Даже если вы — гуру с 20-летним стажем. Ошибки случаются, диски выходят из строя, а команды в терминале не прощают невнимательности.

В зависимости от типа файловой системы и архитектуры хранения, стратегия резервного копирования может отличаться:

  • Для LVM (Logical Volume Manager) — используйте снапшоты. Они позволяют создать мгновенный снимок тома без остановки сервисов:
    sudo lvcreate -L 10G -s -n backup_snapshot /dev/ubuntu-vg/root
    Здесь -L 10G — размер резервного пространства (должен быть достаточным для всех изменений во время бэкапа), -s — флаг создания снапшота.
  • Для Btrfs — используйте встроенные подтома:
    sudo btrfs subvolume snapshot / /@backup_snapshot
    Эта команда создаёт мгновенный, почти бесплатный по ресурсам снимок корневой файловой системы.
  • Для EXT4/XFS — создайте архив с помощью tar, исключив временные и системные директории:
    sudo tar -cvpzf /backup.tar.gz \
            --exclude=/backup.tar.gz \
            --exclude=/proc --exclude=/sys --exclude=/dev \
            --exclude=/mnt --exclude=/media --exclude=/run \
            --exclude=/tmp --one-file-system /
    Параметр --one-file-system гарантирует, что архив не выйдет за пределы корневого раздела, игнорируя все смонтированные тома (например, /home на отдельном диске).

Сохраните бэкап на внешний носитель или другой сервер. Лучше всего — и там, и там.

ubuntu02

Фиксация текущего состояния системы

Даже если вы восстановите файлы, без знания текущей конфигурации может потребоваться часы, чтобы «довести систему до ума». Запишите всё:

  • Список установленных пакетов:
    dpkg --get-selections > /root/pkg-list.txt
    Это позволяет восстановить весь программный стек одной командой позже.
  • Сетевые настройки:
    ip -brief a > /root/network-info.txt
  • Структура дисков:
    lsblk -f > /root/disk-layout.txt
    blkid >> /root/disk-layout.txt
    cat /etc/fstab >> /root/layout.txt
  • Список сервисов:
    systemctl list-unit-files --type=service > /root/services.txt

Перенесите эти файлы на резервный сервер:

 

 

scp /root/*-info.txt user@backup-server:/backups/

 

Подготовка нового сервера

Новый сервер должен быть «готов к принятию» мигрирующей системы.

  • Разметка дисков должна совпадать с исходной. Используйте lsblk на обоих машинах для сравнения.
  • Если используется аппаратный RAID или ZFS, их нужно настроить до переноса.
  • На время миграции отключите автообновления:
    sudo systemctl disable unattended-upgrades
  • Разрешите root-логин по SSH (временно!):
    sudo sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
    sudo systemctl restart sshd
  • Убедитесь, что на новом диске достаточно места:
    df -h /

Этот этап — не бюрократия, а страховка. Чем более идентичны серверы, тем меньше сюрпризов вас ждёт после переноса.

Метод первый: миграция через rsync — гибкость и контроль

Rsync — это швейцарский нож системного администратора. Он не копирует биты, а синхронизирует файлы, сохраняя атрибуты, права, владельцев и метаданные. Это делает его идеальным для миграции между дисками разного типа (HDD → SSD), разного размера или даже разных архитектур (при условии одинаковой разрядности).

Загрузка с Live-носителя

Чтобы избежать конфликтов с работающими процессами, оба сервера (или хотя бы целевой, если источник доступен по сети) загружаются с LiveUSB:

sudo dd if=ubuntu-24.04-live-server-amd64.iso of=/dev/sdc bs=4M status=progress

После загрузки монтируем корневые разделы:

# На старом сервере:
sudo mkdir /mnt/old-root
sudo mount /dev/sda2 /mnt/old-root

# На новом сервере:
sudo mkdir /mnt/new-root
sudo mount /dev/nvme0n1p2 /mnt/new-root

Убедитесь, что /mnt/old-root/etc содержит конфигурационные файлы, а /mnt/new-root — пуст.

ubuntu04

Сам процесс копирования

Используем rsync с полным набором параметров:

sudo rsync -aAXv --delete \
    --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
    /mnt/old-root/ /mnt/new-root/

Разберём ключи:

  • -a — архивный режим (сохраняет права, владельцев, временные метки);
  • -A — копирует ACL;
  • -X — копирует расширенные атрибуты (xattrs);
  • -v — подробный вывод;
  • --delete — удаляет файлы на цели, отсутствующие на источнике;
  • --exclude — исключает системные директории, которые не должны копироваться.

Постобработка

После копирования нужно адаптировать систему к новому «телу»:

  1. Обновите UUID в /etc/fstab. Получите новые значения:
    blkid
    Замените старые UUID в /mnt/new-root/etc/fstab.
  2. Переустановите загрузчик. Для этого создайте chroot-окружение:
    
    
    sudo mount --bind /dev /mnt/new-root/dev
    sudo mount --bind /proc /mnt/new-root/proc
    sudo mount --bind /sys /mnt/new-root/sys
    sudo chroot /mnt/new-root
    Внутри chroot:
    grub-install /dev/nvme0n1
    update-grub
    exit
  3. Сгенерируйте новый machine-id:
    sudo rm /mnt/new-root/etc/machine-id
    sudo systemd-machine-id-setup --root=/mnt/new-root
    Без этого systemd может запутаться, особенно если старый сервер всё ещё работает в сети.

Если система не загружается — воспользуйтесь boot-repair:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt update
sudo boot-repair

Метод второй: побитовое клонирование через dd — точность как сталь

Если вам нужна абсолютная идентичность — например, при замене диска в одноплатной системе или при восстановлении после отказа — на помощь приходит утилита dd. Она копирует диск посекторно, включая загрузочную область (MBR/GPT), таблицы разделов и даже «мёртвые» сектора.

Когда использовать dd?

Этот метод подходит, если:

  • Диски одинакового размера (целевой не меньше источника);
  • Вы переносите систему на идентичное «железо»;
  • Вам критична точность копирования (включая скрытые разделы, криптографические метки и т.д.).

Процесс клонирования

Подключите целевой диск к исходному серверу. Определите имена устройств:

sudo lsblk -d -o NAME,SIZE

Запустите копирование:

sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress conv=noerror,sync

Пояснение параметров:

  • bs=64K — оптимальный размер блока для современных дисков;
  • status=progress — показывает прогресс;
  • conv=noerror,sync — продолжает копирование даже при ошибках чтения, заполняя повреждённые блоки нулями.

Для отслеживания прогресса в реальном времени (во втором терминале):

sudo kill -USR1 $(pgrep ^dd)

Постобработка

После копирования:

  1. Сбросьте кеш:
    sudo sync
  2. Проверьте целостность файловой системы:
    sudo fsck -f /dev/sdb2
  3. Если оборудование изменилось — обновите initramfs:
    sudo mount /dev/sdb2 /mnt/new-root
    sudo mount --bind /dev /mnt/new-root/dev
    sudo mount --bind /proc /mnt/new-root/proc
    sudo mount --bind /sys /mnt/new-root/sys
    sudo chroot /mnt/new-root
    dpkg-reconfigure linux-image-$(uname -r)
    update-initramfs -u
    grub-install /dev/sdb
    update-grub

Метод dd — мощный, но опасный. Одна ошибка в имени устройства — и вы сотрёте не тот диск. Всегда дважды проверяйте lsblk!

ubuntu01

Метод третий: миграция LVM-томов — гибкость для enterprise

Если ваша система использует LVM, вы обладаете мощнейшим инструментом для миграции. LVM позволяет переносить тома «на лету», изменять их размеры и даже объединять несколько физических дисков в единое логическое пространство.

Подготовка

Подключите новый диск к работающему серверу. Создайте на нём Physical Volume:

sudo pvcreate /dev/nvme0n1

Сохраните текущую конфигурацию Volume Group:

sudo vgcfgbackup -f /root/vg_backup.txt ubuntu-vg

Здесь ubuntu-vg — имя вашей группы томов (узнать можно через vgdisplay).

Перенос данных

Теперь перенесите данные с одного PV на другой:

sudo pvmove -n lv-root /dev/sda2 /dev/nvme0n1

Команда может занять часы — но она работает в фоне, не останавливая систему.

Если вы хотите увеличить том во время переноса:

sudo lvextend -L 50G /dev/ubuntu-vg/lv-root
sudo resize2fs /dev/ubuntu-vg/lv-root  # для EXT4
# или
sudo xfs_growfs /                      # для XFS

Обновление конфигурации

После переноса обновите UUID в системных файлах:

NEW_UUID=$(sudo blkid -s UUID -o value /dev/ubuntu-vg/lv-root)
sudo sed -i "s/old-uuid-here/$NEW_UUID/g" /etc/fstab /boot/grub/grub.cfg

И переустановите загрузчик на новый диск:

sudo grub-install /dev/nvme0n1
sudo update-grub

Важно: для успешного pvmove в группе томов должно быть достаточно свободного места — не меньше размера переносимого тома.

Завершающий аккорд: первые шаги на новом сервере

После успешного переноса система должна «осознать», что она теперь живёт в новом теле.

Сетевые настройки

MAC-адреса изменились — это значит, что Netplan может перестать работать. Обновите конфигурацию:

sudo nano /etc/netplan/00-installer-config.yaml

Укажите новые интерфейсы (можно узнать через ip link show), затем примените:

sudo netplan apply

Пересборка драйверов

Особенно важно при смене чипсета или процессора:

sudo dkms autoinstall
sudo update-initramfs -u -k all

Очистка идентификаторов

Удалите старые SSH-ключи, чтобы избежать предупреждений «man-in-the-middle»:

sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server

Тестирование в chroot

Перед перезагрузкой проверьте систему:

sudo mount --bind /dev /mnt/new-root/dev
sudo mount --bind /proc /mnt/new-root/proc
sudo mount --bind /sys /mnt/new-root/sys
sudo chroot /mnt/new-root

# Внутри:
systemctl --failed
journalctl -b -p3
ip a
mount | grep /

После перезагрузки

Выполните диагностику:

  • Проверка оборудования:
    lspci -k | grep -A 2 "Ethernet\|VGA"
  • Тест диска:
    sudo dd if=/dev/zero of=./test.bin bs=1G count=1 oflag=direct status=progress
  • Мониторинг:
    htop
    iotop

ubuntu05

Заключение: миграция как философия поддержания стабильности

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

Выбор метода зависит от контекста:

  • Rsync — универсален, подходит для разных дисков, облачных миграций, апгрейдов.
  • dd — идеален для точного клонирования, особенно в однотипных системах.
  • LVM — лучший выбор для enterprise-инфраструктур, где важна гибкость и масштабируемость.

Независимо от выбранного пути, успех миграции определяется не командами, а подготовкой. Создайте бэкап. Зафиксируйте состояние. Протестируйте. И помните: даже самый совершенный перенос — пустая трата времени, если вы не проверите, что всё действительно работает.

Следуя этой инструкции, вы не просто перенесёте сервер — вы сохраните его душу.