- Создание резервных копий данных с помощью утилиты dd
- Выполняйте описанные действия с максимальной осторожностью
- Первые шаги
- Клонирование диска
- Восстановление данных из файла резервной копии
- Поздравляю!
- Как клонировать раздел или жесткий диск в Linux
- Как клонировать раздел Linux
- Как клонировать жесткий диск Linux
- Как сделать резервную копию MBR в Linux
- Команда dd и все, что с ней связано
Создание резервных копий данных с помощью утилиты dd
Оригинал: Full Metal Backup Using the dd Command
Автор: Jack Wallen
Дата публикации: 19 августа 2016 г.
Перевод: А.Панин
Дата перевода: 15 декабря 2016 г.
Если вы ищите инструмент для создания резервной копии данных, вам, возможно, не стоит рассматривать вариантов помимо утилиты 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 соответствует клонируемому диску.
Рисунок 1: Велика вероятность того, что файл устройства, соответствующий клонируемом жесткому диску, носит имя sda.
Далее вам придется выяснить путь к корневой директории подключенного внешнего накопителя. Для этого нужно воспользоваться командой mount . В результате будет выведен значительный объем данных, при рассмотрении которых несложно определить путь к директории, ассоциированной с вашим целевым устройством (внешним накопителем). Наиболее вероятно, что данному устройству будет соответствовать файл устройства /dev/sdb .
Клонирование диска
Для простоты предположим, что исходному жесткому диску соответствует файл устройства /dev/sda , а разделу целевого накопителя — файл устройства /dev/sdb1 . Вы можете скопировать с исходного устройства как содержимое его отдельного раздела (к примеру, /dev/sda1 ), так и все его содержимое. Для клонирования данных с устройства sda на устройство sdb1 мы можем выполнить следующую команду:
В данном случае были использованы следующие аргументы:
- bs : устанавливает размер копируемого блока данных (по умолчанию используется значение 512 байт, которое не подходит для жестких дисков большого объема)
- noerror : сообщает утилите dd о необходимости продолжать работу, игнорируя все ошибки чтения
- sync : сообщает утилите dd о необходимости заполнения блоков нулями в случае возникновения ошибок чтения
После исполнения команды вы можете отойти от компьютера, так как для завершения процесса клонирования жесткого диска потребуется достаточно много времени. В процессе работы утилиты не будет выводиться никакой информации; при этом вы также не увидите нового приветствия командной оболочки. Если вы предпочитаете видеть информацию о ходе процесса копирования данных, вы можете передать утилите аргумент status=progress аналогичным образом:
В результате вы будете получать информацию об объеме скопированных данных в реальном времени.
Кроме того, вы можете скопировать содержимое жесткого диска в обычный файл образа диска. Этот подход немного упростит процесс восстановления содержимого жесткого диска и позволит значительно сэкономить место на целевом накопителе. Для создания файла образа диска утилита dd может использоваться следующим образом:
Здесь /ПУТЬ/К/КОРНЕВОЙ/ДИРЕКТОРИИ/НАКОПИТЕЛЯ/ является реальным путем к корневой директории целевого накопителя (в моем случае это /media/elementary/TOSHIBA/ ), а не к соответствующему ему файлу устройства.
Я предпочитаю клонировать жесткие диски в файлы образов, а не просто создавать их побайтовые копии на на других дисках. Одним из преимуществ такого подхода является возможность перемещения файла образа практически на любой из доступных накопителей. Если же вы планируете лишь клонировать жесткий диск с целью его последующей замены, вам, разумеется, не придется заниматься созданием файла образа этого диска. Однако, в том случае, если вы хотите создать резервную копию диска в формате файла образа, которая может использоваться впоследствии, в том числе, для создания множества копий диска или вы хотите впоследствии перемешать файл образа диска (по какой-либо причине), последняя команда будет более предпочтительным решением. Еще одним ее достоинством является возможность сжатия файла образа, ведь из-за того, что неиспользуемое пространство диска отлично сжимается, вы получите результирующий файл гораздо меньшего размера.
Восстановление данных из файла резервной копии
А теперь я продемонстрирую методику использования утилиты dd для работы с файлом образов дисков. Как и в случае процесса копирования данных в файл образа диска, данная операция должна выполняться в рамках загруженной Live-системы. Я буду предполагать, что вы установили целевой жесткий диск в ваш компьютер, подключили нему внешний накопитель (с файлом образа диска) и загрузили Live-систему.
После завершения работы утилиты dd вы должны были получить файл образа диска с именем backup_image.img.gz на внешнем накопителе. Для восстановления данных из этого файла на новом жестком диске (мы будем восстанавливать данные на новом диске, представленном файлом устройства с именем sda , объем которого совпадает с объемом оригинального жесткого диска), нам для начала понадобятся привилегии суперпользователя. Если вы используете дистрибутив, основанный на Ubuntu, вам придется сначала выполнить команду sudo su , ввести свой пароль, нажать клавишу Enter , после чего выполнить аналогичную команду для восстановления содержимого жесткого диска из файла образа:
Здесь /ПУТЬ/К/КОРНЕВОЙ/ДИРЕКТОРИИ/НАКОПИТЕЛЯ/ является путем к директории внешнего накопителя с файлом backup_image.img.gz .
Примечание: если вы используете дистрибутив, в котором утилита sudo не используется по умолчанию (такой, как Fedora или openSUSE), вы сможете получить привилегии суперпользователя с помощью команды su . После исполнения этой команды следует ввести пароль администратора и нажать клавишу Enter . После этого вы сможете выполнить приведенную выше команду для восстановления содержимого жесткого диска.
И снова вы можете отойти от компьютера, так как процесс восстановления содержимого жесткого диска займет достаточно много времени. После его окончания вы должны получить точную копию оригинального жесткого диска, пригодную для загрузки системы. Теперь вы можете перезагрузить систему, удалить накопитель или диск с Live-системой и загрузить систему с клонированного диска.
Поздравляю!
Теперь вы имеете представление о том, как использовать утилиту dd для клонирования жестких дисков. При этом dd может использоваться и для других целей. Для раскрытия потенциала данной утилиты вам придется ознакомиться с ее страницей руководства, которая открывается с помощью команды man dd .
Источник
Как клонировать раздел или жесткий диск в Linux
Существует множество причин, по которым вы можете захотеть клонировать раздел Linux или даже жесткий диск. Большинство из которых связаны с созданием резервных копий ваших данных. Существует несколько способов добиться этого в Linux с помощью некоторых внешних инструментов, таких как partimage или Clonezilla.
Однако в этой статье мы рассмотрим клонирование дисков Linux с помощью инструмента под названием dd, который чаще всего используется для преобразования или копирования файлов.Поставляется dd предустановленным в большинстве дистрибутивов Linux.
Как клонировать раздел Linux
С помощью команды dd вы можете скопировать весь жесткий диск или только раздел Linux. Давайте начнем с клонирования одного из наших разделов. В моем случае у меня есть следующие диски: /dev/sdb, /dev/sdc.. Я буду клонировать файл /dev/sdb1/ в файл /dev/sdc1.
Сначала перечислите эти разделы с помощью команды fdisk, как показано ниже.
Теперь клонируйте раздел /dev/sdb1/ в /dev/sdc1, используя следующую команду dd.
Приведенная выше команда говорит dd использовать /dev/sdb1 в качестве входного файла и записать его в выходной файл /dev/sdc1.
Клонирование раздела Linux с помощью команды dd
После клонирования раздела Linux вы можете проверить оба раздела с помощью команды:
Как клонировать жесткий диск Linux
Клонирование жесткого диска Linux аналогично клонированию раздела. Однако вместо указания раздела вы просто используете весь диск целиком. Обратите внимание, что в этом случае рекомендуется, чтобы жесткий диск был того же размера (или больше), что и исходный диск.
Это должно было скопировать диск /dev/sdb с его разделами на целевой жесткий диск /dev/sdc. Вы можете проверить эти изменения, перечислив оба диска с помощью команды fdisk.
Как сделать резервную копию MBR в Linux
Команда dd также может быть использована для резервного копирования вашего MBR. Который находится в первом секторе устройства, перед первым разделом. Поэтому, если вы хотите создать резервную копию вашего MBR, просто запустите:
# dd if=/dev/sda of=/backup/mbr.img bs=512 count=1.
Приведенная выше команда говорит dd скопировать /dev/sda в /backup/mbr.img с шагом 512 байт, а опция count говорит скопировать только 1 блок.
Другими словами, вы говорите dd скопировать первые 512 байт из /dev/sda в предоставленный вами файл.
Резервное копирование MBR в Linux
Вот и все! команда dd — это мощный инструмент Linux, который следует использовать при копировании или клонировании разделов или дисков Linux. Но будьте очень осторожны так как любая неточность может стереть ваши данные.
Источник
Команда dd и все, что с ней связано
В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.
Начну с небольшого примера, наглядно иллюстрирующего основные параметры команды:
# dd if=/dev/urandom of=/dev/null bs=100M count=5
Параметры:
- if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
- of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
- bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
- count: как раз то число, которое указывает: сколько кусочков будет скопировано.
Таким образом, описанная команда читает 5*100 мегабайт из устройства /dev/urandom в устройство /dev/null. Придавая этой команде смысловую нагрузку получается, что система сгенерирует 500 мегабайт случайных значений и запишет их в null устройство. Конечно, единственное, что сделает эта команда: нагрузит процессор на несколько секунд. Рассмотрим примеры из практики:
Создание образа диска:
# dd if=/dev/cdrom of=image.iso
Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:
# dd if=/dev/cdrom of=image.iso conv=noerror
Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем «-o loop»:
# mount -o loop image.iso /mnt/image
Если что-то не получается, процесс разбивается на 2 уровня:
# losetup -e /dev/loop0 image.iso
# mount /dev/loop0 /mnt/image
Если и так не работает, значит файловая система образа полетела.
Работа с носителями информации
Очень простое, хоть и не оптимальное решение клонирования жесткого диска:
# dd if=/dev/sda of=/dev/sdb bs=4096
Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).
Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:
# dd if=/dev/DEVICE | ssh user@host «dd of=/home/user/DEVICE.img».
Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:
# dd if=/dev/zero of=/dev/DEVICE
Думаю, понятно на что нужно заменить DEVICE. После проведения лекций по Linux, я очень тщательно стал следить за тем, что пишу.
Проверить можно тем же dd, но преобразовав данные в hex:
# dd if=/dev/sda | hexdump -C
Должны посыпаться нули.
MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так:
# dd if=/dev/sda of=mbr.img bs=512 count=1
Восстановить можно проще:
# dd if=mbr.img of=/dev/sda
Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.
При помощи dd можно генерировать файлы, а затем использовать их как контейнеры других файловых систем даже в зашифрованном виде. Технология следующая:
При помощи dd создается файл, забитый нулями (случайными числами забивать не рационально: долго и бессмысленно):
# dd if=/dev/zero of=image.crypted bs=1M count=1000
Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:
# modprobe cryptoloop
# modprobe blowfish
Ассоциация образа с блочным устройством со включенным шифрованием:
# losetup -e blowfish /dev/loop0 image.crypted
Команда запросит ввести пароль, который и будет ключем к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:
# mkfs.ext2 /dev/loop0
# mount /dev/loop0 /mnt/image
Образ готов к записи данных. После завершения работы с ним, нужно не забыть его отмонтировать и отключить от блочного loop устройства:
# umount /dev/loop0
# losetup -d /dev/loop0
Теперь шифрованный образ готов.
Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT’шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.
Источник