Перенос работающего сервера без остановки сервисов — 19 августа 2026 г. в 15:33:09.212
Перенос работающего сервера без остановки сервисов 👋 Привет, сетевой друг! Впрошлый раз разбирали базовый перенос через снапшоты. Сегодня расскажу про инкрементальную передачу, проверку целостности и более надёжный процесс. 🟣Что изменилось в подходе: главная проблема старого метода - снапшот делается один раз, потом долго передаётся, а за это время данные на источнике меняются. И решение тут - это инкрементальная передача через несколько снапшотов, финальный diff минимален и сервис останавливается на секунды а не часы. 🟣Создаём первый базовый снапшот и начинаем передачу в фоне: # ZFS — базовый снапшот zfs snapshot zpool/rootfs@base zfs send zpool/rootfs@base | ssh root@new-server zfs receive -F zpool/rootfs # Btrfs — базовый снапшот btrfs subvolume snapshot -r / /mnt/snapshots/base btrfs send /mnt/snapshots/base | ssh root@new-server btrfs receive /mnt/ Пока передаётся base - сервер продолжает работать, данные меняются. 🟣Инкрементальный diff: передаём только изменения # ZFS — создаём второй снапшот и шлём только дельту zfs snapshot zpool/rootfs@incremental zfs send -i zpool/rootfs@base zpool/rootfs@incremental | \ ssh root@new-server zfs receive -F zpool/rootfs # Btrfs — аналогично btrfs subvolume snapshot -r / /mnt/snapshots/incremental btrfs send -p /mnt/snapshots/base /mnt/snapshots/incremental | \ ssh root@new-server btrfs receive /mnt/ Флаг -i (ZFS) и -p (Btrfs) означают инкрементальную передачу - только дельта между снапшотами, не весь объём. 🟣Финальная синхронизация с минимальным даунтаймом: # Останавливаем сервисы systemctl stop nginx postgresql # Финальный инкрементальный снапшот zfs snapshot zpool/rootfs@final zfs send -i zpool/rootfs@incremental zpool/rootfs@final | \ ssh root@new-server zfs receive -F zpool/rootfs # Поднимаем сервисы уже на новом сервере Финальный diff минимален, только изменения за последние минуты пока останавливались сервисы. 🟣Проверка целостности после передачи: # ZFS встроенная проверка ssh root@new-server zfs get checksum zpool/rootfs ssh root@new-server zpool scrub zpool # Btrfs ssh root@new-server btrfs scrub start /mnt ssh root@new-server btrfs scrub status /mnt Без проверки можно перенести данные с тихим битовым повреждением и узнать об этом только при чтении. 🟣Восстановление загрузки: arch-chroot /mnt # Обновляем fstab с новыми UUID blkid >> /etc/fstab # Правим вручную — убираем старые UUID # Обновляем initramfs update-initramfs -u -k all # Устанавливаем загрузчик grub-install /dev/sdX update-grub # Для систем с systemd-boot bootctl install 🟣Чистим снапшоты после успешного переноса: # ZFS zfs destroy zpool/rootfs@base zfs destroy zpool/rootfs@incremental zfs destroy zpool/rootfs@final # Btrfs btrfs subvolume delete /mnt/snapshots/base btrfs subvolume delete /mnt/snapshots/incremental 🤖Бесплатный ChatGPT

