Расскажу, как это сделать по-нормальному, а потом, как это сделал я. Настраивается новая система и делается миграция. Попутно приводится в порядок инфраструктура, документация, настройки, в идеале в этот момент пишется или актуализируется автоматизация, чтобы потом можно было быстро мигрировать в другое место, если твой ДЦ сгорит.
Но в данном случае это одиночная арендованная VPS без какой-либо обвязки вокруг. С неё даже образ нормально не снять. Я поступил следующим образом. Создал у себя в тестовом контуре VM и добавил к ней второй диск такого же размера, как у VPS. С этой VM сделал следующее:
# ssh -T root@1.2.3.4 'dd if=/dev/sda bs=16M status=none' | dd of=/dev/sdb bs=16M iflag=fullblock status=progress conv=fsyncПрямо наживую запустил посекторное копирование удалённого диска sda на свой локальный sdb. В моём случае диск был 60 ГБ, нормально скопировался примерно за час без единого разрыва. При этом на сервере был запущен сервер MySQL.
Очевидно, что консистентную копию таким образом не сделать, но мне и не надо. Если бы побились данные, я бы их накатил из бэкапа. Мне главное окружение скопировать, чтобы не воспроизводить его вручную.
У этой виртуалки отключил основной диск, а sdb, на который залил копию VPS, сделал загрузочным. После этого успешно загрузился в полной копии VPS. Система ругнулась при запуске, что у неё повреждена файловая система, что ожидаемо. Запустил
fsck -y, потом перезагрузил систему. Она при загрузке запустила ещё раз проверку диска, все ошибки исправила, и я получил полностью рабочую копию своей VPS. Даже базу данных не пришлось перезаливать. СУБД запустилась в режиме innodb_force_recovery. Мне этого было достаточно, хотя какие-то таблицы и побились. Я только поменял IP адрес, поправил файрвол под реалии своего тестового контура и отладил обновление.Выполнил всё, что мне было нужно. Там возникли проблемы. Убедился, что исправил все ошибки, записал команды и воспроизвёл на VPS.
Способ выглядит жутко колхозным и на первый взгляд нерабочим, но на деле я такое проворачивал уже не один раз. Ранее были заметки на эту тему. Он вполне рабочий, система всегда копируется нормально. Иногда только данные бьются, которые изменились в процессе копирования. Но сама система, как правило, приезжает в рабочем состоянии. Конечно, если есть доступ к образу диска, а тем более, к снепшотам, проще копировать его. Причём это можно сделать так же наживую. Тоже побьётся файловая система, но в целом систему можно будет починить и запустить.
Основное преимущество этого способа - не надо останавливать исходную машину вообще. И не надо ставить дополнительное ПО. К примеру, сюда можно было бы установить Veeam Agent for Linux и снять образ с его помощью. Но для разовых задач не хочется ничего лишнего устанавливать. Задача решена и без этого.
———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux
