Как клонировать сервер linux

Обновлено: 02.07.2024

В данной инструкции я попробую рассмотреть различные сценарии, с которыми мы можем столкнуться при клонировании диска в Linux с системным разделом. В итоге мы должны будем запустить нашу систему с другого диска.

Данная процедура потенциально опасна для данных. Любое неверное действие или нюанс, связанный с уникальной настройкой, могут привести к потере данных. Обязательно, выполняем резервное копирование всех важных файлов. Также я рекомендую потренироваться в тестовой среде.

В зависимости от системы и типа разделов, действия могут отличаться, а могут появляться особенности, которые сделают работу сложнее. Клонирование диска может быть выполнено в несколько действий, а может превратиться в кошмар. Запасаемся временем и терпением.

Процесс будет выполнен в несколько шагов:

1. Клонирование диска

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

Смотрим состояние дисков и разделов на текущий момент:

Определяемся, с какого диска на какой мы будем выполнять копию. Это может прозвучать банально, но тут важно не перепутать источник диска, с которого клонируется информация и целевой носитель.

dd if=/dev/sdx1 of=/dev/sdy1 bs=64K conv=noerror,sync

* Команда выполняет блочное копирование и запускается со следующими параметрами:

  • if — источник данных.
  • of — куда копировать данные.
  • bs — объем блока, который будет читаться и копироваться за раз.
  • conv — дополнительные опции. В данном примере noerror — продолжать операцию в случае ошибки чтения данных; sync — копировать все, в том числе и нулевые данные.

* Таким образом, мы клонируем диск или раздел с /dev/sdx1 в /dev/sdy1 (не путаем источник и назначение).

Команда будет выполняться некоторое время. После ее завершения можно снова посмотреть состояние дисков и разделов:

При клонировании диска мы должны увидеть, что целевой носитель приобрел такую же разметку.

Следующим шагом настроим загрузчик.

2. Загрузчик grub2

Для большинства современных систем характерно использование grub2. Его мы и будем рассматривать. Но если в вашем случае используется сервер с grub первой версии, то мы можем обратиться к инструкции How to Migrate the Root Filesystem to a New Disk.

Мы можем увидеть разные варианты строки, указывающей на загрузку системы.

а) В некоторых случаях это будет универсальная строка, которую не нужно менять, например:

GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"

* в данной строке мы видим, что загрузчик будет искать том LVM centos/root. Так как после клонирования он не поменяется, то нам ничего не нужно редактировать.

б) В некоторых случаях строка может быть пустой:

* в данном примере также от нас не потребуется никаких действий.

в) В некоторых случаях указатель может вести на конкретные диски:

GRUB_CMDLINE_LINUX="root=/dev/disk/by-id/<partition/disk name> resume=/dev/disk/by-id/<partition/disk name> splash=silent quiet showopts"

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

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

Стоит сделать тестовое отключение с целью проверки, какое имя станет у диска.

3. Файл fstab

На следующем шаге мы проверяем настройки монтирования корневой директории и раздела boot при загрузке системы. Они задаются в файле fstab.

Есть два надежных способа указать диск при монтировании — использовать его идентификатор или точку монтирования тома LVM. Рассмотрим оба варианта.

Данный способ можно использовать частично, так как раздел boot не может использовать LVM, поэтому данное монтирование будет применяться только к корневому разделу.

Если мы используем LVM, то все, что нам нужно сделать, это открыть файл fstab и проверить, что в нем, на самом деле, используется LVM при монтировании корневого раздела:

Мы можем увидеть что-то на подобие:

.
/dev/mapper/centos-root / xfs defaults 0 0
.

Понять, используется ли LVM можно командой:

Мы должны увидеть пометку lvm:

.
centos-root 253:0 0 13.4G 0 lvm /
.

Как было сказано выше, в случае использования LVM, нам не придется редактировать fstab, так как точка монтирования не поменяется.

