Разное

Ubuntu dd: Команда dd и все, что с ней связано / Хабр

Содержание

Команда 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

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»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.

5 практических примеров использования команды dd в Linux

Команда dd в Linux – это утилита для копирования и преобразования файлов, которая имеет множество практических применений.

Предполагается, что имя является производным от более старой функции IBM Job Control Language, где dd означало «Data Definition (Определение данных)». В Linux аббревиатура расшифровывается как «Data Duplicator (Дубликатор данных)» или «Disk Dump (Дамп диска)» или множество других аллитераций в зависимости от вашего источника.

Возможно, он даже получил прозвище «data destroyer (разрушитель данных)», что подводит нас к важному моменту. Пожалуйста, соблюдайте осторожность при выполнении команды dd.

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

 

Знакомство с командой dd

Вот синтаксис команды dd:

dd if=<filename> of=<filename> [options]

 

У этой команды есть широкий спектр применения, мы представляем несколько общих подходов.

 

Физические носители/Разделы, клоны/резервные копии

В приведенном выше синтаксисе ‘if’ и ‘of’ предназначены для входного файла и выходного файла, соответственно. Это основная функциональность dd. Он дублирует данные из одного источника в другой. Вам не нужно использовать физический носитель с dd.

 

Манипулирование текстом

Можно использовать стандартный ввод (stdin) с клавиатуры, чтобы собрать данные и указать их в файл. Также возможно быстро преобразовать регистр, и множество других полезных инструментов для редактирования текста включены в справочную страницу.

Одна из первоначальных функциональных возможностей этой команды фактически заключалась в преобразовании EBCDIDC, схемы кодирования, созданной IBM, в ASCII.

 

Манипуляция файловой системой

Вы также можете копировать файлы с ним, но для этого простого приложения рекомендуется использовать команду cp вместо dd. У нас есть статья, где вы можете прочитать о команде cp.

 

Некоторые поведенческие заметки

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

Это означает, что если вы попытаетесь скопировать раздел или диск, он также скопирует свободное место.

Так, например, если вы клонируете жесткий диск с 4 ТБ, вам понадобится целевой диск с по крайней мере 4 ТБ для предотвращения усеченных файлов и ошибок. Помните также, что если на диске всего 1 ТБ данных, dd все равно скопирует остальные 3 ТБ пространства. Это плохой ход, который будет тратить много времени и ресурсов.

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

 

Внимание!

Для практики используйте виртуальную машину

Мы призываем вас осмыслить вашу цель и тщательно выполнить ее, чтобы не повредить или не уничтожить важные файлы. Очевидно, что мы не несем ответственности за потерю вашей информации. Если вы ошиблись. Не говорите, что мы вас не предупреждали.

Мы рекомендуем потренироваться на фиктивной виртуальной машине, чтобы ознакомиться, прежде чем пытаться изменить какие-либо активы «реального мира». Это связано с тем, что команда dd имеет возможность изменить и, следовательно, повредить файловую систему, если вы используете ее неправильно.

Для этого урока мы решили попробовать что-то вне семейства Debian и развернули копию Fedora 31 в VirtualBox.

 

5 практических примеров использования команды dd

С предупреждениями и некоторой контекстной информацией мы готовы перейти к некоторым приложениям для этой простой, но мощной команды.

 

Пример 1: клонирование дисков

Клонирование одного диска на другой может быть очень простым с помощью dd. Для нашего примера есть два диска с именами ‘sda’ и ‘sdb’.

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

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

Когда вы будете готовы клонировать диск, вы можете запустить fdisk, чтобы определить ваши диски, их разделы и их емкость.

sudo fdisk -l

 

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

Опять же, для нашего приложения мы используем имена ‘sda’ и ‘sdb’, и мы будем предполагать, что они имеют одинаковый размер.

[andreyex@fedora ~]$ sudo dd if=/dev/sda of=/dev/sdb
[[enter pw for sudo]]
dd: writing to 'dev/sdb': No space left on device
8108369+0 records in
8108369+0 records out
4151484416 bytes (4.2 GB, 3.9 GiB) copied, 12.3602 s 336 MB/s

 

Вывод дает нам знать, что запись прошла успешно, мы можем игнорировать сообщение о том, что в ‘sdb’ больше нет свободного места.

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

 

Пример 2. Резервное копирование раздела диска

Шаги для клонирования устройства и резервного копирования раздела аналогичны. Вместо того, чтобы наш целевой файл был устройством, мы можем создать файл .img (необработанный образ диска).

Скажем, в нашей системе есть отдельный раздел для нашего домашнего каталога по адресу ‘sda2’, и мы хотим сделать его резервную копию в файле с именем ‘home_backup.img’ в нашем текущем каталоге.

dd if=/dev/sda2 of=home_backup.img

 

Это так просто! Так что теперь у вас нет оправданий тому, что у вас нет хорошей подпрограммы резервного копирования.

Конечно, это было легко, но всегда есть чему поучиться.

 

Работа с размером блока в команде dd

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

Мы сделаем все возможное, чтобы дать простое объяснение. Блочные устройства обычно представляют собой физические носители с ограниченным объемом памяти.

Вы можете искать информацию на носителе, таком как диск, ища определенный блок данных. Так, например, система может читать CD-ROM и искать информацию, начиная с блока 500 (произвольное число). Он также может быть использован для «сглаживания» информации и может использовать информацию от блока 500 до блока 1500.

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

Мы продолжим с примером компакт-диска, который имеет свой собственный определенный размер блока (2048). Каждый блок должен иметь максимум 2048 байтов. Даже если блок содержит только 100 байтов данных, он все равно займет те же 2048 байтов.

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

Если не указано, dd будет использовать размер блока 512. Это наименьший размер блока, который может прочитать типичный жесткий диск.

Если ваш носитель не ограничен определенным размером блока, вы, вероятно, можете настроить его на производительность (время записи). Давайте посмотрим на несколько примеров.

Производительность с неопределенным размером блока

[andreyex@fedora ~]$ sudo dd if=/dev/sda of=home_backup.img
[sudo] password for andreyex: 
dd: writing to 'home_backup.img': No space left on device
31974953+0 records in
31974952+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 113.848 s, 144 MB/s

 

Производительность с размером блока 1024

[andreyex@fedora ~]$ sudo dd if=/dev/sda of=home_backup.img bs=1024
[sudo] password for andreyex: 
dd: error writing 'home_backup.img': No space left on device
15987477+0 records in
15987476+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 75.4371 s, 217 MB/s

 

Вы можете видеть, что процесс был выполнен с большей скоростью. Еще один прогон с размером блока 4096 был быстрее, но со скоростью 327 МБ/с. Системное кэширование также может играть роль в скорости, но это тема для другого дня.

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

 

Пример 3: Удалить данные и обнулить диск

Помните все предупреждения от ранее? Эта команда заменит каждый блок ‘sda’ нулями.

dd if=/dev/zero of=/dev/sda

 

Как это работает? По сути, так же, как и все остальные команды ввода и вывода dd. Что такое /dev/zero?

Это псевдо-устройство, включенное в операционные системы Unix/Linux, которое будет записывать нули в файл до тех пор, пока оно не достигнет конца файла.

Вы также можете использовать dev/random, который выводит случайные биты данных. Это может быть ненужным, если вы планируете использовать необработанный файл изображения для замены содержимого, поскольку использование dd уже скопирует неиспользуемое пространство.

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

 

Пример 4: Создание .ISO из CD/DVD

