Как сделать бэкап и восстановить сервер с помощью образов диска dd
dd создаёт посекторный образ всего диска. Этот образ можно использовать, чтобы восстановить диск в состояние на момент создания бэкапа. В этом руководстве описано, как создать образ диска с помощью dd и как восстановиться из него. Поскольку dd работает на уровне диска, запускайте его из live-окружения (Finnix), а не из работающей системы, которую копируете.
Используйте dd, когда нужна поблочная копия всего диска. Для файлового бэкапа (отдельные файлы и папки) обычно лучше подходят rsync или tar.
Перед началом
- ISO-образ Finnix
- доступ к IP-KVM сервера (IP-based KVM)
- хранилище с достаточным свободным местом для образа (см. примечание в сценариях бэкапа)
- данные SSH, если бэкап делается на удалённое хранилище
- доступ root
1. Коротко о dd
dd копирует данные блок за блоком. Значимые части команды:
- if= источник (откуда читаем)
- of= цель (куда пишем)
- bs=8M задаёт размер блока и может ускорить копирование
- status=progress показывает, сколько уже скопировано, удобно на больших дисках
По умолчанию команды ниже копируют исправный диск. Если на исходном диске есть ошибки чтения, добавьте conv=noerror,sync: dd тогда продолжит работу при ошибке чтения, а не остановится, и заполнит нечитаемые блоки нулями. Это сохраняет выравнивание последующих блоков, но в заполненных областях данные теряются, поэтому файловая система в образе может оказаться повреждённой. Для сбойного диска рассмотрите ddrescue, который предназначен для восстановления данных с проблемных дисков и ведёт карту ошибок чтения.
dd перезаписывает цель полностью и без запроса подтверждения. Неверный of= уничтожит данные. Всегда проверяйте имена устройств перед запуском.
2. Подготовка
Загрузитесь с Finnix. Смонтируйте ISO-образ Finnix через IP-KVM и загрузите сервер с него. Это позволяет работать с дисками сервера, не запуская установленную ОС с того диска, который копируете. Не снимайте образ с работающей системы: если на исходном диске есть смонтированные файловые системы, которые изменяются, образ может быть несогласованным. Убедитесь, что исходный диск не используется работающим окружением.
Определите диски. Выведите список дисков с размерами и точками монтирования:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS
Как альтернатива:
fdisk -l
Найдите системный диск (например /dev/sda) и запомните имя устройства. Это самый важный шаг: dd не запрашивает подтверждение, поэтому ошибка здесь сотрёт не тот диск. В командах ниже /dev/sda это только пример. Замените его на реальный диск, который вы определили через lsblk. Перед снятием образа убедитесь, что у исходного диска в выводе lsblk нет точек монтирования.

3. Сценарий А: Резервное копирование в облако через SSHFS (CloudBox)
Используйте этот способ, чтобы сохранить образ на INTROSERV CloudBox или любом SSH-хранилище. Данные SSH (user, host, путь) возьмите из деталей заказа.
Создайте точку монтирования:
mkdir -p /mnt/backup
Смонтируйте облачное хранилище:
sshfs user@host:/path /mnt/backup
Создайте образ диска:
dd if=/dev/sda of=/mnt/backup/sda.img bs=8M status=progress
По завершении dd покажет, сколько данных скопировано. Образ sda.img теперь находится в вашем облачном хранилище.
Большое копирование через SSHFS может идти медленно. Если SSH-соединение оборвётся, копирование может прерваться, а образ окажется неполным.
Размер образа примерно равен объёму всего исходного диска, а не объёму занятых данных. Диск на 2 ТБ со 100 ГБ данных всё равно даст образ около 2 ТБ. Убедитесь, что в хранилище достаточно свободного места.
Необязательно: чтобы сэкономить место и уменьшить объём передачи по сети, сжимайте образ прямо при создании:
dd if=/dev/sda bs=8M status=progress | gzip -c > /mnt/backup/sda.img.gz
Восстановление из сжатого образа выполняется так:
gunzip -c /mnt/backup/sda.img.gz | dd of=/dev/sda bs=8M status=progress
Размер сжатого файла зависит от того, насколько хорошо сжимаются данные диска. Проверка контрольной суммы ниже применима к несжатому .img.
4. Сценарий Б: Резервное копирование на другой физический диск в том же сервере
Используйте этот вариант, если в сервере есть второй диск (например /dev/sdb) достаточного объёма для образа. На целевом диске должно быть достаточно места для образа всего исходного диска, и это не должен быть сам исходный диск.
Создайте точку монтирования и смонтируйте второй диск:
mkdir -p /mnt/backup mount /dev/sdb1 /mnt/backup
Создайте образ диска:
dd if=/dev/sda of=/mnt/backup/sda.img bs=8M status=progress
5. Проверка образа (необязательно)
Чтобы проверить образ, вычислите контрольную сумму SHA-256 исходного диска и образа и сравните их. Исходный диск не должен меняться между созданием образа и подсчётом суммы. Это снова читает весь диск целиком, поэтому на больших дисках занимает время:
sha256sum /dev/sda sha256sum /mnt/backup/sda.img
Оба значения должны совпасть.
6. Восстановление
Восстановление — это бэкап в обратном порядке: образ становится источником (if=), а диск — целью (of=). Снова загрузитесь с Finnix и смонтируйте хранилище с образом так же, как при создании бэкапа.
Перед восстановлением убедитесь, что целевой диск не меньше исходного. Образ полного диска нельзя восстановить на диск меньшего размера, даже если на исходном было занято мало места.
Из облачного хранилища:
dd if=/mnt/backup/sda.img of=/dev/sda bs=8M status=progress
С второго диска: сначала смонтируйте его, затем выполните ту же команду. Здесь /dev/sda тоже только пример. Замените его на реальный целевой диск.
Восстановление перезаписывает весь целевой диск. Убедитесь, что of= указывает на тот диск, на который восстанавливаете. По завершении dd перезагрузите сервер и загрузитесь с восстановленного диска.
Если целевой диск больше исходного, лишнее место останется незанятым. При необходимости раздел и файловую систему можно расширить позже; конкретные команды зависят от разметки диска и файловой системы. При восстановлении на другое оборудование может потребоваться дополнительная настройка загрузки. Если исходный диск использует LVM, LUKS, RAID или другой слой хранения, после восстановления может потребоваться дополнительная настройка, особенно на другом оборудовании.