Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> dd

Использование утилиты dd

Автор: lissyara.


    В составе FreeBSD (и не только во фряхе, но и в linux) есть штатная утилита dd - она копирует стандартный ввод, в стандартный вывод. Таково её определение в man`е. Тока может она немного больше. Примеры приведены в том же мане, а также кое-что здесь.
   Для начала - с её помошью можно делать образы дисков или отдельных слайсов:
/usr/home/lissyara/>df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    248M    100M    128M    44%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad0s1d    989M    1.4M    909M     0%    /tmp
/dev/ad0s1e     14G    5.0G    7.5G    40%    /usr
/dev/ad0s1f    3.5G    331M    2.9G    10%    /var
/dev/ad8s1      73G     62G    5.0G    93%    /usr/local/smb
/usr/home/lissyara/>dd if=/dev/ad0s1a of=test.img
524288+0 records in
524288+0 records out
268435456 bytes transferred in 231.665702 secs (1158719 bytes/sec)
/usr/home/lissyara/>
/usr/home/lissyara/>mdconfig -a -t vnode -f test.img -u 0
/usr/home/lissyara/>bsdlabel -w md0 auto
/usr/home/lissyara/>mount /dev/md0c /mnt
/usr/home/lissyara/>ls /mnt/
.cshrc          boot            entropy         proc            tmp
.profile        cdrom           etc             rescue          usr
.snap           compat          lib             root            var
COPYRIGHT       dev             libexec         sbin
bin             dist            mnt             sys
/usr/home/lissyara/>df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    248M    100M    128M    44%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad0s1d    989M    1.4M    909M     0%    /tmp
/dev/ad0s1e     14G    5.0G    7.5G    40%    /usr
/dev/ad0s1f    3.5G    331M    2.9G    10%    /var
/dev/ad8s1      73G     62G    5.0G    93%    /usr/local/smb
/dev/md0c      248M    4.0K    228M     0%    /mnt
/usr/home/lissyara/>
/usr/home/lissyara/>umount /mnt
/usr/home/lissyara/>mdconfig -d -u 0

Вот так. Можно сделать образ слайса в виде файла, утащить его куда надо и там раскатать - выглядеть это будет также (это уже другая машина):
/usr/home/lissyara/>df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/ad0s1a   252M    36M   196M    16%    /
/dev/ad0s1e  1008M    18K   927M     0%    /tmp
/dev/ad1s1e    37G   8.2G    26G    24%    /usr
/dev/ad0s1f   4.7G    25M   4.3G     1%    /var
procfs        4.0K   4.0K     0B   100%    /proc
/usr/home/lissyara/>dd if=/dev/ad0s1a of=/usr/ad0s1a.img
524288+0 records in
524288+0 records out
268435456 bytes transferred in 160.064442 secs (1677046 bytes/sec)
/usr/home/lissyara/>ls -lah /usr | grep img
-rw-r--r--   1 root  wheel       256M Dec 26 15:44 ad0s1a.img
/usr/home/lissyara/>
/usr/home/lissyara/>dd if=/usr/ad0s1a.img of=/dev/ad0s1a
dd: /dev/ad0s1a: Device busy

Не даёт. Логично - / по любому занят... Плохо что корневой раздел нельзя отмонтировать с ключиком -f - можно было бы попробовать... А так придётся делать другой опыт, на другом разделе:
/usr/home/lissyara/>df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/ad0s1a   252M    36M   196M    16%    /
/dev/ad0s1e  1008M    18K   927M     0%    /tmp
/dev/ad1s1e    37G   2.2G    32G     7%    /usr
/dev/ad0s1f   4.7G    25M   4.3G     1%    /var
procfs        4.0K   4.0K     0B   100%    /proc
/usr/home/lissyara/>dd if=/dev/ad0s1e of=/usr/ad0s1e.img
2097152+0 records in
2097152+0 records out
1073741824 bytes transferred in 612.327543 secs (1753542 bytes/sec)
/usr/home/lissyara/>
/usr/home/lissyara/>dd if=/usr/ad0s1e.img of=/dev/ad0s1e
dd: /dev/ad0s1e: Device busy
/usr/home/lissyara/>umount -f /tmp
/usr/home/lissyara/>df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/ad0s1a   252M    36M   196M    16%    /
/dev/ad1s1e    37G   3.2G    31G     9%    /usr
/dev/ad0s1f   4.7G    25M   4.3G     1%    /var
procfs        4.0K   4.0K     0B   100%    /proc
/usr/home/lissyara/>
/usr/home/lissyara/>dd if=/usr/ad0s1e.img of=/dev/ad0s1e
/usr/home/lissyara/>dd if=/usr/ad0s1e.img of=/dev/ad0s1e
2097152+0 records in
2097152+0 records out
1073741824 bytes transferred in 789.388632 secs (1360220 bytes/sec)
/usr/home/lissyara/>mount /tmp
mount: /dev/ad0s1e: Operation not permitted
/usr/home/lissyara/>df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/ad0s1a   252M    36M   196M    16%    /
/dev/ad1s1e    37G   3.2G    31G     9%    /usr
/dev/ad0s1f   4.7G    25M   4.3G     1%    /var
procfs        4.0K   4.0K     0B   100%    /proc
/dev/ad0s1e  1008M    18K   927M     0%    /tmp
/usr/home/lissyara/>

Тоже самое можно сделать и с корневым разделом - но если образ можно снять и с работающей системы, то "раскатывать" его придётся загрузившись с "LiveCD" FreeBSD или какого линуха...
   Также мне понравился один пример из man dd:
/usr/home/lissyara/>su
/usr/home/lissyara/>df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/ad0s1a   252M    36M   196M    16%    /
/dev/ad0s1e  1008M    18K   927M     0%    /tmp
/dev/ad1s1e    37G   3.2G    31G     9%    /usr
/dev/ad0s1f   4.7G    25M   4.3G     1%    /var
procfs        4.0K   4.0K     0B   100%    /proc
/usr/home/lissyara/>dd if=/dev/ad0 of/dev/null bs=1m
dd: unknown operand of/dev/null
/usr/home/lissyara/>dd if=/dev/ad0 of=/dev/null bs=1m
6187+1 records in
6187+1 records out
6488294400 bytes transferred in 424.050846 secs (15300746 bytes/sec)
/usr/home/lissyara/>

Такая вот проверка диска на бэд-блоки :) Ещё одна интересная тема - вместо "сверхпопулярной" :) команды rm -Rf / можно применить dd - причём будет гораздо более надёжно, т.к. весь диск затрётся нулями:
/usr/home/lissyara/>df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    1.8G    1.0G    668M    60%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad1s1d    9.5G    630M    8.1G     7%    /disk_1
/usr/home/lissyara/>dd if=/dev/zero of=/dev/ad1
dd: /dev/ad1: Operation not permitted
/usr/home/lissyara/>umount -f /disk_1
/usr/home/lissyara/>dd if=/dev/zero of=/dev/ad1
^C87183+0 records in
87182+0 records out
44637184 bytes transferred in 130.484121 secs (342089 bytes/sec)
/usr/home/lissyara/>

Ждать не захотел, т.к. при такой скорости на это ушло б много времени. (скорость такая маленькая потому что на виртуальной машине делал - а Вы думали я на настоящей изгаляюсь с такими деструктивными командами? - изгаляюсь, и на настоящей - на тестовой, но и её жалко - т.к. перестановка ОС - это время.)
   Точно также легко и непринуждённо создаются образы с CD-ROM (в примере защищённый диск с данными):
/usr/home/lissyara/>dd if=/dev/acd0 of=map.iso bs=2048
355964+0 records in
355964+0 records out
729014272 bytes transferred in 445.316083 secs (1637072 bytes/sec)
/usr/home/lissyara/>
/usr/home/lissyara/>ll | grep iso
-rw-r--r--   1 root      wheel  729014272  2 май 13:20 map.iso
/usr/home/lissyara/>

   Вот такая полезная программка.



размещено: 2005-12-26,
последнее обновление: 2006-05-02,
автор: lissyara


Ramzes, 2007-05-23 в 4:19:43

Имхо намного веселее юзать не dd, а стрелочки и cat +)

# cat /dev/ad1 > ad1.img

Очень классно слушать так музыку с компакта:
# cat /dev/acd0t1 > /dev/dsp
(не забыть только про kldload snd_driver :)) )

Но у dd конечно намного больше опций... Например можно из формата nrg (Nero Image) сделать полноценный нормальный iso юзая параметр skip. (Сколько байт надо пропустить - не помню :) )

KaMa-CyTpA, 2007-08-28 в 15:34:25

Протупил - не могу понять как именно сделать образ корневого раздела, чтобы после (не приведи Господь) крушения, восстановить шустренько - специально второй винт поставил для архивных копий.
А тут фраза сразу-же:
Не даёт. Логично - / по любому занят... Плохо что корневой раздел нельзя отмонтировать с ключиком -f - можно было бы попробовать...

Romzes, 2007-11-27 в 15:17:54

чтоб потенциальному ковырятелю дисков было веселей,
вместо dd if=/dev/zero of=/dev/ad1
dd if=/dev/random of=/dev/ad1
а то говорят данные вытаскиваваются и после трех перезаписей

test, 2008-03-29 в 14:24:46

KaMa-CyTpA
юзать dd для создания бекапов - извращение. Юзайте dump/restore

ONYX, 2008-05-01 в 2:33:28

Подумав над (dd/dump/restore) я заюзал gmirror. Сразу 3 винта упасть не могут, а личный опыт показывает что можно отключать нагорячую сразу 2 винта, включая первый загрузочный (при этом екстренно намыливая админам что бы покупали виты новые)

braveduck, 2008-06-11 в 15:14:31

Можно и на рут образ залить, если очень хочется :)

#sysctl kern.geom.debugflags=16
#dd dd if=/usr/root.img of=/dev/ad0s1a bs=1m

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

OpenBoy, 2009-03-20 в 17:05:58

Полезно при копировании разделов задавать так же параметр... помоему bc, суть есть количество 512 байтных блоков, которое читаеться и\или записываеться за один раз.

Из каких соображений это делать правильнее всего - я не знаю. Но предполагаю, что нужно руководствоваться обьемом кеша жеского диска. Я беру 90 процентов от его обьема выраженного в 512 баитных блоках.

ufs, 2010-07-04 в 18:19:38

ssh -C root@server dd if=/dev/hda bs=1M | dd of=hda.dd
мб кому и пригодится ;)

BassMan, 2020-11-16 в 12:01:34

В составе FreeBSD (и не только во фряхе, но и в linux) есть штатная утилита dd - она копирует стандартный ввод, в стандартный вывод

Лишняя запятая. Сайт супер, но просьба орфографию исправить во всех статьях, чтобы стыдно не было. Рекомендую LanguageTool.

Alex Keda, 2020-11-16 в 12:09:46

орфографию или пунктуацию?



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0686 секунд
Из них PHP: 33%; SQL: 67%; Число SQL-запросов: 77 шт.
Исходный размер: 33391; Сжатая: 7801