dd
| Äëÿ ýòîé ñòàòüè íå çàïîëíåí øàáëîí-êàðòî÷êà {{Êàðòî÷êà ïðîãðàììû}}.
Âû ìîæåòå ïîìî÷ü ïðîåêòó, äîáàâèâ åãî.
|
| Â ýòîé ñòàòüå ñëèøêîì êîðîòêîå âñòóïëåíèå.
Ïîæàëóéñòà, äîïîëíèòå ââîäíóþ ñåêöèþ, êðàòêî ðàñêðûâàþùóþ òåìó ñòàòüè è îáîáùàþùóþ å¸ ñîäåðæèìîå.
|
dd (dataset definition) â ïðîãðàììà UNIX, ïðåäíàçíà÷åííàÿ êàê äëÿ êîïèðîâàíèÿ, òàê è äëÿ êîíâåðòàöèè ôàéëîâ. Íàçâàíèå óíàñëåäîâàíî îò îïåðàòîðà DD (Dataset Definition) èç ÿçûêà JCL
Ñîäåðæàíèå |
[ïðàâèòü] Ââåäåíèå
Ïîñêîëüêó â UNIX î÷åíü ìíîãèå îáúåêòû ÿâëÿþòñÿ ôàéëàìè, ñïåêòð ïðèìåíåíèÿ dd ãîðàçäî øèðå, ÷åì êàæåòñÿ íà ïåðâûé âçãëÿä. Ðåãóëÿðíî âîçíèêàåò íåîáõîäèìîñòü íå ïðîñòî ñêîïèðîâàòü ôàéë èëè íåñêîëüêî ôàéëîâ (äëÿ ÷åãî ïðåäíàçíà÷åíà óòèëèòà cp), à ñêîïèðîâàòü ïåðâûå n áàéò ôàéëà, ïðîïóñòèòü m áàéò îò íà÷àëà, ïðî÷èòàòü ôàéë ñ äåôåêòíîãî íîñèòåëÿ, òðàíñëèðîâàòü ñîäåðæèìîå ôàéëà â ASCII, «ðàçâåðíóòü» ïîðÿäîê áàéò â ôàéëå (Little-Endian vs. Big-Endian),[1] ïðîñòî ñêîïèðîâàòü î÷åíü áîëüøîé ïàëëåòíûé ôàéë èëè âñå âìåñòå âçÿòîå. Äëÿ ýòîé öåëè è ñëóæèò dd.
Êðîìå âñåãî ïðî÷åãî, äàííàÿ óòèëèòà ïîçâîëÿåò ñêîïèðîâàòü ðåãèîíû èç ôàéëîâ «ñûðûõ» óñòðîéñòâ, íàïðèìåð, ñäåëàòü ðåçåðâíóþ êîïèþ çàãðóçî÷íîãî ñåêòîðà æ¸ñòêîãî äèñêà, èëè ïðî÷èòàòü ôèêñèðîâàííûå áëîêè äàííûõ èç ñïåöèàëüíûõ ôàéëîâ, òàêèõ, êàê /dev/zero èëè /dev/random.[2]
Íàçâàíèå óòèëèòû dd èíîãäà â øóòêó ðàñøèôðîâûâàþò, êàê «disk destroyer», «data destroyer» èëè «delete data», òàê êàê óòèëèòà ïîçâîëÿåò ïðîèçâîäèòü íèçêîóðîâíåâûå îïåðàöèè íà æ¸ñòêèõ äèñêàõ â ïðè ìàëåéøåé îøèáêå, òàêîé, êàê ðåâåðñ ïàðàìåòðîâ if è of, ìîæíî ïîòåðÿòü ÷àñòü äàííûõ íà äèñêå (èëè äàæå âñå äàííûå)[1].
[ïðàâèòü] Íåêîòîðûå ïàðàìåòðû
Ïðè íàïèñàíèè ñòàòüè áûëè èñïîëüçîâàíû ìàòåðèàëû man dd, îïèñûâàþùèå âåðñèþ dd îò GNU. Âåðñèè dd íà äðóãèõ îïåðàöèîííûõ ñèñòåìàõ ìîãóò îòëè÷àòüñÿ.
[ïðàâèòü] Áàçîâûå ïàðàìåòðû
dd [--help] [--version] [if=ôàéë] [of=ôàéë] [ibs=áàéòû] [obs=áàéòû] [bs=áàéòû] [cbs=áàéòû] [skip=áëîêè] [seek=áëîêè] [count=áëîêè] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]
- if=ôàéë â ÷èòàåò äàííûå èç ôàéëà âìåñòî ñòàíäàðòíîãî ââîäà.
- of=ôàéë â ïèøåò äàííûå â ôàéë âìåñòî ñòàíäàðòíîãî âûâîäà.
- bs=n â ðàçìåð áëîêà.
- ibs=nn è obs=nn â çàäà¸ò, ñêîëüêî áàéòîâ íóæíî ñ÷èòûâàòü èëè çàïèñûâàòü çà ðàç.
- count=n â ñêîëüêî áëîêîâ ñêîïèðîâàòü.
- seek=n â ñêîëüêî áëîêîâ ïðîïóñòèòü îò íà÷àëà â ðåçóëüòèðóþùåì ôàéëå.
- skip=n â ñêîëüêî áëîêîâ îò íà÷àëà ôàéëà ïðîïóñòèòü ïåðåä íà÷àëîì êîïèðîâàíèÿ.
- conv=ôèëüòð,ôèëüòð â ïðèìåíèòü ôèëüòðû êîíâåðòàöèè.
- ascii â ñêîíâåðòèðîâàòü â ASCII èç EBCDICâ
- ebcdic â âè íàîáîðîò.
- block â âûðàâíèâàíèå áëîêîâ.
- lcase â ïðåîáðàçîâàòü ê íèæíåìó ðåãèñòðó.
- ucase â ïðåîáðàçîâàòü ê âåðõíåìó ðåãèñòðó.
- swab â ìåíÿòü ìåñòàìè ïàðû áàéò.
- noerror â èãíîðèðîâàòü îøèáêè ââîäà-âûâîäà.
[ïðàâèòü] Ïðèìåðû èñïîëüçîâàíèÿ
[ïðàâèòü] Ðàáîòà ñ CD/DVD-äèñêàìè è îáðàçàìè
Ñîçäàòü îáðàç CD/DVD, èñïîëüçóÿ áîëüøîé ïàëëåòíûé ðàçìåð áëîêà. Èãíîðèðîâàòü îøèáêè:
dd if=/dev/cdrom of=backup.iso bs=65536 conv=noerror
Çàïèñàòü ISO-îáðàç «image.iso» íà óñòðîéñòâî sdb âìåñòå ñ åãî çàãðóçî÷íûì ñåêòîðîì è ôîðìàòèðîâàíèåì ðàçäåëà â ôàéëîâóþ ñèñòåìó îáðàçà (êàê ïðàâèëî, ISO 9660 èëè UDF):
dd if=image.iso of=/dev/sdb
[ïðàâèòü] Ðàáîòà ñ ôàéëàìè
Ñêîïèðîâàòü ôàéë 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
èëè æå (äëÿ ñáîðà ôàéëà èç áîëüøîãî ïàëëåòíîãî êîëè÷åñòâà êóñêîâ):
for i in {1 4}; do
dd if=SMILE.00$i >> SMILE
done
Ïðèìåðû âûøå ïîêàçûâàþò âîçìîæíîñòè dd, íà ïðàêòèêå, îáû÷íî, èñïîëüçóåòñÿ cat
cat SMILE.00{1,2,3,4} > 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=512 count=1
Ïðîñìîòðåòü ñîäåðæèìîå ãëàâíîé çàãðóçî÷íîé çàïèñè (MBR) ïåðâîãî æ¸ñòêîãî äèñêà:
dd if=/dev/sda bs=512 count=1 | hexdump -C
Êîïèðîâàòü âñ¸, êðîìå ìåòêè, ñ äèñêà íà ìàãíèòíóþ ëåíòó:
(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
[ïðàâèòü] Âàðèàíòû dd, îðèåíòèðîâàííûå íà âîññòàíîâëåíèå
Ïðîãðàììû ñ îòêðûòûì èñõîäíûì êîäîì äëÿ âîññòàíîâëåíèÿ âêëþ÷àþò dd_rescue è dd_rhelp, êîòîðûå ðàáîòàþò âìåñòå, savehd7 è GNU ddrescue.
Antonio Diaz Diaz (ðàçðàáîò÷èê GNU ddrescue) ñðàâíèâàåò[3] âàðèàíòû dd äëÿ çàäà÷ âîññòàíîâëåíèÿ:
Ñòàíäàðòíàÿ óòèëèòà dd îñóùåñòâëÿåò ëèíåéíîå ÷òåíèå äèñêà, è ýòî ìîæåò çàíÿòü ìíîãî âðåìåíè èëè äàæå ñæå÷ü íàêîïèòåëü áåç âîññòàíîâëåíèÿ ÷åãî-ëèáî, åñëè îøèáêè ðàñïîëîæåíû âíà÷àëå æåñòêîãî äèñêà. dd_rescue äåëàåò òî æå ñàìîå, ÷òî è dd, òîëüêî áîëåå ýôôåêòèâíî. dd_rhelp â ýòî ñëîæíûé shell-ñêðèïò, êîòîðûé çàïóñêàåò dd_rescue ìíîãî ðàç, ñòàðàÿñü ñòðàòåãè÷åñêè êîïèðîâàòü íàêîïèòåëü, íî ýòî î÷åíü íåýôôåêòèâíî.
- dd_rhelp ñíà÷àëà èçâëåêàåò âñå äîñòóïíûå ê ÷òåíèþ äàííûå è ñîõðàíÿåò èõ â ôàéë, âñòàâëÿÿ íóëè âìåñòî áàéòîâ, êîòîðûå íå ñìîã ïðî÷åñòü. Ïîòîì óòèëèòà ïûòàåòñÿ ïîâòîðíî ïðî÷èòàòü íåêîððåêòíûå äàííûå è îáíîâèòü ýòîò ôàéë.
- GNU ddrescue ìîæåò áûòü èñïîëüçîâàíà äëÿ êîïèðîâàíèÿ äàííûõ ïðÿìî íà íîâûé äèñê ïî íåîáõîäèìîñòè, êàê è dd.
[ïðàâèòü] Ñì. òàêæå
[ïðàâèòü] Ïðèìå÷àíèÿ
- â‘ 1 2 Sam Chessman How and when to use the dd command?. CodeCoffee. Àðõèâèðîâàíî èç ïåðâîèñòî÷íèêà 21 ÿíâàðÿ 2012. Ïðîâåðåíî 19 ôåâðàëÿ 2008.
- â‘ Dd - LQWiki. LinuxQuestions.org. Àðõèâèðîâàíî èç ïåðâîèñòî÷íèêà 21 ÿíâàðÿ 2012. Ïðîâåðåíî 19 ôåâðàëÿ 2008.
- â‘ Interview With GNU DDRescue's Antonio Diaz Diaz. Blue-GNU. Àðõèâèðîâàíî èç ïåðâîèñòî÷íèêà 15 àïðåëÿ 2008. Ïðîâåðåíî 6 äåêàáðÿ 2008.
[ïðàâèòü] Ññûëêè
dd(1)â ñòðàíèöà ñïðàâêè man ïî ïîëüçîâàòåëüñêèì êîìàíäàì GNU/Linux (àíãë.)- dd: Êîìàíäà, êîòîðàÿ íå ïîõîæà íà äðóãèå
- Ðåàëèçàöèÿ dd ïîä Windows
| Ñòàíäàðòíûå ïðîãðàììû UNIX (âñå ïðîãðàììû) | |
|---|---|
| Ôàéëîâûå ñèñòåìû | chroot dd df fdisk fsck mkisofs mkswap mount umount rehash |
| Ôàéëû è êàòàëîãè | cat chattr cd chmod chown chgrp cksum cmp cp diff du file fuser ln ls lsof mkdir mv od pwd rm rmdir split touch |
| Ïðîöåññû | at cron exit kill killall nice nohup pgrep pidof pkill ps renice sleep time top wait watch |
| Ïîëüçîâàòåëè | env finger id last logname mesg passwd su sudo uptime w wall who whoami write |
| Ñåòü | ftp host ifconfig netcat netstat nmap nslookup ping rlogin SSH traceroute wget |
| Òåêñòû | AWK comm cut ed ex expand unexpand fmt head iconv join less more paste pr sed sort tac tail tr uniq wc xargs |
| Êîìàíäíàÿ ñòðîêà | alias basename bash bind dirname echo expr false printf test true unset |
| Ïîèñê | find grep strings whereis which |
| Ðàçíîå | banner bc cal date help lp man history size tee uname yes reboot |
| Ôîðìàòû àðõèâîâ (ñðàâíåíèå ïî òèïó) | |
|---|---|
| Òîëüêî àðõèâèðîâàíèå | |
| Òîëüêî ñæàòèå | |
| Àðõèâèðîâàíèå è ñæàòèå | |
| Óïàêîâêà è ðàñïðîñòðàíåíèå ÏÎ | |