Вы можете скопировать напрямую с диска CD-ROM, если он есть на вашем компьютере. Мы ранее упоминали, что стандартный размер байта CD-ROM равен 2048. Мы установим размер байта, чтобы он соответствовал этому, чтобы избежать проблем с преобразованием, а затем добавим пару других команд.

dd if=/dev/cdrom of=space_jam_dvd.iso bs=2048 conv=noerror,sync

 

Позвольте нам объяснить несколько вещей. С conv = noerror любые ошибки будут игнорироваться. Программа будет продолжаться до последнего кадра без остановки. Это не остановит их.

При использовании в сочетании с «noerror», «sync» гарантирует, что любые отсутствующие блоки данных будут автоматически заполнены нулевой информацией.

Это означает, что существующие данные будут отображаться в те же местоположения, предположительно сохраняя как можно большую часть контента.

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

 

Пример 5: создание загрузочного USB

Вы можете использовать dd для создания загрузочного USB, и это так же просто, как и следовало ожидать. На самом деле это одно из самых популярных применений команды dd.

Здесь есть один дополнительный шаг. Мы используем команду ‘mkfs’ для сборки файловой системы на нашем USB перед запуском ‘dd’.

Без опций используется система ext2 по умолчанию. Таким образом, предполагая, что USB, который мы хотим подготовить, называется sdb, и мы хотим изменить файловую систему на ext4, мы запустим следующую команду:

sudo mkfs.ext4 /dev/sdb

 

Если вы хотите использовать систему Windows, вы можете заменить первую часть команды на mkfs.ntfs.

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

mkfs -t [for type] $filesystem.

 

Как только загрузочный носитель подготовлен, мы можем перейти к нашей команде dd.

dd if=someFile.iso of=/dev/sdb

 

Используйте монтируемый образ .iso и скопируйте его на соответствующее имя диска для вашего USB-устройства.

 

Заключение

Спасибо за чтение. Надеюсь, вам понравился этот учебник по dd. Есть так много разных способов, которыми вы можете использовать эту команду. Мы попытались охватить множество более полезных примеров.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Команда dd — Linux FAQ

Команда dd предназначена для задействования одноименной утилиты, предназначенной для низкоуровневого копирования и преобразования данных. Ее название расшифровывается как «data duplicator» или «дупликатор данных». Данная утилита используется главным образом для записи образов установочных дисков дистрибутивов Linux на флеш-накопители и создания образов оптических носителей, тем не менее, круг ее функций не ограничивается перечисленными операциями. Например, dd может использоваться для простого копирования файлов или изменения регистра символов текстовых строк. Вообще, рассматриваемая утилита является в какой-то мере уникальной, ведь она предполагает использование собственного формата передачи параметров.

Стандартный синтаксис команды выглядит следующим образом:

$ dd if=<имя исходного файла> of=<имя целевого файла> [параметры]

Несложно заметить, что для передачи параметров утилите используется формат записи <имя параметра>=<значение параметра>. Утилита может читать исходные данные из стандартного потока ввода и выводить результирующие данные с помощью стандартного потока вывода в случае отказа от использования параметров if и of, но в подавляющем большинстве случаев данные параметры являются необходимыми для указания имен файлов с соответствующими данными. Утилита читает и записиывает данные блоками, причем размер блока может изменяться с помощью параметра bs (по умолчанию используются блоки размером в 512 Кб). Существуют отдельные параметры для задания размеров читаемых и записываемых блоков, а именно, ibs и obs. Количество читаемых блоков может ограничиваться в помощью параметра count. Для пропуска заданного количества блоков исходного файла может использоваться параметр skip, целевого файла — параметр seek. Для указания флагов чтения и записи через запятую может использоваться параметр iflag. Наиболее часто используемыми флагами являются:

  • append — активация режима дописывания данных в целевой файл.
  • direct — режим обработки данных в обход кэша файловых систем (повышает скорость).
  • dsync — режим записи данных с синхронизацией (повышает надежность).
  • sync — режим записи данных и метаданных с синхронизацией (повышает надежность).
  • fullblock — чтение лишь полных блоков.
  • nonblock — активация режима неблокируемого ввода/вывода (повышает скорость).
  • noatime — отключение механизма обновления меток времени элементов файловой системы (повышает скорость).
  • nofollow — отказ от перехода по символьным ссылкам.

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

  • lcase — перевод символов строки в кодировке ASCII в нижний регистр.
  • ucase — перевод символов строки в кодировке ASCII в верхний регистр.
  • nocreat — вывод сообщения об ошибке в случае отсутствия целевого файла.
  • excl — вывод сообщения об ошибке в случае существования целевого файла.
  • notrunc — отказ от урезания целевого файла.
  • swab — смена мест каждых двух байтов из исходного файла.
  • noerror — продолжение работы даже в случае возникновения ошибок.
  • fdatasync — активация режима записи данных в целевой файл перед завершением работы утилиты.
  • fsync — активация режима записи данных и метаданных в целевой файл перед завершением работы утилиты.

Примеры использования

Создание резервной копии данных дискового накопителя

Предположим, мы используем жесткий диск, представленный файлом устройства /dev/sda, и нам нужно создать посекторную резервную копию всех размещенных на нем данных, сохранив ее в файле в разделе съемного диска с интерфейсом USB, представленном файлом устройства /dev/sdb1 и смонтированным в директорию /mnt/sdb1. Обычно такие файлы резервных копий называются дампами или образами дисков. Наш файл образа диска будет носить имя backup.img. Это команда, с помощью которой его можно создать:

# dd if=/dev/sda of=/mnt/sdb1/backup.img

В данной команде с помощью параметра if задается путь к исходному файлу, а с помощью параметра of — к целевому.

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

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

# dd if=/mnt/sdb1/backup1.img of=/dev/sda

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

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

Перед клонированием жесткого диска вы должны убедиться в том, что у вас имеется жесткий диск того же объема, что и исходный. Эта же операция может выполняться и в случае флеш-накопителей с интерфейсом USB аналогичных объемов. Предположим, что исходный флеш-накопитель представлен файлом устройства /dev/sdb, а целевой — файлом устройства /dev/sdc. В этом случае вы можете клонировать исходный накопитель с помощью следующей команды:

# dd if=/dev/sdb of=/dev/sdc

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

Передача файла образа диска на другой компьютер

Для передачи файла образа диска по сети на другой компьютер с именем target может использоваться следующая команда:

# dd if=/dev/sdb | ssh root@target "(cat >backup.img)"

Сжатие файла образа диска

Для того, чтобы резервная копия раздела диска занимала меньше места, вы можете сжать ее с помощью компрессора, такого, как bzip2:

# dd if=/dev/sdb | bzip2 backup.img.bz2

Создание образа оптического диска формата ISO

Для создания образа оптического диска CD, DVD или BD достаточно поблочно прочитать его содержимое и сохранить это содержимое в файле:

# dd if=/dev/sr0 of=image.iso bs=2048

Сохранение файла с поврежденного носителя или создание образа такого носителя

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

# dd if=movie.avi of=/home/alex/movie.avi conv=noerror,sync

Вы также можете создать файл образа поврежденного носителя и попытаться извлечь файлы из него:

# dd if=/dev/sdb of=/home/alex/movie.iso bs=2048 conv=noerror,sync

Запись образа установочного диска на флеш-накопитель с интерфейсом USB

Для установки дистрибутива Linux с флеш-накопителя с интерфейсом USB необходимо записать на этот флеш-накопитель образ установочного диска формата ISO. Для этой цели может использоваться аналогичная команда:

