Перенос сервера на новый физический диск

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

Самым простым и надежным способом будет сделать клонирование диска с помощью утилиты “dd”.

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

В данном примере будет рассматриваться перенос сервера работающего на системе UEFI и с разметкой диска GPT.

Процесс восстановления на новом диске/сервере под системой BIOS и/или с разметкой диска MBR будет немного отличаться,

поэтому или адаптируйте инструкцию под ваши реалии или возможно тут когда-нибудь появится ссылка на альтернативную инструкцию с BIOS и MBR.

Прежде чем начать, стоит усвоить одно правило:

Для успешной загрузки операционной системы linux необходимо соблюдение 4 условий:

  • Загрузчик
  • Ядро
  • Initrd
  • Раздел с системой

1. На сервере рабочем сервере (источнике) запустите следующую команду что бы перейти в режим супер пользователя:

sudo su

Вывод команды будет примерно следующим:

2. Что бы перейти в корень файловой системы введите команду:

cd /

Вывод команды будет примерно следующим:

3. Что бы создать архив текущей системы, введите следующую команду:

tar -cvpzf server.tar.gz −−exclude=/server.tar.gz −−one-file-system /

где:

c – создать новый архив.

v – подробный режим, при котором выводится информация о текущих действиях.

p – сохранить права доступа на файлы.

z – сжать с помощью gzip.

f  – указать полное имя файла с резервной копией.

server.tar.gz – имя файла архива, которое будет создано.

−−exclude=/server.tar.gz – исключить файл “server.tar.gz” что бы избежать рекурсии и tar не архивировал сам себя.

−−one-file-system – создать архиф только одной файловой системы, т.е.  другие примонтированные ФС заархивированы не будут, их надо будет архивировать отдельно.

/ – указывает каталог, резервную копию которого необходимо сделать, в нашем случае это весь корень и все его вложенные файлы и папки (кроме примонтированных).

Вывод команды будет примерно следующим:

4. Что бы убедиться, что архив создался, введите команду:

ls -la

Вывод команды будет примерно следующий:

5. На этом создание архива завершено.

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

В данном примере будет использоваться Ubuntu Desktop 24.04.1 LTS, но вы можете использовать любой другой.

Определите буквенные идентификаторы дисков, для этого откройте терминал и введите следующую команду:

lsblk

Вывод будет примерно следующим:

В выводе команды видно, что новый диск – это диск “sda”, а старый диск это “sdb”.

6. Выберете в графическом меню Ubuntu программу GParted и запустите ее.

 В окне программы GParted выберете диск “sda”, после чего перейдите на вкладку “Device” и создайте новую разметку для диска.

7. Выберете разметку “gpt” и нажмите кнопку “Apply”.

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

Создайте новый раздел размером в 500 Mb в формате “fat32” и нажмите кнопку “Add”.

9. Оставшееся место выделим под саму ОС Linux.

Укажите размер партиции, выберете формат “ext4” и нажмите кнопку “Add”.

10. Нажмите “зеленую” кнопку и кнопку “Apply”, что бы применить изменения.

11. Осталось установить необходимые флаги на будущем разделе efi что бы grub смог его идентифицировать при загрузке.

Щелкните правой кнопкой мыши по разделу (который 500 Mb, fat32) и нажмите “Manage Flags”. 

12. Установите флаги “boot” и “esp”, как показано на рисунке.

13. На этом этапе мы подготовили новый HDD к работе, создали загрузочный раздел efi и отформатировали оставшуюся часть диска в формат ext4 для работы самой системы.

Программу GParted можно закрыть, она больше не нужна.

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

sudo mkdir /mnt/new

и

sudo mkdir /mnt/old

Вывод команды будет примерно следующий:

14. На данном этапе необходимо смонтировать старый и новый HDD, но т.к. на новом HDD были созданы новые партиции,

необходимо определить их буквенные идентификаторы, для этого введите следующую команду:

lsblk

Вывод команды будет примерно следующий:

15. Что бы смонтировать новый диск введите следующую команду:

sudo mount /dev/sda2 /mnt/new

где:

/dev/sda2 – основной раздел нового hdd, который хотим примонтировать.

/mnt/new – папка, которая используется, как точка монтирования.

Вывод команды будет примерно следующим:

16. Смонтируйте старый диск сервера источника, для этого введите следующую команду:

sudo mount /dev/sdb4 /mnt/old

где:

/dev/sdb4 – основной раздел старого диска сервера источника.

/mnt/old – папка, которая используется, как точка монтирования.

Вывод команды будет примерно следующий:

17. Скопируйте архивную копию старого сервера из диска источника в новый hdd, для этого введите команду:

sudo cp /mnt/old/server.tar.gz /mnt/new/server.tar.gz

где:

cp – команда копирования.

/mnt/old/server.tar.gz – полный путь до файла источника.

/mnt/new/server.tar.gz – полный путь до создаваемой копии.

Вывод команды будет примерно следующий:

18. Размонтируйте диск старого сервера источника, для этого введите команду:

sudo umount /mnr/old

где:

/mnt/old – точка монтирования старого диска сервера источника.

Вывод команды будет примерно следующим:

19. Что бы не при каких обстоятельствах не затереть старый диск сервера источника,

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

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

sudo su

и

lsblk

где:

sudo su – переход в режим супер пользователя.

lsblk – покажет все подключенные диски.

Вывод команд будет примерно следующий:

21. Смонтируйте основной раздел нового hdd в папку “mnt”, для этого введите следующую команду:

mount /dev/sda2 /mnt

где:

/dev/sda2 – основной раздел нового hdd.

/mnt – точка монтирования, кода будет смонтирован диск.

Вывод будет примерно следующий:

22. Распакуйте архивную копию сервера источника, для этого введите следующие команды:

tar -xvpzf /mnt/server.tar.gz -C /mnt/ −−numeric-owner

где:

x – разархивировать.

v – подробный режим, при котором выводится информация о текущих действиях.

p – сохранить права доступа на файлы.

z – использовать утилиту gzip.

f – указать полное имя копии с резервной копией.

-C /mnt/- указать каталог, в который произойдет восстановление.

−−numeric-owner – восстановить пользователей файлов по числовому дескриптору, а не по имени (во избежании возможных ошибок).

Вывод команды будет примерно следующий:

23. Создайте папку для вашего будущего efi раздела, для этого введите следующую команду:

mkdir /mnt/boot/efi

где:

mkdir – команда создания директории.

/mnt/boot/efi – полный путь , где будет создана папка.

Вывод команды будет примерно следующий:

24. Узнайте и запишите UUID ваших новых разделов на новом диске, для этого введите следующую команду:

blkid

Вывод команды будет примерно следующий:

25. В данном примере uuid раздела sda1, который мы планируем использовать, как efi раздел для загрузки системы – 4ADE-EF8F

а

uuid основного раздела, в котором будет находиться сама система – 93455062-1526-4ee4-9293-f2ba6b056885

Теперь эти данные необходимо внести в файл “fstab”, что бы при загрузке системы загрузчик grub смог верно идентифицировать разделы на диске

и смонтировать efi и основной разделы, для этого введите следующую команду:

nano /mnt/etc/fstab

где:

nano – текстовый редактор.

/mnt/etc/fstab – файл сервера источника, который открывается на редактирование.

Вывод команды будет примерно следующий:

После внесения изменений, файл должен выглядеть примерно следующим образом:

Нажмите “Ctrl” + “o”, что бы сохранить изменения и “Ctrl” + “x”, что бы закрыть редактор.

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

в соответствующие каталоги hdd сервера источника, для этого введите следующие команды:

mount −−rbind /dev /mnt/dev

и

mount −−rbind /sys /mnt/sys

и

mount −−rbind /proc /mnt/proc

и

mount −−rbind /run /mnt/run

где:

mount – команда монтирования.

−−rbind – опция, указывающая на то, что необходимо смонтировать так же все файлы и подпапки, находящиеся внутри.

/dev – каталог Live CD, который собираемся монтировать.

/mnt/dev/ – полный путь до такого же каталога на hdd сервера источника.

Вывод команд будет примерно следующий:

27. Смонтируйте раздел efi sda1 в /mnt/boot/efi, как это было указано в файле fstab, для этого введите следующую команду:

mount /dev/sda1 /mnt/boot/efi

где:

mount – команда монтирования.

/dev/sda1 – efi раздел, который мы подготовили заранее.

/mnt/boot/efi – точка монтирования, куда будет смонтирован раздел.

Вывод команды будет примерно следующий:

28. Перейдите в окружение chroot будущей системы, для этого введите следующую команду:

chroot /mnt

где:

chroot – команда смены окружения root.

/mnt – каталог на который меняется окружение.

Вывод команды будет примерно следующий:

29. На данном этапе окружение root находится уже не на Live CD, на смонтированном диске.

Что бы система смогла загружаться, осталось установить и настроить загрузчик grub.

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

apt-get update

Вывод команды будет примерно следующий:

30. Установите пакет grub-efi-amd64, если его нет в системе,  для этого введите следующую команду:

apt-get install grub-efi-amd64

Вывод команды будет примерно следующим:

31. Установите загрузчик grub в директорию /boot/efi, для этого введите следующую команду:

grub-install −−efi-directory=/boot/efi

Вывод команды будет примерно следующий:

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

32. При установке grub сформировал конфигурацию, которую необходимо разместить в efi разделе вашего hdd, для этого выполните следующую команду:

update-grub

Вывод команды будет примерно следущим:

33. Как и говорилось в начале статьи, для успешной загрузки операционной системы Linux необходимо, выполнение всего 4 условий:

  • Загрузчик
  • Ядро
  • initrd
  • Раздел с системой

Убедитесь, что все необходимое присутствует на hdd, для этого введите следующую команду:

ls -la /boot

Вывод команды будет примерно следующий:

34. Как видно из вывода команды выше, никаких образов initrd в папке boot нет, поэтому следующим шагом будет скачивание и установка initrd и vmlinuz.

Что бы скачать и установить все необходимые компоненты введите следующую команду:

apt-get -V install linux-generic linux-image-generic linux-headers-generic

Вывод команды будет примерно следующий:

35. Снова проверим содержимое папки boot, для этого введите команду:

ls -la /boot

Вывод команды должен быть примерно следующий:

36. На этот раз все условия соблюдены, а это значит, что можно выйти из окружения chroot, выключить сервер, отключить Live CD и попробовать загрузиться штатным способом.

Введите следующие команды:

exit

и

poweroff

где:

exit – выход из окружения chroot.

poweroff – выключение сервера.

Отсоедините Live CD и попробуйте загрузиться.

Загрузка должны пройти штатными средствами.

Scroll to Top