Использование идентификатора

Для получения списка дисков с их идентификаторами, вводим команду:

Мы получим что-то на подобие:

* как видим, идентификаторы дисков совпадают, так как команды dd клонирует информацию полностью. Также обратите внимание, что разделы LVM также имеют свои идентификаторы. Это очень важный момент, так как точка монтирования в случае использования LVM должна указывать на него.

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

Находим раздел, который соответствует корневому и смотрим его идентификатор. После открываем файл:

Наши записи могут быть, примерно, такими:

Но также никто нам не запретит использовать гибридный вариант, например:

* в данном варианте мы используем том LVM для корня и идентификатор для boot.

Буква (цифра) раздела

Также мы можем использовать монтирование при указании конкретного диска и раздела, например:

/dev/sda2 / xfs defaults 0 0
/dev/sda1 /boot xfs defaults 0 0

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

4. Перезагрузка

Надеемся, что мы все сделали правильно и перезагружаемся. На данном этапе также могут быть варианты.

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

б) Если мы сохранили оба диска, нам нужно убедиться в настройках БИОС/UEFI, что загрузка выполняется с нового диска.

Мне нужно клонировать работающий сервер Linux. Мы не можем выключить рабочий сервер. Есть ли способ получить клон и развернуть его на другом сервере?

Есть много способов скопировать диски, файловые системы или файлы. Как правило, копирование файловой системы дает вам хороший клон с гибкостью, которая может быть немного другого размера в целевой системе. Когда целевая система работает под управлением какого-либо живого Linux (knoppix, ubuntu live и т. Д.), Загруженного с компакт-диска, вы можете создавать разделы на диске, используя fdisk или ваше любимое приложение для работы с разделами. Предполагая, что у вас SSH-сервер работает в исходной системе, используйте подход, подобный следующему:

Волшебство происходит в этой команде:

При использовании какого-либо конкретного метода для клонирования дисков в реальной среде Linux ваша единственная проблема, скорее всего, связана с базами данных. Лучший способ сделать резервную копию и восстановить базу данных - использовать их утилиту для создания снимка базы данных в формате ascii непосредственно перед дампом файловой системы. Для MySQL есть:

Для postgresql есть:

Если вы столкнулись с какой-либо постоянной ошибкой в ​​новой системе, восстановите базу данных. В качестве альтернативы, как только вы отключите службы в исходной системе, снова выполните дамп БД и восстановите его в целевой системе, и вы не пропустите какие-либо недавно измененные данные.

Создайте расположение дисков на новой машине так, как вы этого хотите.

Используйте rsync для переноса содержимого диска. Повторите несколько раз, чтобы наверстать упущенное.

На новой машине поэкспериментируйте с тем, что вам нужно будет сделать дополнительно для правильной загрузки. Grub, например, и приведёт его в согласованное состояние.

Пока вы не сможете выключить старую машину, регулярно выполняйте rsync, чтобы новый диск был близок к старому.

Затем переведите старый в режим обслуживания, снова выполните rsync и загрузите новый, который должен работать, как старый.

Мой коллега клянется System Imager:

Я не знаю, насколько хорошо это будет работать для «живых» систем.

В противном случае я думаю, что вы застряли, делая вещи вручную:

  • Убедитесь, что вне репозиториев нет никаких приложений для установки
  • Сбросить список установленных пакетов и установить их на новый сервер
  • Копировать конфигурационные файлы
  • Восстановить базы данных
Systemimager пород. Он работает в реальной системе с теми же условиями для запуска rsync для копирования состояния активной системы. Некоторые приложения должны быть закрыты или выгружены на диск (например, базы данных mysql) перед копированием и должны быть восстановлены в новой системе.

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

Синхронизация ваших баз данных в согласованном состоянии на диске может быть сложной, но может просто сработать моментальный снимок, а затем восстановить его после восстановления образа DAR. DAR повлияет на производительность сервера во время его работы.

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


