Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Создание резервных копий данных с помощью утилиты dd

Оригинал: Full Metal Backup Using the dd Command
Автор: Jack Wallen
Дата публикации: 19 августа 2016 г.
Перевод: А.Панин
Дата перевода: 15 декабря 2016 г.

Создание резервных копий данных с помощью утилиты dd

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

Как и в случае любых аспектов Linux, существуют миллиарды способов решения каждой отдельной проблемы. Это утверждение относится к любой проблеме, начиная с настройки окружения рабочего стола и веб-сервера и заканчивая чтением файлов системных журналов и созданием резервных копий данных. При этом поиск самого оптимального решения проблемы может затянуться на долгое время. Но в процессе поиска инструмента для создания резервных копий данных ваш поиск может начаться и закончиться на этапе рассмотрения утилиты dd. Название утилиты dd является отсылкой к аббревиатуре DD языка управления задачами компании IBM (Job Control Language) и расшифровывается как "Описание данных" ("Data Description"). Основной задачей dd является преобразование и копирование содержимого файлов. При этом с помощью dd вы также можете без каких-либо сложностей скопировать содержимое раздела жесткого диска или же всего жесткого диска целиком.

Список функций утилиты:

  • Создание и восстановление резервных копий как отдельных разделов, так и всего содержимого жестких дисков.
  • Копирование необработанных данных из файлов устройств.
  • Преобразование форматов данных.
  • Создание файлов фиксированных размеров.

Однако, что более важно, утилита dd является одной из старейших утилит для работы с образами дисковых накопителей, которая используется по сей день. Почему же она до сих пор актуальная? Скорее всего, потому, что она является мощной, надежной и (что наиболее важно) простой в использовании.

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

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

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

Вам также придется использовать утилиту dd при работе с Live-ситемой Linux. Она копирует каждый байт (и даже данные из неиспользуемого пространства накопителей), поэтому процесс создания резервных копий данных может надолго затянуться. Работа с утилитой dd на машине, находящейся в промышленной эксплуатации, может повлечь за собой потерю данных (именно по этой причине и рекомендуется использовать Live-систему). Поэтому вам следует прямо сейчас загрузить Live-образ формата ISO вашего любимого дистрибутива Linux и записать его либо на диск DVD, либо на флеш-накопитель с интерфейсом USB.

Имея в виду приведенные выше предупреждения, давайте приступим к работе с утилитой dd.

Еще один очень важный нюанс заключается в том, что целевой жесткий диск должен быть либо такого же, либо большего размера, чем клонируемый жесткий диск. Утилита dd будет копировать данные как из используемых, так и из неиспользуемых областей жесткого диска. Предположим, к примеру, что вы установили систему Linux на жесткий диск объемом в 250 ГБ, причем на данный момент на этом диске хранится лишь 100 ГБ полезных данных. dd не будет различать используемое и неиспользуемое дисковое пространство, создавая образ всего жесткого диска: разумеется, его объем будет равен 250 ГБ. Вы можете немного сократить размер файла образа жесткого диска, задействовав один из механизмов сжатия данных (об этом будет сказано чуть позже).

Первые шаги

Первым делом вы должны загрузить вашу Live-систему. Название используемого дистрибутива не имеет решающего значения, так как утилита dd имеется в комплекте поставки практически каждого из дистрибутивов Linux. Я буду использовать бета-версию дистрибутива Elementary OS Loki. После загрузки системы следует подключить внешний дисковый накопитель. Этот накопитель не должен содержать каких-либо важных данных (так как утилита dd перезапишет его содержимое). Лучшим вариантом является использование для этой цели пустого, только что отформатированного дискового накопителя.

Теперь следует открыть окно терминала (в Live-системе) и удостовериться в том, что файл устройства клонируемого жесткого диска на самом деле носит имя sda. Для этой цели я использую команду grep sda /var/log/syslog. Вывод этой команды (Рисунок 1) должен содержать информацию о том, что файл устройства /dev/sda соответствует клонируемому диску.

Велика вероятность того, что файл устройства, соответствующий клонируемом жесткому диску, носит имя sda

Рисунок 1: Велика вероятность того, что файл устройства, соответствующий клонируемом жесткому диску, носит имя sda.

Далее вам придется выяснить путь к корневой директории подключенного внешнего накопителя. Для этого нужно воспользоваться командой mount. В результате будет выведен значительный объем данных, при рассмотрении которых несложно определить путь к директории, ассоциированной с вашим целевым устройством (внешним накопителем). Наиболее вероятно, что данному устройству будет соответствовать файл устройства /dev/sdb.

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

Для простоты предположим, что исходному жесткому диску соответствует файл устройства /dev/sda, а разделу целевого накопителя - файл устройства /dev/sdb1. Вы можете скопировать с исходного устройства как содержимое его отдельного раздела (к примеру, /dev/sda1), так и все его содержимое. Для клонирования данных с устройства sda на устройство sdb1 мы можем выполнить следующую команду:

sudo dd if=/dev/sda of=/dev/sdb1 bs=64K conv=noerror,sync

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

  • bs: устанавливает размер копируемого блока данных (по умолчанию используется значение 512 байт, которое не подходит для жестких дисков большого объема)
  • noerror: сообщает утилите dd о необходимости продолжать работу, игнорируя все ошибки чтения
  • sync: сообщает утилите dd о необходимости заполнения блоков нулями в случае возникновения ошибок чтения

После исполнения команды вы можете отойти от компьютера, так как для завершения процесса клонирования жесткого диска потребуется достаточно много времени. В процессе работы утилиты не будет выводиться никакой информации; при этом вы также не увидите нового приветствия командной оболочки. Если вы предпочитаете видеть информацию о ходе процесса копирования данных, вы можете передать утилите аргумент status=progress аналогичным образом:

sudo dd if=/dev/sda of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

В результате вы будете получать информацию об объеме скопированных данных в реальном времени.

Кроме того, вы можете скопировать содержимое жесткого диска в обычный файл образа диска. Этот подход немного упростит процесс восстановления содержимого жесткого диска и позволит значительно сэкономить место на целевом накопителе. Для создания файла образа диска утилита dd может использоваться следующим образом:

sudo dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c  > /ПУТЬ/К/КОРНЕВОЙ/ДИРЕКТОРИИ/НАКОПИТЕЛЯ/backup_image.img.gz

Здесь /ПУТЬ/К/КОРНЕВОЙ/ДИРЕКТОРИИ/НАКОПИТЕЛЯ/ является реальным путем к корневой директории целевого накопителя (в моем случае это /media/elementary/TOSHIBA/), а не к соответствующему ему файлу устройства.

Я предпочитаю клонировать жесткие диски в файлы образов, а не просто создавать их побайтовые копии на на других дисках. Одним из преимуществ такого подхода является возможность перемещения файла образа практически на любой из доступных накопителей. Если же вы планируете лишь клонировать жесткий диск с целью его последующей замены, вам, разумеется, не придется заниматься созданием файла образа этого диска. Однако, в том случае, если вы хотите создать резервную копию диска в формате файла образа, которая может использоваться впоследствии, в том числе, для создания множества копий диска или вы хотите впоследствии перемешать файл образа диска (по какой-либо причине), последняя команда будет более предпочтительным решением. Еще одним ее достоинством является возможность сжатия файла образа, ведь из-за того, что неиспользуемое пространство диска отлично сжимается, вы получите результирующий файл гораздо меньшего размера.

Восстановление данных из файла резервной копии

А теперь я продемонстрирую методику использования утилиты dd для работы с файлом образов дисков. Как и в случае процесса копирования данных в файл образа диска, данная операция должна выполняться в рамках загруженной Live-системы. Я буду предполагать, что вы установили целевой жесткий диск в ваш компьютер, подключили нему внешний накопитель (с файлом образа диска) и загрузили Live-систему.

После завершения работы утилиты dd вы должны были получить файл образа диска с именем backup_image.img.gz на внешнем накопителе. Для восстановления данных из этого файла на новом жестком диске (мы будем восстанавливать данные на новом диске, представленном файлом устройства с именем sda, объем которого совпадает с объемом оригинального жесткого диска), нам для начала понадобятся привилегии суперпользователя. Если вы используете дистрибутив, основанный на Ubuntu, вам придется сначала выполнить команду sudo su, ввести свой пароль, нажать клавишу Enter, после чего выполнить аналогичную команду для восстановления содержимого жесткого диска из файла образа:

gunzip -c /ПУТЬ/К/КОРНЕВОЙ/ДИРЕКТОРИИ/НАКОПИТЕЛЯ/backup_image.img.gz | dd of=/dev/sda

Здесь /ПУТЬ/К/КОРНЕВОЙ/ДИРЕКТОРИИ/НАКОПИТЕЛЯ/ является путем к директории внешнего накопителя с файлом backup_image.img.gz.

Примечание: если вы используете дистрибутив, в котором утилита sudo не используется по умолчанию (такой, как Fedora или openSUSE), вы сможете получить привилегии суперпользователя с помощью команды su. После исполнения этой команды следует ввести пароль администратора и нажать клавишу Enter. После этого вы сможете выполнить приведенную выше команду для восстановления содержимого жесткого диска.

И снова вы можете отойти от компьютера, так как процесс восстановления содержимого жесткого диска займет достаточно много времени. После его окончания вы должны получить точную копию оригинального жесткого диска, пригодную для загрузки системы. Теперь вы можете перезагрузить систему, удалить накопитель или диск с Live-системой и загрузить систему с клонированного диска.

Поздравляю!

Теперь вы имеете представление о том, как использовать утилиту dd для клонирования жестких дисков. При этом dd может использоваться и для других целей. Для раскрытия потенциала данной утилиты вам придется ознакомиться с ее страницей руководства, которая открывается с помощью команды man dd.