# dd if=/home/alex/Fedora-Workstation-Live-x86_64-26_Alpha-1.7.iso of=/dev/sdc

Важно помнить, что даже в случае наличия на флеш-накопителе разделов следует указывать не путь к файлу устройства одного из разделов, а путь к файлу устройства самого накопителя, в нашем случае это /dev/sdc.

Анализ содержимого жесткого диска

Утилита dd является отличным инструментом для исследования файловых систем. Для анализа содержимого жесткого диска с выводом данных из отдельных блоков, в нашем случае, блока 1001 на разделе, представленном файлом устройства /dev/sdc1, достаточно использовать следующую команду:

# dd if=/dev/sdc1 count=1 skip=1000

Для того, чтобы увидеть первые 40 байт вашего жесткого диска в шестнадцатеричном представлении следует использовать команду:

# dd if=/dev/sda bs=1 count=40 | hexdump -C

В данном случае с помощью параметра bs задается размер блока диска.

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

Для тестирования производительности дискового накопителя, представленного, к примеру, файлом устройства /dev/sda в условиях чтения блоков различных размеров может использоваться аналогичная команда:

# dd if=/dev/sda of=/dev/null bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 4.25186 s, 120 MB/s

# dd if=/dev/sda of=/dev/null bs=4096 count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 29.8747 s, 137 MB/s

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

# dd if=/dev/sda of=/dev/null bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 4.25186 s, 120 MB/s

# dd if=/dev/sda of=/dev/null bs=512 count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 0.417317 s, 1.2 GB/s

Для получения корректных результатов тестов рекомендуется вообще обходить механизм кэширования файловых систем, задействуя режим ввода/вывода без кэширования:

# dd if=/dev/sda of=/dev/null bs=512 count=100000 iflag=direct
100000+0 records in
100000+0 records out
51200000 bytes (51 MB) copied, 5.01053 s, 10.2 MB/s

Копирование файлов

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

$ dd if=/home/alex/test.txt /home/alex/test_copy.txt

Команда dd клонируем//очищаем флешку Ubuntu Debian Linux

 

Узнаем обозначение флешки в системе. Будьте внимательны так как при ошибке в название флешки в команде dd можно повредить винчестер хоста.

Выведем обозначение разделов всех устройств

и найдем среди них флеш накопитель:

sudo fdisk -u -l /dev/sd?

Так же, для определения разделов на всех устройства, можно воспользоваться командой:

sudo cat /proc/partitions

Синтаксис команды dd

dd if=/AAAA of=/BBBB bs=CCCC count=DDDD conv=noerror

Где:

  • if: (input file) указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
  • of: (output file) указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
  • bs: количество байт, которые будут записаны за раз. То есть размер куска данных, которые будут прочитаны и записаны за раз. рекомендуют ставить bs= размеру кеша винчестера т.е. 8M 16M 32M
  • count: сколько кусков bs будет скопировано.
  • conv: позволяет подключать фильтрs, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения.

Примеры

Полное стирание диска

Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями, эта команда всегда закончиться ошибкой «на носителе кончилось место»

dd if=/dev/zero of=/dev/sdX
Создание образа диска
dd if=/dev/cdrom of=image.iso conv=noerror

так же можно смонтировать образ в систему

mount -o loop /PathToImageFile/image.iso /mnt/FolderMount

Если что-то не получается, процесс разбивается на 2 уровня:

losetup -e /dev/loop0 /PathToImageFile/image.iso
mount /dev/loop0 /mnt/FolderMount
Операции с MBR

MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так: 

dd if=/dev/sda of=mbr.img bs=512 count=1

Восстановить можно проще: 

dd if=mbr.img of=/dev/sda
Копируем с архивированием

(используя gzip) данные с флешки на винчестера.

dd if=/dev/sdX conv=sync,noerror bs=8M | gzip -c >/PathToSave/sdX.img.gz

и обратно

gunzip -c /PathToFile/sdX.img.gz | dd of=/dev/sdX conv=sync,noerror bs=8M
Копируем по сети
dd if=/dev/sdX conv=sync,noerror bs=8M | ssh -c blowfish UserName@HostName "dd of=sdX.img.gz bs=8M"

и обратно

dd if=sdX.img.gz | ssh -c blowfish UserName@HostName "dd of=/dev/sdX bs=8М"
Выводим текущий статус выполнения командой
killall -USR1 dd

Команда dd в Linux. — ИТ Проффи

Иногда при работе в интерфейсе командной строки Linux может потребоваться выполнение операции точного побитового копирования данных. Чаще всего это требуется для создания образов и резервных копий. Для этого можно воспользоваться утилитой dd, что означает data duplicator (дубликатор данных). И хотя она изначально не создавалась для функции резервного копирования, в данном контексте она оказывается очень полезной. В этом руководстве мы на нескольких простых примерах разберём, как она работает.

Синтаксис

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

dd [ОПЦИИ]...

Вот список наиболее важных опций:

bs=РАЗМЕР_БЛОКА — считывать и записывать блоками указанного размера
cbs=bs=РАЗМЕР_БЛОКА — конвертировать данные блоками указанного размера
conv=ПАРАМЕТРЫ — конвертировать входной файл в соответствии с заданными параметрами (некоторые из них будут рассмотрены ниже, полный список можно посмотреть на соответствующей man-странице)
count=КОЛИЧЕСТВО — копировать только указанное количество блоков
ibs=РАЗМЕР_БЛОКА — считывать блоками указанного размера (по умолчанию 512 байт)
if=ФАЙЛ — считывать данные из файла, а не стандартного потока ввода
iflag=ПАРАМЕТРЫ — считывать данные в соответствии с заданными параметрами
obs=РАЗМЕР_БЛОКА — записывать блоками указанного размера (по умолчанию 512 байт)
of=ФАЙЛ — записывать данные в файл, а не стандартный поток вывода
oflag=ПАРАМЕТРЫ — считывать данные в соответствии с заданными параметрами
seek=КОЛИЧЕСТВО — пропустить заданное количество блоков размера obs в начале вывода
skip=КОЛИЧЕСТВО — пропустить заданное количество блоков размера ibs в начале ввода

Примеры использования команды dd

Рассмотрим несколько примеров использования команды dd, таких как создание больших файлов для тестирования, создание образов и копий дисков.

Изменение регистра текста

Наиболее простой пример, на котором можно рассмотреть работу команды — скопировать текст с заменой регистра символов (большие буквы вместо маленьких или наоборот).

Допустим, у вас есть несколько строк текста, написанного в нижнем регистре, а вам нужно перевести его в верхний регистр. Для этого можно воспользоваться опцией conv с аргументом ucase:

dd conv=ucase

Здесь мы видим команду и введённый текст. Чтобы показать dd, что ввод текста завершён, мы воспользовались комбинацией клавиш Ctrl+D, и команда вывела следующий результат:

Введённый текст был переведён в верхний регистр, последние три строки — это статистика операции. Аналогичным образом можно перевести текст в нижний регистр.

Чтение и запись файлов и устройств

В предыдущем примере мы вводили текст в stdin (стандартный поток ввода). Однако, всегда можно использовать входные и выходные файлы. Чтобы указать имена входного и выходного файла, используются опции if и of, соответственно. Например, если вам нужно перевести в верхний регистр текст из файла file1 и записать его в файл file2, можно выполнить следующую команду:

dd if=file1 of=file2 conv=ucase