а по подробнее ! можно как правельно ней пользовасяться есть сервер ubuntu 14.04 VPS1 с сайтами и настройками.

второй сервер с только установленной Ubuntu 14.04 VPS2

какие команды для Синхронизации и полной копии


Напишите на примере кто делал полный клон. какой утилитой и чуть подробнее за ранее спасибо. не хочеться и Оригинал Уложить по не знанию


Можно вообще образ старого залить на новый.
Сначала качаешь себе образ VPS.
На своем компьютере (не VPS)


Потом полученный image заливаешь на новый VPS
Тоже со своего компьютера

Если ip не прописан в настройках, то большой шанс, что заработает после перезагрузки.


немного не понял.


и как быть еше с такой ситуацией, на vps1 df /dev/vda1 диск называеться так

а вот на впс на которой буду наливать backup of=/dev/sda1


это команда чтобы слить на свой ПК ?

у меня Windows и есть терпинал Putty

сочувствую, можно поставить cygwin или найти компьютер с linux'ов

и как быть еше с такой ситуацией, на vps1 df /dev/vda1 диск называеться так

sda заменить на vda. Ты копируешь весь диск целиком, а не раздел

PS: У второй VDSки размер диска должен быть такой же (или больше).

adn ★★ ( 22.09.17 15:25:20 )
Последнее исправление: adn 22.09.17 15:29:59 (всего исправлений: 3)


Друг,подскажи а на фтп какой командой можно сразу сделать БекАП? ну типа


в принципе делаю на другую впс сливаю командой

при копирование нет информации о процессе, сколько % сейчас выполнено, есть ли дополнительный ключик что-бы выводило информацию?


куда подставить эту команду?


это отдельная утилита! тоже можно ней делать бекап


нашел что можно так

но что-то не хавает утилита DD команду status=progress


подскажи такая ситуация. вот делаю БекАП

размер диска 10 GB но на диске занято всего 2 Гига. то почему Образ делает все 10 Гиг. можно как-то указать что-бы делало ровно тот объем который занят.

За Ранее Спасибо.


не грузиться сервер потом. пишет что файловая система не найдена. попадаю в grub там указываю систему hd0 а толку нет пишет что-то что не так. вобшем не катит такой тупой вариант налить по сети образ. так как это же рабочаа система и на нее тупо наливают поверх

Что ты там сделал, тебе уже выше сказали нужно целиком образ диска снимать. А ты с разделами дрочишься.


в общем после перезаписи образа. система не грузиться. грузиться только grub

впски покупаю у одгого Дата центра. вроде одинаковые все и диски одинаковые и даже их именна /sda1 но система падает и все. может причина что какойто есть айди в загрузчике привязка может.

показывай команды - какими сливаешь, заливаешь. На виртуалке попробывал, система грузиться. Только не проверял, как там демоны поднялись или нет.


размер диска 10 GB но на диске занято всего 2 Гига. то почему Образ делает все 10 Гиг. можно как-то указать что-бы делало ровно тот объем который занят.

оно так не работает. Файловые системы не позволят

нет, так не будет работать, так как ftp не позволяет запускать команды на удаленной машине

естественно не грузится, раз ты всего один раздел копируешь. я же писал выше. sda1 - это первый раздел диска, а sda - весь диск.

adn ★★ ( 25.09.17 13:38:37 )
Последнее исправление: adn 25.09.17 13:39:58 (всего исправлений: 2)


как лучше заливать образ, на включенную ВПС или в режиме востановления ?


странно! начинаю заливать на сервер! все как нужно

процентов 10 заливает и стает. несколько раз побывал, а ты вообще побывал такой метод?


в режиме восстановления


размеры то одинаковые? на целевой vps /dev/sda или /dev/vda ?

Должен быть поидее kernel panic. Т.к. на работающей системе затирается диск.


