Смена сервера больше не означает долгую переустановку системы. Рассказываем, как перенести Ubuntu 24.04 на новое оборудование с сохранением всех настроек. В статье — три метода: Rsync, DD и LVM-миграция.
Введение
Перенос Ubuntu 24.04 на новый сервер без переустановки сохраняет настройки, пакеты и пользовательские данные, исключая длительную повторную настройку. Рассказываем о трёх методах — с помощью Rsync, DD и LVM, — которые позволят выполнить перенос с нулевым простоем при апгрейде железа, миграции в облако или аварийном восстановлении.
Подготовка к миграции
Резервное копирование. Сначала создайте полную резервную копию работающей системы. Для систем с LVM/BTRFS используйте мгновенные снапшоты без остановки сервисов.
LVM:
sudo lvcreate -L 10G -s -n backup_snapshot /dev/ubuntu-vg/root
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 гарантирует, что смонтированные разделы не войдут в архив, а --exclude пропускает временные каталоги. Сохраните бекап на внешний носитель.
Анализ системы. Зафиксируйте текущее состояние сервера для последующего восстановления:
- сохраните список пакетов:
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 на обоих серверах — структура должна совпадать.
Временно отключите автообновления на новом сервере:
sudo systemctl disable unattended-upgrades
Разрешите на нём root-логин по SSH:
sudo sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
При использовании аппаратного RAID или ZFS на старом сервере, воспроизведите их конфигурацию до установки. Несовпадение контроллеров сделает загрузку невозможной.
Перед миграцией убедитесь, что места достаточно (должно быть не меньше, чем на исходном сервере):
df -h /
Метод 1. Перенос через Rsync
Перенос через Rsync — универсальный способ, работающий с дисками разных типов и размеров. Его главное преимущество — возможность выборочного копирования с сохранением прав доступа, владельцев файлов и расширенных атрибутов. Начните с загрузки обоих серверов (исходного и целевого) с LiveUSB Ubuntu 24.04, выбрав «Try Ubuntu without installing» в меню загрузки. Это предотвращает блокировку файлов работающими процессами. Создайте загрузочную флешку командой:
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 # Аналогичный раздел
Убедитесь в успешности монтирования: ls /mnt/old-root/etc должен показывать системные файлы, а /mnt/new-root — быть пустым для чистой установки.
Для копирования данных используйте команду rsync с комплексом параметров:
sudo rsync -aAXv --delete \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
/mnt/old-root/ /mnt/new-root/
Здесь:
- -aAXv сохраняет права, владельцев, ACL и SELinux-атрибуты с выводом прогресса;
- --delete удаляет на цели отсутствующие на источнике файлы;
- --exclude пропускает указанные каталоги.
После копирования выполните постобработку. Сначала обновите UUID разделов в /mnt/new-root/etc/fstab, используя значения с нового сервера (узнайте их через blkid). Затем переустановите загрузчик, создав 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
Наконец, сгенерируйте новый идентификатор устройства (machine-id) для предотвращения конфликтов:
sudo rm /mnt/new-root/etc/machine-id
sudo systemd-machine-id-setup --root=/mnt/new-root
При возникновении ошибки «rsync: failed to set permissions» временно добавьте --no-perms или проверьте поддержку файловой системы на целевом диске.
Если система не загружается после переноса, восстановите загрузчик через boot-repair. Установите его через PPA:
sudo add-apt-repository ppa:yannubuntu/boot-repair
Затем запустите восстановление:
sudo boot-repair
После переноса загрузите новый сервер в обычном режиме и выполните:
df -h # Проверка смонтированных разделов
systemctl status # Работоспособность сервисов
ping google.com # Доступность сети
Метод 2. Побитовое копирование через DD
Побитовое копирование с помощью dd создаёт точную копию исходного диска на уровне секторов. Этот метод подходит только при соблюдении строгих условий: физические диски должны быть идентичны по размеру (источник не может быть больше цели), а таблица разделов не должна изменяться. В отличие от Rsync, DD копирует всё содержимое диска — включая загрузчики, разделы подкачки и даже неиспользуемое пространство.
Сначала подключите целевой диск к исходному серверу через SATA, USB или в слот горячей замены. Определите имена устройств командой:
sudo lsblk -d -o NAME,SIZE
Например, /dev/sda (источник) и /dev/sdb (цель). Затем выполните копирование:
sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress conv=noerror,sync
Размер блока bs=64K оптимален для современных дисков, status=progress выводит прогресс операции, а conv=noerror,sync гарантирует продолжение работы при ошибках чтения (заменяя повреждённые секторы нулями).
По завершении сбросьте кеш диска:
sudo sync
И проверьте целостность файловой системы (заменив sdb2 на ваш корневой раздел):
sudo fsck -f /dev/sdb2
Для NVMe-дисков дополнительно проверьте SMART-статус:
sudo nvme smart-log /dev/nvme0n1
Чтобы наблюдать за прогрессом во время работы dd, откройте второй терминал и выполните:
sudo kill -USR1 $(pgrep ^dd)
После переноса обновите драйверы для нового оборудования (если оно изменилось):
sudo chroot /mnt/new-root
dpkg-reconfigure linux-image-$(uname -r)
update-initramfs -u
Затем переустановите загрузчик:
grub-install /dev/sdb # Для целевого диска
update-grub
Метод 3. Миграция LVM-томов
Миграция через LVM (Logical Volume Manager) — оптимальный выбор для систем, где обе платформы (исходная и целевая) используют логические тома. Этот метод позволяет переносить данные без копирования пустого пространства и изменять размеры разделов во время операции, что полезно при апгрейде хранилища.
Например, если вы заменяете старый HDD-массив на быстрые SSD, сначала подключите новые диски к работающему серверу, затем создайте Physical Volume командой:
sudo pvcreate /dev/nvme0n1
Теперь экспортируйте текущую конфигурацию LVM в файл:
sudo vgcfgbackup -f /root/vg_backup.txt vg0 # vg0 — имя Volume Group
Эта команда сохраняет структуру томов, включая политики распределения пространства и атрибуты логических томов.
Восстановите конфигурацию на новом диске:
sudo vgcfgrestore -f /root/vg_backup.txt vg0
Затем перенесите данные командой:
sudo pvmove -n lv_root /dev/sda2 /dev/nvme0n1 # Перемещаем lv_root на NVMe
Ключевое преимущество — возможность увеличения тома во время переноса. Например, чтобы расширить корневой раздел до 50 ГБ:
sudo lvextend -L 50G /dev/vg0/lv_root
sudo resize2fs /dev/vg0/lv_root # Для файловых систем EXT4
После переноса обновите UUID томов в системных файлах. Сначала узнайте новый UUID:
sudo blkid -s UUID -o value /dev/vg0/lv_root
Затем замените старые значения в fstab и конфигах GRUB:
sudo sed -i "s/old-uuid/$(sudo blkid -s UUID -o value /dev/vg0/lv_root)/g" /etc/fstab
sudo sed -i "s/old-uuid/$(sudo blkid -s UUID -o value /dev/vg0/lv_root)/g" /boot/grub/grub.cfg
Не забудьте обновить загрузчик:
sudo grub-install /dev/nvme0n1 # Укажите новый диск
sudo update-grub
Важно
Метод требует свободного места в Volume Group. Для переноса тома размер свободного пространства VG должен быть не меньше размера переносимого тома.
Настройки после миграции
Первым делом после переноса системы обновите сетевую конфигурацию, так как MAC-адреса сетевых интерфейсов на новом сервере отличаются. Узнайте новые MAC-адреса через ip link show, затем обновите соответствующие поля в конфиге Netplan:
sudo nano /etc/netplan/00-installer-config.yaml
Примените изменения:
sudo netplan apply
Для корректной работы оборудования переустановите аппаратные драйверы, что особенно важно при смене типа процессора (Intel → AMD) или добавлении специализированных контроллеров:
sudo dkms autoinstall
sudo update-initramfs -u -k all
Эти команды пересобирают модули ядра для текущего оборудования и обновляют образ initramfs.
Проверьте работоспособность перед перезагрузкой. Протестируйте систему в изолированном 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 проверьте:
- неудачно запущенные сервисы:
systemctl --failed
- критические ошибки загрузки (фильтр по ошибкам уровня ERROR и выше):
journalctl -b -p3
- сетевые интерфейсы:
ip a
- монтирование разделов:
mount | grep /
Дополнительно удалите старые SSH-ключи, чтобы избежать предупреждений безопасности:
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server
Перезапустите критичные сервисы (Nginx, PostgreSQL и т.д.), предварительно проверив их конфиги.
После перезагрузки выполните следующее.
- Проверку оборудования:
lspci -k | grep -A 2 "Ethernet\|VGA" # Драйверы сетевой карты и GPU
- тест дисковых операций:
sudo dd if=/dev/zero of=./test.bin bs=1G count=1 oflag=direct status=progress
- мониторинг:
htop # Нагрузка CPU/RAM
iotop # Активность диска
Заключение
Миграция Ubuntu 24.04 на новый сервер без переустановки — задача, требующая внимания к деталям, но вполне выполнимая даже без автоматизированных инструментов. Используйте Rsync, DD или LVM в зависимости от типа хранилища и требований к точности копирования. Каждый метод имеет свои преимущества: Rsync — гибкий и универсальный, DD — побитовая точность, LVM — удобство управления томами. Важно тщательно подготовиться, создать бекап, сверить разметку дисков и протестировать систему перед запуском в продакшене. Такой подход позволяет сохранить не только работоспособность сервиса, но и время на восстановление всех настроек и окружения.
Читайте в блоге:
- Настройка автоматического удаления старых логов с logrotate на Ubuntu 24.04
- Настройка аутентификации SSH по аппаратному токену на Ubuntu 24.04
- Установка и настройка Node.js на Ubuntu 24.04: пошагово для начинающих