Командой dd также можно создавать файлы различных объемов, например для тестов. Следующая команда создаст файл объемом 1 ГБ заполненный случайными данными

dd if=/dev/urandom of=bigfile bs=1M count=1000

Или файл заполненный нулями

dd if=/dev/null of=bigfile bs=1M count=1000

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

Например, следующая команда полностью копирует диск /dev/sda на диск /dev/sdb:

dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync

Аргумент noerror опции conv позволяет программе продолжать копирование даже при наличии ошибок, а sync задаёт использование синхронизированного ввода/вывода. Размер блока должен быть кратным 1 Кб (1024 байта), а выходной диск равен по объему входному или больше.

Аналогично можно создать образ CD или DVD, вместе с загрузочным сектором:

dd if=/dev/cdrom of=/mycd.iso

Опция -o loop команды mount позволяет смонтировать файл как обычное устройство. Так можно подключить созданный образ:

mount -o loop /mycd.iso /mnt/cd

Пропуск части входных данных

При необходимости можно задать команде пропустить несколько начальных байтов входных данных. Это осуществляется при помощи опции skip с целочисленным аргументом. Например, если значение этого аргумента N, то dd пропустит N блоков размера ibs. Это ещё одна опция команды, которая определяет число байтов, считываемых за раз (по умолчанию 512).

Если вам требуется пропустить первые 4 байта входного файла, нужно задать ibs равным 4, а аргумент skip равным 1. Таким образом при чтении файла команда пропустит один блок размером 4 байта.

dd if=file1 of=file2 ibs=4 skip=1

Сравним файлы командой grep

grep -v -f file1 file2

Видно, что часть текста при считывании файла file1 были пропущены, поэтому в файле file2 их нет.

Действия с выходными файлами

Чтобы команда работала только в том случае, если выходного файла ещё не существует, в качестве аргумента опции conv можно указать значение excl.

dd if=file1 of=file3 conv=excl

По умолчанию dd перезаписывает выходной файл, если он уже существует. Если требуется обновление с записью в конец файла, укажите значение append для опции oflag и значение notrunc для опции conv, например:

dd if=file1 of=file2 oflag=append conv=notrunc

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

dd if=file1 of=file10 oflag=append conv=nocreat

Сокращение вывода в stderr

Можно ограничить объём информации, выводимой в поток stderr, при помощи опции status. Например, если требуется сообщать только об ошибках, нужно указать эту опцию с аргументом none:

dd if=file1 of=file3 status=none

Другие возможные значения — noxfer, исключающее вывод конечной статистики, и progress, исключающее вывод текущей статистики.

Заключение

Рассмотренные примеры охватывают лишь небольшую долю задач системного администрирования, для которых может пригодиться команда dd.
Например, ее можно использовать для создания виртуальных файловых систем и резервного копирования целых дисков или системных разделов. Для получения более подробной информации о команде можно ознакомиться с ее man-страницей.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Команда dd и ее секреты — «Хакер»

Команда dd — серьезный старожил в системах, основанных на UNIX. Ее главное предназначение — это побайтовое копирование. Но благодаря ее гибкости и широчайшему выбору настроек dd можно использовать для массы других вещей: бэкапить диски, восстанавливать данные из бэкапов, переносить MBR и делать еще многие интересные штуки.

Наиболее распространенный вариант использования выглядит примерно так:

dd if=/dev/cdrom of=image.iso

В данном случае синтаксис довольно прост. Параметр if указывает на источник, то есть на то место, откуда копируем. Значение может быть как обычным файлом, так и файлом устройства (/dev/cdrom). Параметр of указывает на файл назначения. Принцип тот же: писать можно как в обычный файл, так и напрямую в устройство.

После выполнения такой команды тулза сделает копию диска с названием image.iso. Но бывает, что диск битый и при появлении ошибки операция записи прервется. Чтобы этого не произошло, можно воспользоваться ключом conv=noerror.

dd if=/dev/cdrom of=image.iso conv=noerror

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

dd if=/dev/sda of=/dev/sdb bs=4096

В качестве источника и назначения здесь указываются устройства. Главное — не ошибиться и не перетереть свой же диск. Еще добавился параметр bs. По сути, это то же побайтовое копирование, только с установленным размером буфера 4 Кбайт. В данном случае плохо одно: если на диске в 2 Гбайт занято 100 Мбайт, будет сделан образ в 2 Гбайт независимо от размера данных.

Если необходимо скопировать MBR диска, выполни в консоли следующую команду:

dd if=/dev/sda of=mbr.img bs=512 count=1

А восстановить область можно более простой командой:

dd if=mbr.img of=/dev/sda

Разберем подробнее ключ bs. Он задает количество байтов, которые будут записаны за один раз. Более абстрактно его можно представлять как размер куска данных, которые будут записаны или прочитаны. Параметр count определяет количество кусков, которые должны быть скопированы.

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

dd if=/dev/zero of=/dev/disk

Теперь данные нельзя будет восстановить.

Также dd применяют для разнообразной автоматизации, например для бэкапов по расписанию.

команда ‘dd’ в Linux | Портал информатики для гиков

dd — это утилита командной строки для Unix и Unix-подобных операционных систем, основной целью которой является преобразование и копирование файлов.

  • В Unix драйверы устройств для аппаратного обеспечения (например, жестких дисков) и специальные файлы устройств (например, / dev / zero и / dev / random) появляются в файловой системе так же, как и обычные файлы.
  • dd также может читать и / или записывать из / в эти файлы при условии, что функция реализована в их соответствующих драйверах
  • В результате dd можно использовать для таких задач, как резервное копирование загрузочного сектора жесткого диска и получение фиксированного количества случайных данных.
  • Программа dd также может выполнять преобразование данных при их копировании, включая замену порядка байтов и преобразование в и из текстовых кодировок ASCII и EBCDIC.

Использование: Синтаксис командной строки dd отличается от многих других программ Unix тем, что он использует синтаксис option = значение для своих параметров командной строки, а не более стандартные форматы -option или -option = value . По умолчанию dd читает из stdin и записывает в stdout, но их можно изменить с помощью параметров if (входной файл) и of (выходной файл).

Некоторые практические примеры по команде dd:

  1. Чтобы сделать резервную копию всего жесткого диска: Чтобы сделать резервную копию всей копии жесткого диска на другом жестком диске, подключенном к той же системе, выполните команду dd, как показано. В этом примере команды dd имя устройства UNIX исходного жесткого диска — / dev / hda, а имя устройства целевого жесткого диска — / dev / hdb.
    # dd if = /dev/sda of = /dev/sdb
    
  2. Для резервного копирования раздела: Вы можете использовать имя устройства раздела во входном файле, а в выходных данных вы можете указать целевой путь или файл изображения, как показано в команде dd.
    # dd if=/dev/hda1 of=~/partition.img
    
  3. Чтобы создать образ жесткого диска: вместо создания резервной копии жесткого диска, вы можете создать файл образа жесткого диска и сохранить его на других устройствах хранения. Есть много преимуществ резервного копирования ваших данных на образ диска, одним из которых является простота использования. Этот метод обычно быстрее, чем другие типы резервных копий, что позволяет быстро восстанавливать данные после неожиданной катастрофы. Он создает образ жесткого диска / dev / hda.
    # dd if = /dev/hda of = ~/hdadisk.img
    
  4. Восстановление с использованием образа жесткого диска: Чтобы восстановить жесткий диск с файлом образа другого жесткого диска, можно использовать следующую команду dd
    # dd if = hdadisk.img of = /dev/hdb
    

    Файл образа Файл hdadisk.img, является образом / dev / hda, поэтому приведенная выше команда восстановит образ / dev / hda в / dev / hdb.

  5. Для создания CDROM Backup: команда dd позволяет вам создать iso-файл из исходного файла. Таким образом, мы можем вставить компакт-диск и ввести команду dd для создания iso-файла содержимого CD.
    # dd if = /dev/cdrom of = tgsservice.iso bs = 2048
    

    Команда dd читает один блок ввода, обрабатывает его и записывает в выходной файл. Вы можете указать размер блока для входного и выходного файла. В приведенном выше примере команды dd параметр «bs» указывает размер блока как для входного, так и для выходного файла. Таким образом, dd использует 2048 байт в качестве размера блока в приведенной выше команде.