да одинаковые,! в режиме востановление вижу я только монтированный /mnt/vda1


да одинаковые,! в режиме востановление вижу я только монтированный /mnt/vda1

В работе используется большое количество физических серверов на базе Debian GNU/Linux. Разработчикам часто бывает нужно предоставить на растерзание клоны этих серверов, каждый раз клонировать руками неэффективно. Примечание: конкретный дистрибутив при описываемом методе не важен, метод очень легко адаптируется под любой дистрибутив.


картинка для красоты

Задача

Сделать автоматическую систему клонирования боевых серверов в виртуальные машины по крону.

Что получилось

Как получилось

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

  • Создание на самом сервере его дампа с помощью утилиты dump . Соображения такие:
    • Возможные проблемы при дампе живой ФС для виртуальной машины не страшны, это не бэкап. По опыту, на практике я пока что проблем с битыми файлами не встречал
    • Дамп сервера делается быстро, что немаловажно
    • XENовский конфиг для клона server1 лежит на virt_server в /etc/xen/server1.xm
    • LVM раздел виртуальной машины server1 такой: /dev/mapper/server1
    • Дампы server1 будем делать в server1:/dumps/server1/ , и копировать в virt_server:/dumps/server1
    • Измененные конфиги server1 будем держать в virt_server:/dumps/server1/cfg/

    При такой настройке из консоли процедура клонирования выглядит так:

    Автоматизация процесса

    • В конфиге скрипта описывается порядок клонирования каждого сервера
    • В аргументах скрипта указывается имя сервера и требуемое действие
    • Скрпит читает раздел конфига названный по имени сервера, затем делает автоматическое клонирование сервера и запуск виртуальной машины
    • Запуск скрипта происходит по крону по ночам
    • .
    • Выгода!

    Настройка сервера виртуальных машин и клонируемого сервера

    • Создать дисковый раздел для виртуальной машины
    • Создать конфигурационный файл виртуальной машины
    • Создать конфигурационный файл скрипта
    • Установить утилиту dump
    • Создать пользователя backupman
    • Разрешить этому пользователю запускать дамп, добавив в /etc/sudoers следующее: backupman ALL=NOPASSWD: /sbin/dump
    • Создать директорию для дампов
    • Сделать на эту директорию chattr +d чтобы не сдампило дампы
    • Разрешить заход по ssh с севера виртуальных машин на клониреумый сервер по ключам

    Конфиг скрипта

    Конфиг в стандарном .ini формате кладется в директорию со скриптом. Выглядит он так:

    Следует дать небольшие пояснения по параметрам ssh и scp . Эти параметры определяют формат вызова ssh и scp соответственно, и они оба нужны т.к. у ssh порт задатся ключем -p , а у scp — ключем -P .

    Сам скрипт

    Приводить скрипт полностью я не вижу смысла, т.к. я выложил его на github, поэтому только опишу работу скрипта в целом.

    Скрипт принимает на вход два параметра, а именно имя сервера, которое является именем раздела в конфигурационном файле, и требуемое действие.

    Вот основная функция, позволяющая указать какие действия мы хотим совершить. Можно проверить конфигурацию, сделать полное клонирование, сделать дампы сервера, или развернуть уже имеющиеся дампы.

    Конфигурация указанная в конфигурационном файле проверяется, и если что-то не так, то скрипт завершается. Если же все в порядке, то скрпит просто исполняет все те команды, которые можно ввести из консоли, проверяя статус их завершения.

    Самой «сложной» частью скрипта являются проверки. Я хотел бы обратить внимание на этот фрагмент:


    У меня операционная система на сервере виртуальных машин установлена именно на эти разделы, для самих виртуальных машин сделан LVM. Т.к. при разворачивании виртуальной машины на предназнеченном для нее разделе создается новая файловая системы, то для защиты от случайного уничтожения сервера виртуальных машин впишите сюда ваши системные разделы.

    Читайте также: