Сравнение методов передачи образов дисков между серверами: Linux и Windows
Перемещение данных между серверами, особенно когда речь идет о целых образах дисков, — важный процесс для системных администраторов. Это может понадобиться при резервном копировании, миграции данных или восстановлении после сбоя серверов. В этой статье мы рассмотрим несколько методов передачи образов дисков с использованием различных технологий и инструментов, доступных в SystemRescue для Linux и Windows.
Где это может быть полезно в различных сценариях:
- Резервное копирование и восстановление
- Миграция данных
- Клонирование операционных систем
- Сценарии восстановления после сбоя
- Создание образов для будущего развертывания
Предварительная настройка серверов
Все методы, описанные в этой статье, применяются на Ваш собственный страх и риск. Если вы что-то удалите, сломаете или отправите образ диска в параллельную вселенную - автор не виноват, а диск не воскреснет.
Перед тем как приступить к передаче данных, необходимо загрузить оба сервера в SystemRescue.
Для перевода сервера Cloud VPS в SystemRescue можно воспользоваться следующим способом: перейдите по ссылке Zomro: Услуги/Cloud VPS, нажмите на иконку с шестерёнкой справа и выберите пункт 'Загрузить с ISO'. Затем выберите доступный образ '[ISO] systemrescue-11.00-amd64', нажмите на него и после этого нажмите 'Подтвердить'.
Для загрузки в SystemRescue на других серверах выполните следующие шаги:
- Скачайте ISO-образ SystemRescue с официального сайта.
- Загрузитесь в SystemRescue и подключитесь к каждому серверу.
Для настройки доступа "один к одному" между серверами:
- После загрузки в SystemRescue настройте сеть на каждом сервере (например, с помощью
ip link
иip addr
для установки статического IP-адреса). - Убедитесь, что оба сервера могут пинговать друг друга, используя команду
ping
. - Настройте SSH-доступ на обоих серверах, чтобы можно было передавать данные между ними.
- Обеспечьте авторизацию по SSH, настроив обмен публичными ключами между серверами с помощью
ssh-keygen
иssh-copy-id
.
Поиск дисков для переноса
Для поиска доступных дисков используйте команду lsblk
. Эта команда выведет список всех подключенных дисков и разделов:
lsblk
Пример вывода:
В данном примере перенос будет осуществлен с раздела /dev/sda2
.
Простой перенос через dd
Для выполнения простого переноса данных используйте следующую команду:
dd if=/dev/sda2 bs=1M | ssh [email protected] "dd of=/dev/sda2 bs=1M status=progress"
Методы передачи образов дисков
1. Передача без сжатия с использованием dd
# Пример команды:
dd if=/dev/sda2 bs=1M | ssh [email protected] "dd of=/dev/sda2 bs=1M status=progress"
Что происходит:
dd
считывает данные с раздела/dev/sda2
блоками по 1 МБ.- Данные передаются по SSH без изменений.
- На удаленной машине
dd
записывает данные в раздел/dev/sda2
.
Преимущества:
- Простота выполнения.
- Минимальная нагрузка на процессор (сжатие не выполняется).
- Быстрая передача на высокоскоростных сетях.
Недостатки:
- Передается большой объем данных, включая пустые блоки.
- Может быть медленно на медленных или загруженных сетях.
Пример вывода:
2. Передача со сжатием через gzip
# Пример команды:
dd if=/dev/sda2 bs=1M | gzip | ssh [email protected] "gzip -d | dd of=/dev/sda2 bs=1M status=progress"
Что происходит:
dd
считывает данные с/dev/sda2
.- Данные сжимаются с помощью
gzip
. - Сжатые данные передаются по SSH.
- На удаленной машине данные распаковываются (
gzip -d
) и записываются в раздел.
Преимущества:
- Меньший объем данных передается по сети, что ускоряет передачу на медленных сетях.
- Эффективно для разделов с большим количеством пустых или повторяющихся данных.
Недостатки:
- Сжатие и распаковка создают дополнительную нагрузку на процессор.
- Может быть медленнее на скоростных сетях при ограниченных вычислительных ресурсах.
Пример вывода:
3. Передача со сжатием через pigz
(параллельное сжатие)
# Пример команды:
dd if=/dev/sda2 bs=1M | pigz -p 2 | ssh [email protected] "pigz -d -p 2 | dd of=/dev/sda2 bs=1M status=progress"
Что происходит:
dd
считывает данные с раздела.pigz
сжимает данные с использованием двух ядер.- Сжатые данные передаются по SSH.
- На удаленной машине
pigz -d
распаковывает данные иdd
записывает их на диск.
Преимущества:
- Быстрое сжатие за счет параллельной обработки на многопроцессорных системах.
- Экономия трафика благодаря сжатию.
Недостатки:
- Зависимость эффективности от характера данных.
Пример вывода:
4. Передача с использованием partclone
# Определение файловой системы:
FSTYPE=$(blkid -o value -s TYPE /dev/sda2)
# Пример команды:
partclone.${FSTYPE} -c -s /dev/sda2 -o - | ssh [email protected] "partclone.${FSTYPE} -r -o /dev/sda2"
Что происходит:
partclone
считывает только занятые блоки файловой системы (например, ext4 или ntfs).- Данные передаются по SSH.
- На удаленной машине
partclone
восстанавливает данные на указанном разделе.
Преимущества:
- Передается только используемое пространство, что экономит время и трафик.
- Автоматическая проверка удаленого диска на достаточное место.
- Быстрее для разделов с большим количеством свободного места.
Недостатки:
- Работает только с поддерживаемыми файловыми системами (например, ext4 или ntfs).
- Не создает точную блочную копию.
- Зависимость эффективности от характера данных.
Пример вывода:
5. Передача с использованием partclone
и сжатие через pigz
(параллельное сжатие)
# Определение файловой системы:
FSTYPE=$(blkid -o value -s TYPE /dev/sda2)
# Пример команды:
partclone.${FSTYPE} -c -s /dev/sda2 -o - | pigz -p 4 | pv | ssh [email protected] "pigz -d -p 4 | partclone.${FSTYPE} -r -o /dev/sda2"
Что происходит:
partclone
считывает только занятые блоки файловой системы (например, ext4 или ntfs).pigz
сжимает данные с использованием четырех ядер.- Данные передаются по SSH.
- На удаленной машине
pigz -d
распаковывает данные, после чегоpartclone
записывает их на диск.
Преимущества:
- Передается только используемое пространство, что экономит время и трафик.
- Экономия трафика за счет сжатия с использованием
pigz
. - Автоматическая проверка удаленого диска на достаточное место.
- Быстрее для разделов с большим количеством свободного места.
Недостатки:
- Работает только с поддерживаемыми файловыми системами (например, ext4 или ntfs).
- Не создает точную блочную копию.
- Зависимость эффективности от характера данных.
Пример вывода:
Разница между простым переносом через partclone
и переносом с использованием partclone
совместно с pigz -d
:
Перенос образа диска (объёмом 36 ГБ скорость порта 1 гбит/с) с помощью partclone.ntfs
:
6.18 GiB 0:01:53 [55.6 MiB/s]
Перенос образа диска (объёмом 36 ГБ скорость порта 1 гбит/с) с помощью partclone.ntfs
и сжатия через pigz -d
:
4.84 GiB 0:02:42 [30.5 MiB/s]
Возможные ошибки: После переноса Windows-системы может возникнуть ошибка 0xc000000e
Код ошибки 0xc000000e
может быть вызван следующими причинами:
- Повреждение загрузочной записи, что приводит к нарушению структуры файла Boot Configuration Data (BCD).
- Отсутствие или повреждение файла
winload.exe
, который является ключевым компонентом для запуска ОС (при этой ошибке указываеться путь кwinload.exe)
.
Для восстановления загрузочной записи потребуется установочный носитель с Windows. Загрузите устройство с этого носителя и в появившемся меню выберите раздел для восстановления системы.
Перейдите к расширенным настройкам и откройте окно для ввода команд.
Далее поочередно введите следующие команды:
- Сначала введите
bootrec /scanos
для сканирования носителей на наличие действующих ОС. - Затем выполните команды
bootrec /fixmbr
иbootrec /fixboot
для исправления загрузочного сектора. - И завершите командой
bootrec /rebuildbcd
.
После выполнения инструкций перезапустите сервер и проверьте, устранена ли неполадка. Этот вариант особенно эффективен при ошибке, вызванных повреждением данных загрузочного процесса.
Заключение
Данный способ переноса сервера рекомендуеться для систем Linux чтобы не возникало ошибок после переноса.
Выбор метода передачи данных зависит от ваших конкретных требований:
- Простота: Используйте
dd
без сжатия. - Экономия трафика: Используйте сжатие через
gzip
илиpigz
. - Оптимизация передачи для разделов с пустым пространством: Используйте
partclone
.