dd

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

dd (англ. dataset definition — визначення набору даних) — команда Unix, призначена для низькорівневого копіювання і конвертації необроблених (raw) даних. Команда використовується для копіювання визначеної кількості байтів чи блоків, заміни порядку байтів "на льоту", копіювання областей файлів пристроїв, резервного копіювання завантажувального сектору жорсткого диску, або читання фіксованої кількості даних зі спеціальних файлів /dev/zero чи /dev/random.

Команду dd жартома називають "винищувач диску" ("disk destroyer"), "винищувач даних" ("data destroyer"), чи "стерти дані" ("delete data"), оскільки при виконанні низькорівневих операцій навіть незначна помилка (така, як переплутати параметри if та of) може призвести до втрати деяких або навіть усіх даних на диску.

Використання[ред.ред. код]

Синтаксис команди dd істотно відрізняється в залежності від ОС, тому узагальнити опис використання непросто. Загалом, dd використовує формат option=value, в той час як більшість Unix-команд використовують формат -option value або --option=value. Також dd використовує параметр if для задання вхідного файлу, тоді як більшість команд напряму приймають ім'я файлу.

Параметри[ред.ред. код]

  • if=файл — читає дані з файлу замість стандартного вводу.
  • of=файл — пише дані у файл замість стандартного виводу.
  • bs=n — размір блоку.
  • ibs=nn и obs=nn — задає, скільки байт потрібно зчитувати або записувати за раз.
  • count=n — скільки блоків копіювати.
  • seek=n — скільки блоків пропустити від початку в вихідному файлі.
  • skip=n — скільки блоків від початку файлу пропустити перед початком копіювання.
  • conv=фільтр,фільтр — застосувати фільтри для конвертації.
  • ascii — конвертувати в ASCII з EBCDIC
  • ebcdic — …і навпаки.
  • block — вирівнювання блоків.
  • lcase — перетворювати в нижній регістр.
  • ucase — перетворювати у верхній регістр.
  • swap — міняти місцями пари байт.
  • noerror — ігнорувати помилки вводу-виводу.

Використання[ред.ред. код]

Робота з CD/DVD-дисками і образами[ред.ред. код]

Приклад використання команди dd для створення образу диску з CD-ROM:

 dd if=/dev/cdrom of=/home/sam/myCD.iso bs=2048 conv=sync

Створити образ CD/DVD, використовуючи розмір блоку, ігнорувати помилки:

    dd if=/dev/cdrom of=backup.iso bs=65535 conv=noerror

Розпакувати ISO-образ «image.iso» в папку «/home/root/exISO»:

    dd if=image.iso of=/home/root/exISO/

Записати ISO-образ «image.iso» на розділ sdb1 разом з його завантажувальним сектором і форматуванням розділу в файловій системі образа (як правило, ISO 9660 або UDF):

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

Робота з файлами[ред.ред. код]

Скопіювати файл foo в файл bar:

    dd if=foo of=bar

Скопіювати файл foo в файл bar, пропустивши перші 10 КБ з файлу foo:

    dd if=foo of=bar bs=1k skip=10

Порізати 10-мегабайтний файл foo на 2 по 5 МБ:

    dd if=foo of=bar.0 bs=1M count=5
    dd if=foo of=bar.1 bs=1M skip=5

Склеїти чотири 100-мегабайтних файли в один:

    dd if=SMILE.001 of=SMILE  bs=1M seek=0
    dd if=SMILE.002 of=SMILE  bs=1M seek=100
    dd if=SMILE.003 of=SMILE  bs=1M seek=200
    dd if=SMILE.004 of=SMILE  bs=1M seek=300

а можна і так:

    dd if=SMILE.001 > SMILE
    dd if=SMILE.002 >> SMILE
    dd if=SMILE.003 >> SMILE
    dd if=SMILE.004 >> SMILE

Вивести на екран (в /dev/stdout) перші 256 байт файла foo:

    dd if=foo of=/dev/stdout bs=128 count=2

або:

    dd if=foo bs=128 count=2

Попередня команда підходить лише для перегляду текстового файлу. Зміст бінарного файлу рекомендується дивитись так:

    dd if=foo bs=1 count=10 2>/dev/null|hexdump

Резервне копіювання і видалення даних[ред.ред. код]

Скопіювати один розділ жорсткого диску на інший жорсткий диск, ігноруючи помилки вводу-виводу:

    dd if=/dev/sda1 of=/dev/sdb2 bs=4096 conv=noerror

Зробити копію головного завантажувального запису (MBR) першого жорсткого диску:

    dd if=/dev/hda of=bootloader.mbr bs=1 count=512

Копіювати все, крім мітки, з диску на магнитну стрічку:

    (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape

Копіювати все, не перезаписуючи мітку, з магнітної стрічки на диск:

    (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk

Знищити вміст пристрою /dev/sdg, заповнивши його «нулями» з /dev/zero:

    dd if=/dev/zero of=/dev/sdg bs=65535

Дізнатись статус виконання операції:

    killall -USR1 dd

Дивіться також[ред.ред. код]

Посилання[ред.ред. код]