Команда dd linux сколько времени занимает копирование 1 tb

Обновлено: 03.07.2024

Утилита dd — это программа Unix, утилита командной строки, которую в Linux используют для низкоуровневого копирования и конвертации файлов. Первый прототип программы создан еще в 1974 году, а на Unix она работает с 1984 года. Функции утилиты на самом деле значительно шире и об этом мы более детально расскажем в статье ниже.

На самом деле, команда dd — не единственный инструмент, ведь большинство задач на Linux можно решить в несколько способов. Мы же попытаемся рассказать, почему утилита dd до сих пор популярна среди разработчиков, хоть ее и называют иногда data destroyer .

Назначение команды dd

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

Дисклеймер: работайте осторожно

Разработчики задумывали, что название dd должно отсылать к аббревиатуре языка Job Control Language (JCL), который использовала IBM. В этом языке оператор dd расшифровывался как «Доступ к данным» (Data Access).

Работая с утилитой, помните, что при передаче некорректных аргументов, часть или все данные диска могут быть потеряны. Поэтому крайне важно корректно указывать адреса и имена целевых файлов. В связи с этим dd имеет несколько ироничных расшифровок-прозвищ, таких как data destroyer , « добей диск » и delete data . Но инструмент продолжают применять из-за его мощности, надежности и простоты в использовании.

При работе с dd рекомендуется использовать Live-режим Linux, то есть запускать систему без установки на компьютер, например с USB-носителя. Live-режим работает медленнее из-за копирования каждого байта, даже с неиспользуемого пространства.

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

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

Обычно синтаксис кода состоит из трех команд:

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

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

Параметры для работы с командой dd

В dd довольно большой набор дополнительных параметров для конфигурации настроек. Мы рассмотрим основные из них:

  • bs — Установить размер блока ( block size ), который система будет считывать. Оптимально использовать 4–8 MB;
  • cbs — Установить, сколько байт нужно записывать за один раз;
  • count — Выбрать определенное число блоков для копирования. А чтобы обозначить их размер, подключают bs -опцию.
  • ibs — обозначить сколько байт нужно считать за раз. По умолчанию — 512 байт.
  • obs — Обозначить сколько байт нужно записать за раз. По умолчанию — 512 байт.
  • seek — Пропустить определенное количество байт в начале вывода;
  • skip — Пропустить определенное количество байт в начале ввода;
  • conv — Параметр, чтобы преобразовать файл. Параметр conv имеет собственные параметры. С их помощью, например, можно конвертировать систему кодов ASCII в EBCDIC и наоборот. В таблице указаны основные способы конвертации файлов.

Параметры для iflag, oflag:

Также отдельно стоит рассмотреть параметры iflag и oflag . Они позволяют задать дополнительные флаги: iflag — для устройств ввода, а oflag — для вывода.

Наиболее популярные флаги:

  • append — режим дописывания данных в файл. Append применяют только для вывода. Когда вы объедините этот флаг с конструкцией “ of=файл ”, нужно еще указать параметр “ conv=notrunc ”, чтобы выходной файл не был обрезан из-за добавления новых данных.
  • direct — режим обработки данных в обход кэша. Этот флаг повышает скорость.
  • dsync — запись данных с синхронизацией. Этот флаг повышает надежность.
  • sync — так же как и dsync , но и с метаданными.
  • directory — выдавать ошибку, при использовании каталога.
  • fullblock — чтение только полных блоков. Применяется только для iflag .
  • noatime — не обновляет время доступа к элементам файловой системы. Флаг повышает скорость.
  • nofollow — запрет на переход по символическим ссылкам.

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

Передача образа Linux на флешку

sudo mount /dev/sdc1 /mnt/usb

Дальше нужно определить куда записывать данные: на раздел флешки или на саму флешку. В случае ISO-образа нужно писать на раздел. Если образ диска типа img , то непосредственно на флешку.

Обычно это выглядит так:

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

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

Скопировать данные можно как и с всего устройства, так и с отдельного диска. Примерный код перемещения жесткого диска ( sda ) на внешнее устройство sdb1 будет выглядеть так:

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

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

Обычно dd не отображает изменений в ходе исполнения. Но можно передать инструменту опцию status=progress . Тогда система будет отображать информацию о количестве скопированных данных в режиме реального времени.

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

Назовем другой компьютер именем newcomputer . Тогда команда для передачи файла будет выглядеть так:

Архивация образа диска

Часто полезно записать сжатый образ диска, например, чтобы сделать бэкап данных. Архивацию можно реализовать несколькими способами. Наиболее популярные — утилитами bzip2 и gzip .

Вот пример кода с bzip2 сжатием:

Или применять gzip :

$ sudo dd if=/dev/disk3 | gzip -c > /Users/captain/raspberrypi.img.gz

Разные алгоритмы сжатия отличаются по производительности и дают разный размер архива. Также можно добавить дополнительные опции, например, размер блоков ( bs ), наблюдение за статусом ( status=progress ) и запись данных выходного файла ( conv=fsync ).

Извлечение данных из резервной копии

Когда утилита dd завершает работу с клонирования диска, вы получаете образ диска с названием backup_image.img.gz . Чтобы его открыть, сначала нужно получить права суперпользователя.

Например, Ubuntu это выполняется командой sudo su + пароль компьютера. В других дистрибутивах алгоритм действий аналогичный, но применяете команду su . Такую же команду нужно повторить если восстановления из образа данных жесткого диска:

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

gunzip/+ Путь кореневой директории диска/ /backup_image.img.gz | dd of=/dev/sda

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

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

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

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

Вот пример кода:

Другой вариант — создать файл образа поврежденного диска и попробовать вытащить данные из него.

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

Часто нужно отыскать информацию в определенной части диска. Для этого система может пропустить считывание ненужной части блоков. Например, вы хотите узнать содержимое диска начиная с 2000-го блока (в примере произвольное число). Чтобы это сделать, достаточно выполнить такую команду:

Тестирование скорости чтения и записи дисков

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

Так будет выглядеть синтаксис команд:

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

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

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

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

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

sudo dd if=/dev/zero of=/media/user1/Flashcard/tempfile bs=1M count=1024

Максимальная скорость съемных устройств, которые имеют подключение USB 2.0, — 480 Мбит или 60 МВ в секунду. Но из-за различных ограничений максимальная пропускная способность ограничена на уровне примерно в 35 МВ/с.

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

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

$ dd if=/home/user1/article.txt /home/user1/article_copy.txt

В заключение

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

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

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

Я вижу только терминал с запущенной командой. Когда я запускаю ps -e , по крайней мере, я знаю, что dd работает, исходя из показанного использования ЦП, но у меня нет возможности узнать, сколько он сделал и сколько времени это займет. заканчивать.

Это меня сводит с ума.

4 ответа

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

Или для прямого копирования, просто используйте это:

Типичный. Когда я что-то спрашиваю, я как-то нахожу ответ (даже если я искал часы . но волшебным образом я нахожу его ПОСЛЕ создания вопроса -.-). Во всяком случае для того, что я проверил с dd --help , который упоминает в конце справки (я не могу поверить, что я не видел ЭТО) следующее:

Что это означает, что в другом терминале вы бы запустили следующую строку, используя ID процесса того DD, который вы хотите проверить. Например, в моем случае это Process Id 4112. Вы можете увидеть идентификатор процесса, набрав ps -e и выполнив поиск dd или просто ps -e|grep dd и посмотрев на номер спереди. Запишите этот номер, а затем введите в другом окне терминала kill -USR1 4112; sleep 1; . Это даст мне время, прошедшие секунды с момента его начала и количество копий. По крайней мере, теперь я знаю, что копирование 1 ТБ информации занимает около 8 часов со скоростью около 40 МБ / с.

Что касается использования kill для отображения информации на Mac, вы должны передать ему флаг -INFO вместо флага -USR1 . И помните, что он отображает информацию в терминале, где запущен ваш процесс dd, поэтому, если вы откроете новую вкладку для типа kill -INFO $PID (где $PID - это число, которое вы нашли с помощью ps -e | grep dd ), вам придется Вернитесь на вкладку, где работает dd , чтобы увидеть результат.

Теперь, если бы я только мог понять, как отобразить этот вывод в виде ГБ или МБ вместо простых байтов .



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

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

  • if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
  • of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
  • bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
  • count: как раз то число, которое указывает: сколько кусочков будет скопировано.

Создание образа диска:

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

Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем "-o loop":

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

Если и так не работает, значит файловая система образа полетела.

Работа с носителями информации

Очень простое, хоть и не оптимальное решение клонирования жесткого диска:

Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).

Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:

Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:

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

Должны посыпаться нули.

Операции с MBR

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

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

Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.

Генерация файлов

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

Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:

Ассоциация образа с блочным устройством со включенным шифрованием:

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

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

Теперь шифрованный образ готов.

Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT'шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.

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

Для решения всех этих задач используется утилита dd linux, которая просто выполняет копирование данных из одного места в другое на двоичном уровне. Она может скопировать CD/DVD диск, раздел на диске или даже целый жесткий диск. В этой статье мы рассмотрим что из себя представляет команда dd linux, основные ее опции и параметры, а также как ею пользоваться.

Как работает команда dd?

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

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

Команда dd

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

$ dd if= источник_копирования of= место_назначения параметры

С помощью параметра if вам нужно указать источник, откуда будут копироваться блоки, это может быть устройство, например, /dev/sda или файл - disk.img. Дальше, с помощью параметра of необходимо задать устройство или файл назначения. Другие параметры имеют такой же синтаксис, как if и of.

Теперь давайте рассмотрим дополнительные параметры:

  • bs - указывает сколько байт читать и записывать за один раз;
  • cbs - сколько байт нужно записывать за один раз;
  • count - скопировать указанное количество блоков, размер одного блока указывается в параметре bs;
  • conv - применить фильтры к потоку данных;
  • ibs - читать указанное количество байт за раз;
  • obs - записывать указанное количество байт за раз;
  • seek - пропустить указанное количество байт в начале устройства для чтения;
  • skip - пропустить указанное количество байт в начале устройства вывода;
  • status - указывает насколько подробным нужно сделать вывод;
  • iflag, oflag - позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.

Это были все основные опции, которые вам могут понадобиться. Теперь перейдем ближе к практике и рассмотрим несколько примеров как пользоваться утилитой dd linux.

Как пользоваться dd?

Обычные пользователи используют команду dd чаще всего для создания образов дисков DVD или CD. Например, чтобы сохранить образ диска в файл можно использовать такую команду:

sudo dd if=/dev/sr0 of=

/CD.iso bs=2048 conv=noerror

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

В вашей домашней папке будет создан файл с именем disk1.img, который в будущем можно будет развернуть и восстановить испорченную систему. Чтобы записать образ на жесткий диск или раздел достаточно поменять местами адреса устройств:

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

Команда dd linux использует именно такую систему, она сложная, но от этого никуда не деться. Ее придется понять и запомнить. Например, 2b - это 1 килобайт, и 1k, это тоже 1 килобайт, 1М - 1 мегабайт. По умолчанию утилита использует размер блока - 512 байт. Например, чтобы ускорить копирование диска можно брать блоки размером по 5 мегабайт. Для этого применяется такая команда:


Следующий параметр - это count. С помощью него можно указать сколько блоков необходимо скопировать. Например, мы можем создать файл размером 512 мегабайт, заполнив его нулями из /dev/zero или случайными цифрами из /dev/random:

sudo dd if=/dev/zero of=file.img bs=1M count=512


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

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

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

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

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

dd if=/home/sergiy/test.txt of=/home/sergiy/test1.txt

Как вы знаете, команда dd linux пишет данные на диск непосредственно в двоичном виде, это значит, что записываются нули и единицы. Они переопределяют то, что было раньше размещено на устройстве для записи. Поэтому чтобы стереть диск вы можете просто забить его нулями из /dev/zero.

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

Такое использование dd приводит к тому что весь диск будет полностью стерт.

Выводы

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

Читайте также: