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=байтів — встановлює размір блоку (кількість байтів читання й запису за раз). Ця опція пересилює ibs та obs.
  • ibs=байтів — задає размір блокубайтах) для зчитування за раз (типово — 512)…
  • obs=байтів — … і для запису за раз (типово — 512).
  • cbs=байтів — вказує розмір блоків (у байтах) перетворень для фільтрів block та unblock.
  • count=блоків — скільки блоків ibs-байтової довжини копіювати.
  • seek=блоків — вказує, скільки блоків obs-байтової довжини пропустити у файлі-призначення перед початком копіювання.
  • skip=блоків — скільки блоків ibs-байтової довжини пропустити у файлі вводу перед тим, як розпочати копіювання.
  • conv=фільтр1[,фільтр2,…,фільтрN] (без пробілів між комами) — застосувати фільтр(и) для конвертації:
    • ascii — конвертувати в ASCII з EBCDIC
    • ebcdic — … і навпаки.
    • block — вирівнювання блоків (для кожного рядка файла вводу виведе cbs байтів, замінюючи символ нового рядка на пробіл і доповнюючи пробілами, за необхідності).
    • unblock — замінить кінцеві пробіли кожного ввідного блоку з розміром cbs символом нового рядка.
    • lcase — замінить літери верхнього регістру на нижній…
    • ucase — … і навпаки.
    • swab — поміняє місцями кожну пару байтів вводу, останній непарний (коли є) просто скопіюється.
    • noerror — ігнорувати помилки вводу-виводу.
    • notrunc — не вкорочуватиме файл виводу.
    • sync — доповнить кожний блок вводу хвостовими нульовими байтами до ibs-розміру.
  • -- — закінчує список параметрів.


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

Робота з 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

або, враховуючи, що типовий файл виводу якраз і є /dev/stdout:

    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

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

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