Ссылки :

Эта статья предоставлена Кишлай Верма . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи [email protected]. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Рекомендуемые посты:

команда ‘dd’ в Linux

0.00 (0%) 0 votes

Как использовать dd в Linux, не разрушая ваш диск

Эта статья является выдержкой из главы 4 книги Linux in Action, опубликованной Маннингом.

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

Изготовление идеальных копий дисков и разделов

С dd можно делать всевозможные вещи, если вы достаточно хорошо исследуете, но он лучше всего проявляется в том, как он позволяет вам играть с разделами. Вы, конечно, можете использовать tar или даже scp для репликации целых файловых систем, копируя файлы с одного компьютера, а затем вставляя их как есть поверх новой установки Linux на другой компьютер.Но поскольку эти архивы файловой системы не являются полными образами, им потребуется работающая ОС на обоих концах в качестве основы.

Использование dd , с другой стороны, может создавать идеальные побайтовые изображения практически всего цифрового. Но прежде чем вы начнете перебрасывать разделы с одного конца земли на другой, я должен упомянуть, что есть доля правды в той старой шутке администратора Unix: « dd означает уничтожитель дисков ». Если вы введете хотя бы один неправильный символ в команде dd , вы можете мгновенно и навсегда стереть весь диск с ценными данными.И да, орфография имеет значение.

Помните: Перед тем, как нажать клавишу Enter, чтобы вызвать , вызовите dd , , остановитесь и подумайте очень внимательно!

Основные операции с dd

Теперь, когда вы были должным образом предупреждены, мы начнем с простого. Предположим, вы хотите создать точный образ всего диска с данными, обозначенного как / dev / sda . Вы подключили пустой диск (в идеале такой же емкости, как у вашей системы / dev / sda ).Синтаксис прост: if = определяет исходный диск, а of = определяет файл или место, в котором вы хотите сохранить данные:

  # дд, если = / dev / sda из = / dev / sdb  

В следующем примере будет создан архив .img диска / dev / sda и сохранен в домашнем каталоге вашей учетной записи пользователя:

  # dd if = / dev / sda of = / home / username / sdadisk.img  

Эти команды создают образы целых дисков.Вы также можете сосредоточиться на одном разделе диска. В следующем примере это делается, а также используется bs для установки количества байтов, копируемых за один раз (в данном случае 4096). Игра со значением bs может повлиять на общую скорость операции dd , хотя идеальная настройка будет зависеть от профиля вашего оборудования и других факторов.

  # dd if = / dev / sda2 of = / home / username / partition2.img bs = 4096  

Восстановить просто: по сути, вы меняете значения , если , и из .В этом случае if = берет образ, который вы хотите восстановить, а of = берет целевой диск, на который вы хотите записать образ:

  # дд, если = sdadisk.img из = / dev / sdb  

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

  # ssh [email protected] "dd if = / dev / sda | gzip -1 -" | дд из = резервная копия.gz  

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

Протирка дисков с dd

Несколько лет назад у меня был друг, который отвечал за безопасность в заграничных посольствах его правительства. Однажды он сказал мне, что каждому посольству, находящемуся под его контролем, был предоставлен официальный молоток государственного образца.Почему? В случае, если объект когда-либо подвергался риску быть захваченным недружественными войсками, молоток должен был уничтожить все их жесткие диски.

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

Однако вы можете использовать dd , чтобы злоумышленникам было намного сложнее получить доступ к вашим старым данным. Эта команда потратит некоторое время на запись миллионов и миллионов нулей в каждом уголке раздела / dev / sda1 :

  # dd if = / dev / zero of = / dev / sda1  

Но становится лучше. Используя файл / dev / urandom в качестве источника, вы можете записывать на диск случайные символы:

  # дд, если = / dev / urandom of = / dev / sda1  

Мониторинг операций dd

Поскольку архивирование диска или раздела может занять очень много времени, вы можете добавить к своей команде монитор выполнения.Установите Pipe Viewer ( sudo apt install pv в Ubuntu) и вставьте его в dd . В случае pv последняя команда может выглядеть примерно так:

 

# dd if = / dev / urandom | pv | dd of = / dev / sda1
4,14MB 0:00:05 [98kB / s] [<=>]

Откладывая резервное копирование и управление дисками? С dd у вас не остается слишком много оправданий. Это действительно несложно, но будьте осторожны. Удачи!

.

Клонирование диска в Linux с помощью команды dd

Командная утилита dd — это простая, но мощная и полезная команда, доступная в системах Unix и Linux, которая используется для преобразования и копирования файлов. Unix-подобные системы рассматривают все устройства как файлы, и эти файлы устройств находятся в каталоге / dev вашей системы. Поэтому обычно ваш жесткий диск представляет собой файл в каталоге / dev с префиксом hd или sd (в зависимости от драйвера IDE или SCSI). Эта концепция устройства в виде файлов делает dd идеальным кандидатом для резервного копирования и восстановления образов дисков или клонирования некоторых разделов или всего диска.

В этой статье показано несколько примеров использования команды dd для резервного копирования или клонирования разделов дисков и целых дисков.

Вы можете использовать команду fdisk или проверить / proc / partitions , чтобы просмотреть все разделы диска в вашей системе.

# cat / proc / разделы
 
major minor #blocks name
  11 0 1048575 ср0
   8 0 20480000 sda
   8 1 1048576 sda1
   8 2 7339008 sda2
   8 16 8388608 SDB
 253 0 6496256 дм-0
 253 1 839680 дм-1

  
# fdisk -l
  Диск / dev / sda: 21.0 ГБ, 20971520000 байт, 40960000 секторов
Единицы = секторы 1 * 512 = 512 байт
Размер сектора (логический / физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный / оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x0005c57d

   Система идентификаторов конечных блоков начала загрузки устройства
/ dev / sda1 * 2048 2099199 1048576 83 Linux
/ dev / sda2 2099200 16777215 7339008 8e Linux LVM

Диск / dev / sdb: 8589 МБ, 8589934592 байта, 16777216 секторов
Единицы = секторы 1 * 512 = 512 байт
Размер сектора (логический / физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный / оптимальный): 512 байт / 512 байт

Диск / dev / mapper / centos-root: 6652 МБ, 6652166144 байта, 12992512 секторов
Единицы = секторы 1 * 512 = 512 байт
Размер сектора (логический / физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный / оптимальный): 512 байт / 512 байт

Диск / dev / mapper / centos-swap: 859 МБ, 859832320 байт, 1679360 секторов
Единицы = секторы 1 * 512 = 512 байт
Размер сектора (логический / физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный / оптимальный): 512 байт / 512 байт
  

Из вышеприведенного вывода мы можем сделать вывод, что у вас есть жесткие диски в вашей системе и их имена файлов устройств: sda и sdb sda есть два раздела: sda1 и sda2 , и мы также знаем, что sda1 является загрузочным разделом.

Как клонировать раздел с одного диска на другой

Ниже приведены шаги для создания клона раздела с одного диска на другой, допустим, например, вы хотите клонировать раздел sda1 на sdb1 . В этом случае sda — ваш исходный диск, а sdb — целевой диск.

Шаг 1: Создайте новый раздел на целевом диске, если он еще не существует. Вы можете использовать команду fdisk для создания нового раздела.

 # fdisk / dev / sdb
 
Добро пожаловать в fdisk (util-linux 2.23.2).

Изменения останутся только в памяти, пока вы не решите их записать.
Будьте осторожны перед использованием команды записи.

Устройство не содержит распознанной таблицы разделов
Создание новой метки диска DOS с идентификатором диска 0xb109bc13.Команда (m для справки):  n 
Тип раздела:
   p первичный (0 первичный, 0 расширенный, 4 свободный)
   е расширенный
Выберите (по умолчанию p):  p 
Номер раздела (1-4, по умолчанию 1):  1 
Первый сектор (2048-16777215, по умолчанию 2048):
Использование значения по умолчанию 2048
Последний сектор, + секторы или + размер {K, M, G} (2048-16777215, по умолчанию 16777215):  + 2G 
Установлен раздел 1 типа Linux и размером 2 ГиБ

Команда (m для помощи):  w 
Изменена таблица разделов!

Вызов ioctl () для повторного чтения таблицы разделов.Синхронизация дисков.
 
 

Шаг 2: Запустите команду dd .

# dd if = / dev / sda1 of = / dev / sdb1 bs = 64M conv = sync, noerror status = прогресс
 
1006632960 байт (1,0 ГБ) скопировано, 7,836029 с, 128 МБ / с
16 + 0 записей в
16 + 0 записей
1073741824 байта (1,1 ГБ) скопировано, 9,49951 с, 113 МБ / с
  
  • conv = sync, noerror сообщает команде dd продолжить копирование после ошибок чтения и заполнить входной блок нулями в случае частичных записей.
  • status = progress показывает прогресс копирования.
  • bs = 64M установить размер блока для копирования за раз. Регулировка этого значения может улучшить скорость копирования.

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

Чтобы клонировать весь диск, скажем, например, sda на sdb , выполните:

# dd if = / dev / sda of = / dev / sdb bs = 64M conv = sync, noerror status = прогресс
 

Когда вы клонируете весь диск, целевой диск получит все разделы, которые есть на исходном диске.

Как создать образ диска

Перед созданием резервной копии образа диска убедитесь, что на этом диске не смонтированы разделы, и выполните следующую команду

# dd if = / dev / sdb of = / path / to / backup.img bs = 64M conv = sync, noerror status = прогресс
 

, где sdb — это имя файла на диске, а /path/to/backup.img — это путь и имя файла резервной копии.

Сжатый образ диска

Вы также можете сжать резервный образ с помощью gzip , как показано в примере ниже

# dd if = / dev / sdb bs = 64M conv = sync, noerror status = прогресс | gzip -c> / путь / к / резервному копированию.img.gz
 

Отправить образ диска в удаленную систему

Вы можете отправить образ резервной копии на удаленную машину, используя ssh , как в примере ниже.

# dd if = / dev / sdb bs = 64M conv = sync, noerror status = прогресс | gzip -c | ssh root @ remotehost dd of = / путь / к / backup.img.gz
 

Разделить образ диска по размеру

Образ диска можно разделить на более мелкие части любого размера, который вы укажете, передав вывод dd через команду split .

# dd if = / dev / sdb bs = 64M conv = sync, noerror status = прогресс | gzip -c | split -b 50M - /path/to/backup.img.gz.
 

Приведенная выше команда разбивает файл образа резервной копии на файлы меньшего размера размером 50 МБ или меньше. К файлам будет добавлен двухбуквенный суффикс. Полученные файлы будут иметь имена backup.img.gz.aa, backup.img.gz.ab, backup.img.gz.ac, …

Чтобы объединить разделенные файлы в один файл изображения, вы запускаете команду

# cat backup.img.gz. *> резервное копирование.img.gz
 

Восстановление образа диска

Приведенная ниже команда восстанавливает диск sdb из файла образа backup.img .

# dd if = / путь / к / backup.img of = / dev / sdb status = прогресс
 

Для восстановления из сжатого образа резервной копии используйте команду gunzip с dd

# gunzip -c /path/to/backup.img | dd of = / dev / sdb status = прогресс
 

Для восстановления из сжатой и разделенной резервной копии выполните:

# cat резервное копирование.img.gz. * | gunzip -c | dd of = / dev / sdb status = прогресс
 

.

12 примеров команды Linux dd

Команда dd означает « дубликатор данных » и используется для копирования и преобразования данных. Это очень мощная низкоуровневая утилита Linux, которая может:

• Резервное копирование и восстановление всего жесткого диска или раздела.
Резервное копирование MBR (основной загрузочной записи)
• Он может копировать и преобразовывать формат магнитной ленты, преобразовывать между форматами ASCII и EBCDIC, менять местами байта, а также может преобразовывать нижний регистр в верхний регистр.
• Он также может использоваться файлами сборки ядра Linux для создания загрузочных образов.

Только суперпользователь может запускать эту команду, потому что вы можете столкнуться с большой потерей данных из-за неправильного использования, поэтому вы должны быть очень осторожны при работе с этой утилитой. В этот момент потеря данных может превратить утилиту dd в « уничтожитель данных » для вас. Вот почему новичкам не рекомендуется использовать эту команду на производственной машине, пока они не ознакомятся с ней. Вы должны убедиться, что в целевом расположении должно быть достаточно места при выполнении этой команды.

Синтаксис команды dd

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

  dd if = <имя исходного файла> of = <имя целевого файла> [Параметры]  

Обычно мы не объясняем синтаксис, но этот синтаксис команды требует некоторых пояснений. Синтаксис полностью отличается от синтаксиса многих известных нам команд Linux. В этом синтаксисе за dd следуют две вещи

if = –Это источник, из которого вы хотите скопировать данные, а «if» означает входной файл.

of = <назначение> –это источник, из которого вы хотите записать / вставить данные, а «of» означает выходной файл.

[опции] –Эти опции включают, как быстро данные должны быть записаны, в каком формате и т. Д.

Вход (имя исходного файла) и Выход (имя целевого файла) по синтаксису — это диски, разделы, файлы и устройства, на которые вы хотите записывать и читать данные. Есть много вариантов, которые мы обсудим на примерах.

Изучите команду Linux dd с примерами

Пример 1: Клонировать один жесткий диск на другой жесткий диск.Это полезно, когда мы создаем много машин с одинаковой конфигурацией. Нам не нужно устанавливать ОС на все машины. Просто установите OS и необходимое программное обеспечение на машину, а затем клонируйте с помощью примера ниже.

  
   dd, если = / dev / sda of = / dev / sdb  

Пример 2: Мы можем сделать резервную копию раздела / всего жесткого диска для будущего восстановления.

Резервное копирование раздела в файл (в мой домашний каталог как hdadisk.img)

  dd if = / dev / sda2 of = ~ / hdadisk.img  

Восстановление этого файла образа на другом компьютере

  dd if = hdadisk.img из = / dev / sdb3  

Пример 3: Считаете ли вы, что hdadisk.img слишком велик? Используйте gzip или bzip2 для сжатия при создании образа.

  dd if = / dev / sda2 | bzip2 hdadisk.img.bz2  

Пример 4: Знаете ли вы, что команду dd можно также использовать в качестве копировщика файлов? Да, если у вас нет команды cp, используйте команду dd для копирования файла из одного места в другое.

  dd if = / home / imran / abc.txt of = / mnt / abc.txt  

Хорошо, это нормально для базового использования команды dd. Но прелесть команды dd заключается в расширенных возможностях использования, таких как очистка дисков, полная очистка дисков, резервное копирование MBR и т. Д.

Расширенное использование команды Linux dd

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

Пример 5: Вытрите / удалите содержимое диска, чтобы он стал пустым для использования кем-нибудь.

  dd if = / dev / zero of = / dev / sdb  

Это уничтожит ваш второй жесткий диск, и каждый бит будет записан с нулем. вас могут заинтересовать изучающие файлы / dev / null и / dev / zero , которые делают аналогичные вещи, но есть небольшая разница.

Как происходит запись файла на жесткий диск с данными?

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

Пример 6: Что скрыть свою задницу, удалив свои личные данные. Многие думают, что если мы сделаем rm -rf / , то все необходимое сделает. Но мы можем восстановить это удаление, используя инструменты восстановления диска, такие как Photorec или некоторые инструменты криминалистической экспертизы . Но если вы хотите, чтобы некоторые не восстанавливали ваши данные, вы должны записывать случайные данные в свой раздел, где находятся ваши данные.

  dd если = / dev / random of = / dev / sdb  

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

  для i в {1..10}; do dd if = / dev / random of = / dev / sdb; done  

Команда dd будет выполнена 10 раз подряд один за другим.

Пример 7: Мы можем создать виртуальную файловую систему с помощью команды dd, которая может использоваться как своп. Чтобы узнать больше о , вы должны знать, как создать виртуальное пространство подкачки в Linux .

dd if = / dev / zero of = / swapfile bs = 1024 count = 200000

, где bs обозначает размер блока, а количество — не что иное, как количество таких блоков, используемых для создания этого файла подкачки.

Убедитесь, что вы используете блоков размером , кратных 1024 байтам, что равно 1 КБ. Если вы не укажете размер блока, dd будет использовать размер блока по умолчанию 512 байт. Приведенные ниже соглашения будут работать для размеров блоков.

N и BYTES могут сопровождаться следующими мультипликативными суффиксами: c = 1, w = 2, b = 512,

  кБ = 1000, K = 1024,  
  Мб = 1000 * 1000, МБ = 1024 * 1024,  
  ГБ = 1000 * 1000 * 1000, ГБ = 1024 * 1024 * 1024,  
  и так далее для T, P, E, Z, Y. 

Пример 8: Мы даже можем создавать файлы ISO с CD-ROM или DVD-ROM с помощью команды dd.

  dd if = / dev / dvd of = / opt / my_linux_image.iso  

или более

  dd if = / dev / sr0 of = / home / $ user / mycd_image.iso bs = 2048 conv = sync  

Еще несколько примеров:

  dd if = / dev / sda1 of = / dev / sdb1 bs = 4096 conv = noerror, sync  

Это приведет к клонированию одного раздела sda1 в другой раздел sdb1, также используется опция синхронизации для синхронизации раздела

  dd if = / dev / sdx of = / dev / sdy bs = 64k conv = noerror, sync  

При этом будет клонирован весь диск, включая MBR, все разделы и данные, где noerrr указывает dd игнорировать все ошибки чтения при продолжении операций.Смещения данных snyc остаются синхронизированными. А bs = устанавливает размер блока, равный 64 КБ.
Пример 9: Мы даже можем проверить квоту диска с помощью команды dd, создав огромные файлы, которые быстро съедают жесткий диск.

  dd if = / dev / zero of = / usr / disk-img / disk-quota.ext3 count = 40960  

По указанному пути будет создан файл размером 20 МБ (образ диска).

Пример 10: Мы даже можем создать загрузочный USB-накопитель с помощью команды dd.

дд, если = / home / $ user / bootimage.изображение из = / dev / sdc

Это создаст загрузочный USB-накопитель, где / dev / sdc — это USB-накопитель.
Пример 11: Восстановление данных с помощью команды ddrescue.
Инструмент ddrescue используется для клонирования и восстановления данных. это не установлено по умолчанию на многих машинах Linux. Ниже приведены команды для установки для соответствующих дистрибутивов.

Установка ddrescue на машины на базе Debian

  apt-get install gddrescue  

Установка ddrescue на машины на базе Redhat

  yum install gddrescue  

Он может копировать данные с одного файлового / блочного устройства (жесткого диска или CD-ROM) на другое, пытаясь восстановить данные i.e ошибка чтения для максимизации восстановленных данных. Для восстановления данных команду ddrescue необходимо выполнить в два этапа, а затем выполнить команду fsck.

Шаг 1: Копирует каждый блок без ошибок чтения и регистрации этих ошибок в файле журнала.

Шаг 2: Он скопирует только плохой блок и 3 раза попытается прочитать исходный код, прежде чем он откажется. Затем вы можете запустить команду, чтобы проверить файловую систему на наличие повреждений.

Шаг 3: Запуск команды fsck.

  ddrescue –f –n / dev / sdX / dev / sdY rescue.log 
  ddrescue –d –f –r3 / dev / sdX / dev / sdY rescue.log 
  fsck –f / dev / sdY  

Пример 12: Компьютерная криминалистика с использованием dcfldd
dcfldd — это расширенная версия dd, имеющая полезные функции, используемые также для компьютерной криминалистики и безопасности. Принимает параметры dd. Вы можете использовать команду dcfldd, когда вам нужно знать, что копия и последующие копии идентичны оригиналу.dcfldd имеет некоторые дополнительные функции, такие как;

  • Хеширование на лету
  • Выход состояния
  • Изображение / стереть проверить
  • Разделенный выход
  • хеширование

Снова Мы должны установить и эту команду, если ее нет.

Установка dcfldd на машины на базе Debian

  apt-get install dcfldd  

Установка dcfldd на машины на базе Redhat

  yum install dcfldd  

Пример

  dcfldd, если = / dev / source hash = md5, sha512 hashwindow = 1G md5log = md5.txt sha512log = sha512.txt \ hashconv = after bs = 512 conv = noerror, sync split = 1G splitformat = aa of = image.dd  

Приведенная выше команда считывает один Гб с исходного диска и записывает в файл с именем image.dd.aa. он также будет вычислять хэш MD5 и sha512 для каждого прочитанного гигабайта.

Просмотры сообщений:
147 512

Следующие две вкладки изменяют содержимое ниже.

У меня более 11 лет опыта в сфере поддержки ИТ-инфраструктуры, поддержки серверов, поддержки настольных компьютеров, сетевых операций и устранения неполадок, операций центра обработки данных с репутацией в организации, ориентированной на технологии.Я магистр компьютерных наук.

.

Примеры команды Linux dd

команда dd

Примеры команд Linux dd

Команда Linux dd

Команду « dd » можно использовать для копирования и преобразования файла, создания копий разделов (резервного копирования жесткого диска) и создания файлов образов. Команду dd может запускать только пользователь root или пользователь с привилегиями sudo. При использовании команды dd не забудьте убедиться, что у вас достаточно свободного места в целевом местоположении, прежде чем запускать команду.

Примечание: Следует проявлять большую осторожность при использовании команды dd, так как вы можете легко стереть раздел / диск!

Использование: dd [OPERAND] …
или: dd OPTION

Копирование файла, преобразование и форматирование в соответствии с операндами:

  
  bs = BYTES чтение и запись до BYTES байтов за раз
  cbs = BYTES конвертировать BYTES байты за раз
  conv = CONVS преобразовать файл в соответствии со списком символов, разделенных запятыми
  count = N копировать только N входных блоков
  ibs = BYTES читает до BYTES байт за раз (по умолчанию: 512)
  if = ФАЙЛ читается из ФАЙЛА вместо стандартного ввода
  iflag = FLAGS прочитано согласно списку символов, разделенных запятыми
  obs = BYTES записывать BYTES байты за раз (по умолчанию: 512)
  of = FILE записать в ФАЙЛ вместо стандартного вывода
  oflag = FLAGS записать в соответствии со списком символов, разделенных запятыми
  seek = N пропускать N блоков большого размера в начале вывода
  skip = N пропускать блоки размером N ibs в начале ввода
  status = WHICH WHICH информация для подавления вывода на stderr;
                  noxfer подавляет статистику передачи, none подавляет все
   

Числовые суффиксы

N и BYTES могут сопровождаться следующими мультипликативными суффиксами:

c = 1
w = 2
b = 512
kB = 1000
K = 1024
MB = 1000 * 1000
M = 1024 * 1024
xM = M
GB = 1000 * 1000 * 1000
G = 1024 * 1024 * 1024

и так далее для T (терабайт ), P (петабайт), E (эксабайт), Z (зеттабайт) и Y (йоттабайт).

Каждый символ CONV может быть:

  
  ascii из EBCDIC в ASCII
  ebcdic из ASCII в EBCDIC
  ibm из ASCII в альтернативный EBCDIC
  блокировать записи с завершением новой строки с пробелами до размера cbs
  unblock заменить конечные пробелы в записях cbs-size на новую строку
  lcase изменить верхний регистр на нижний регистр
  ucase изменить нижний регистр на верхний регистр
  sparse пытается искать, а не записывать вывод для входных блоков NUL
  swab поменять местами каждую пару входных байтов
  синхронизировать подкладку каждого входного блока с NUL до размера ibs; при использовании
            с блокировкой или разблокировкой введите пробелы, а не NUL
  excl сбой, если выходной файл уже существует
  nocreat не создавать выходной файл
  notrunc не обрезает выходной файл
  noerror продолжить после ошибок чтения
  fdatasync физически записывает данные выходного файла перед завершением
  fsync аналогично, но также записывать метаданные
   

Каждый символ FLAG может быть:

  
  добавить режим добавления (имеет смысл только для вывода; предлагается conv = notrunc)
  прямое использование прямого ввода-вывода для данных
  каталог не работает, если каталог
  dsync использует синхронизированный ввод-вывод для данных
  синхронизировать аналогично, но также и для метаданных
  fullblock накапливает полные блоки ввода (только iflag)
  неблокировать использовать неблокирующий ввод / вывод
  noatime не обновлять время доступа
  nocache отменить кешированные данные
  noctty не назначает управляющий терминал из файла
  nofollow не следует символическим ссылкам
  count_bytes обрабатывает count = N как счетчик байтов (только iflag)
  skip_bytes обрабатывает 'skip = N' как счетчик байтов (только iflag)
  seek_bytes обрабатывает seek = N как счетчик байтов (только для запаздывания)
   

Прочие опции :

  
      --help отобразить эту справку и выйти
      --version вывести информацию о версии и выйти
    

Примеры команды dd

Ниже приведены некоторые часто используемые примеры команды dd.

Создать ISO-файл с компакт-диска

В этом примере команда dd позволяет создать iso-файл из исходного файла.

  
dd if = / dev / cdrom of = image.iso bs = 2k
   

Создание образа жесткого диска

Это очень полезное использование команды dd. Здесь вы собираетесь сделать образ существующего жесткого диска и сохранить его в другом месте хранения.

  
dd if = / dev / sda of = ~ / sda_disk.img
   

Восстановить файл образа на жесткий диск

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

  
dd if = sda_disk.img of = / dev / sdb
   

Приведенная выше команда восстанавливает файл образа, взятый из / dev / sda, и восстанавливает его в расположение / dev / sdb.

Сделать резервную копию жесткого диска

Следующая команда dd создаст резервную копию указанного диска на другом диске, подключенном к той же системе.

  
dd if = / dev / sda of = / dev / sdb conv = noerror, синхронизация
   

Вышеупомянутое копирует / dev / sda в / dev / sdb. Параметры «conv = noerror, sync» используются, чтобы указать, что мы не останавливаем обработку при возникновении ошибки. Параметр sync указывает, что любой отсутствующий ввод заменяется нулевыми байтами и обрабатывается нормально.

Сделать резервную копию указанного раздела

Следующая команда dd позволит вам сделать копию указанного раздела.

  
dd if = / dev / sda1 of = ~ / partition_sda1.img
   

Резервное копирование MBR — основная загрузочная запись с dd

Следующая команда dd создаст резервную копию главной загрузочной записи указанного диска. MBR — это загрузочный сектор размером 512 байт, который является первым сектором разделенного диска.

  
dd if = / dev / sda of = ~ / partition_sda1.mbr bs = 512 count = 1
   

Восстановите MBR — главную загрузочную запись с помощью dd

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

  
dd if = ~ / partition_sda1.mbr of = / dev / sda count = 1 bs = 512
   

Создайте фиктивный тестовый файл с dd

Следующая команда dd создаст фиктивный тестовый файл с размером, указанным размером блока и количеством.

  
dd if = / dev / zero of = ~ / test1.file bs = 1024 count = 1
   

В результате будет создан фиктивный тестовый файл размером 1024 байта.

  
dd if = / dev / zero of = ~ / test2.файл bs = 1024 count = 1024
   

Вышеупомянутый создаст фиктивный тестовый файл размером 1 МБ

  
dd if = / dev / zero of = ~ / test3.file bs = 1M count = 10
   

Приведенная выше команда dd создает фиктивный тестовый файл размером 10 МБ.

Вывод сверху Команды:

  
john @ ubuntu01-pc: ~ $ dd if = / dev / zero of = ~ / test1.file bs = 1024 count = 1
1 + 0 записей в
1 + 0 записей
Скопировано 1024 байта (1,0 КБ), 0.000406424 с, 2,5 МБ / с

john @ ubuntu01-pc: ~ $ dd if = / dev / zero of = ~ / test2.file bs = 1024 count = 1024
1024 + 0 записей в
1024 + 0 записей
1048576 байт (1,0 МБ) скопировано, 0,00375862 с, 279 МБ / с

john @ ubuntu01-pc: ~ $ dd if = / dev / zero of = ~ / test3.file bs = 1M count = 10
10 + 0 записей в
10 + 0 записей
10485760 байт (10 МБ) скопировано, 0,0186268 с, 563 МБ / с

Джон @ ubuntu01-pc: ~ $ ls -rtlh test *
-rw-rw-r-- 1 Иоанн Иоанн 1.0K 2 сентября 11:37 test1.file
-rw-rw-r-- 1 Иоанн Иоанн 1.0M 2 сентября 11:38 test2.file
-rw-rw-r-- 1 Иоанн Иоанн 10 мес. 2 сен, 11:38 test3.файл
   

Примечание: Если вы заинтересованы в создании файлов для тестирования, вы можете рассмотреть команду fallocate . Использование команды fallocate

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *