Dd: Difference between revisions

From ICO wiki
Jump to navigationJump to search
 
(76 intermediate revisions by the same user not shown)
Line 1: Line 1:
Teema võttis: Peep Binsol, AK31
= Sissejuhatus =
 
dd - '''disk duplicate''' programmi kasutatakse madala taseme kopeerimiseks. Ta ei kopeeri mitte faile, vaid konkreetseid baite mingilt andmekandjalt. Dd ei hooli ka sellest, millised kettajaod on kettal. Sellega saab kopeerida mistahes kettajagude ja failisüsteemidega kettaid.
 
Mõned märkused dd kasutamiseks:
* dd on väga levinud programm ja ta on vaikimisi olemas enamustes linuxi süsteemides.
* dd kasutamiseks pead olema root õigustega.
* enne kasutamist veendu kindlasti, et sisend ja väljund said õigesti märgitud, muidu võid oma kettal olevad andmed väga kergesti rikkuda.
* dd ei anna töötamisel mingit väljundit ja samas võtavad operatsioonid suuremahuliste ketastega palju aega. Katsetamiseks on head väiksemad andmekandjad nagu näiteks mälupulgad.
 
= Süntaks =


Teema on pooleli.
Dd juured ulatuvad tagasi ammustesse [http://en.wikipedia.org/wiki/Job_Control_Language IBM JCL] aegadesse ja tema süntaks on jäänuk neist iidsetest aegadest. Seega tuleb arvestada, et see on veidi erivev tavaliste linuxi käskude süntaksist.


= Sissejuhatus =
<pre>
dd if=<lähteketas> of=<sihtketas>


DD - disk duplicate
dd if=/dev/sda of=/dev/sdb
Kasutatakse madala taseme kopeerimiseks, ei kopeeri faile, vaid konkreetseid baite. DD ei hooli ka sellest, millised partitsioonid on kettal. Sellega saab kopeerida mistahes partitsioonide ja failisüsteemidega kettaid.


Mingi jutt sissejuhatuseks
dd if=/dev/sda5 of=/dev/sdb5 bs=4096 conv=noerror,notrunc
</pre>


DD kasutamiseks pead olema root õigustega.
NB! võrdusmärkide ümber ei tohi olla tühikuid.


= Süntaks =
Mõned olulisemad võtmed:


veidi teistmoodi
* '''bs''' - ploki suurus. Kui ploki suurus jäetakse määramata, siis kasutatakse vaikimisi suurust 512 baiti. Ploki suurusena kasutatakse üldiselt kahe astmeid (512, 1024, 2048, 4096 jne), aga ei pea tingimata. Võib ka märkida kujul 32K, 1M jne. Suuruse valikul võiks arvestada sellega, et ploki suurus ei oleks suurem kui masina vaba mälu hulk.
'''if''' input file
'''of''' output file


bs - byte size (default 512) -> üldiselt kasutatakse kahe astmeid aga ei pea. suurema numbriga käivad asjad kiiremini? ploki suurus, võib olla ka 1M, 1G
* '''count''' - mitut plokki kasutame. Korrutades ploki suuruse plokkide arvuga saame teada, kui palju me reaalselt andmeid läbi vaatame. Näiteks bs=1M, count=10 vaatab ketta algusest arvestades läbi 10MB andmeid.


count=x mitu plokki
* '''skip''' - mitu plokki me algusest vahele jätame. Näiteks bs=1M count=10, skip=5 loeb andmed alates 5MB'st kuni 10MB'ni.


hoiatus äravahetamise kohta
* '''conv=noerror''' - noerror argument kindlustab ketta kopeerimise isegi siis, kui lähtekettal on loetamatuid sektoreid.


conv=noerror - võrdusmärgi ümber ei tohi tühikuid olla
* '''conv=notrunc''' - ei kirjuta sihtfaili üle vaid muudab lihtsalt vajaliku osa failist.


<pre>
Täpsemalt vaata siit: [http://linuxmanpages.com/man1/dd.1.php Linuxmanpages.com]
dd if=<source> of=<target> bs=<byte size>(usually some power of 2, not less than 512 bytes(ie, 512, 1024, 2048, 4096, 8192, 16384, but can be any number.) skip= seek= conv=<conversion>.
</pre>


= Lihtne kopeerimine =
= Lihtne kopeerimine =
===Operatsioonid HDD'ga===
===Operatsioonid kõvakettaga===
Kõige lihtsam näide on see, et kopeerida ühe kõvaketta sisu täpselt samasugusele teisele kettale.
Kõige lihtsam näide on see, et kopeerida ühe kõvaketta sisu täpselt samasugusele teisele kettale.
<pre>
<pre>
dd if=/dev/sda of=/dev/sdb conv=noerror
dd if=/dev/sda of=/dev/sdb
</pre>
</pre>
'''if''' on ketas mida kopeeritakse.<br>
'''if''' on ketas mida kopeeritakse (lähteketas).
'''of''' on ketas kuhu kopeeritakse.<br>
 
Noerror argument kindlustab ketta kopeerimise isegi siis, kui lähtekettal on loetamatuid sektoreid.<br>
'''of''' on ketas kuhu kopeeritakse (sihtketas).
Sihtketas võib olla suurem kui lähteketas, sellisel juhul jääb sihtketta lõpus olev ruum lihtsalt kasutamata. Uue ketta partitsioonid saab peale kasutusele võtmist parted või gparted programmiga suuremaks venitada. Kui sihtketas on väiksem kui lähteketas, siis jääb ketta lõpus olev info lihtsalt kirjutamata ja saadud koopia ei ole kasutatav. Kui on siiski vajadus kopeerida suurel kettal olev info väiksemale, siis tuleks suure ketta partitsioon eelnevalt väiksemaks teha. Eeldusel muidugi, et kettal oleva info maht seda võimaldab. Enne partitsiooni suuruse muutmist on soovitatav andmetest kuskile mujale varukoopia teha.




DD võimaldab ketta kopeerimist ka nn. image failiks. See on igapäevaseks kasutamiseks hulka kasulikum kui ühe ketta kopeerimine teisele.
Dd võimaldab kettast ka nn. tõmmisfaili tegemist. See on igapäevaseks kasutamiseks hulka kasulikum kui ühe ketta kopeerimine teisele.
<pre>
<pre>
dd if=/dev/sda of=/home/user/varukoopia.img
dd if=/dev/sda of=/home/kasutaja/varukoopia.img
</pre>
</pre>
Sellisel varukoopia tegemisel pole aga erilist mõtet, kuna tulemuseks saadav fail on väga suur. Saadava faili suurus võrdub kopeeritava ketta suurusega. Näiteks 200GB ketta image fail on 200GB suur, olgugi et suurem osa sellest ruumist võis tühi olla. Mõistlik oleks image fail kohe alguses gzip'i sisendisse suunata.
Sellisel varukoopia tegemisel pole aga erilist mõtet, kuna tulemuseks saadav fail on väga suur. Saadava faili suurus võrdub kopeeritava ketta suurusega. Näiteks 200GB ketta tõmmisfail on 200GB suur, olgugi et suurem osa sellest ruumist võis tühi olla.
Sellest ülesaamiseks oleks mõistlik tõmmisfail kohe alguses gzip pakkimisprogrammi sisendisse suunata.
<pre>
<pre>
dd if=/dev/sda | gzip > /home/user/varukoopia.img.gz
dd if=/dev/sda | gzip > /home/kasutaja/varukoopia.img.gz
</pre>
</pre>
Et saadav tõmmisfail veel väiksemaks saada, tuleks silmas pidada asjaolu, et failide kustutamisel neid päriselt kettalt ei kustutata ja info jääb binaarkujul siiski kettale alles ning dd korjab selle info sealt ka kokku. Et kogu kõvakettalt loetud info kõige efektiivsemalt kokku pakkida, oleks kasulik vaba ruum enne nullidega üle kirjutada - nullid pakkuvad hästi kokku. Vt. altpoolt - [https://wiki.itcollege.ee/index.php/Dd#Vaba_ruumi_puhastamine Vaba ruumi puhastamine].


Alati ei ole vajalik terve ketta kopeerimine vaid piisab ka mingi kindla partitsiooni kopeerimisest.
Alati ei ole vajalik terve ketta kopeerimine vaid piisab ka mingi kindla kettajao kopeerimisest.
<pre>
dd if=/dev/sda1 of=/dev/sdb1
</pre>
Kui sihtkettajagu ei eksisteeri, siis dd alustab ketta algusest ja loob selle.


==CD/DVD==
===CD/DVD===


CD/DVD tõmmise tegemiseks
CD/DVD tõmmise tegemiseks
<pre>
<pre>
dd if=/dev/cdrom of=/home/user/CD_image.iso bs=2048 conv=notrunc
dd if=/dev/cdrom of=/home/kasutaja/CD_image.iso bs=2048 conv=notrunc
</pre>
</pre>
CD sectors are 2048 bytes, so this copies sector for sector.
CD'l ja DVD'l on sektori suuruseks 2048 baiti, seega oleks seda hea kopeerida sektorite kaupa. Tekkinud tõmmist saab kasutada nagu tavalist CD/DVD seadet. Selleks tuleks iso-fail failisüsteemi ühendada
Tekkinud tõmmist saab kasutada nagu tavalist CD/DVD seadet. Selleks tuleks iso-fail failisüsteemi ühendada


<pre>
<pre>
mkdir /mnt/imageCD
mkdir /mnt/imageCD
mount -o loop /home/user/CD_image.iso /mnt/imageCD
mount -o loop /home/kasutaja/CD_image.iso /mnt/imageCD
</pre>
 
===Floppy===
 
Kogu floppy ketta sisu kopeerimine tõmmisfailiks
<pre>
dd if=/dev/fd0 of=/home/kasutaja/floppy.img bs=2x80x18b conv=notrunc
</pre>
</pre>


==Floppy==
===Muu===
floppy
hdd -> gzip,partitsioon
mbr


= Backup ja restore =
Muutmälu kopeerimist ei lähe tavaliselt küll vaja, aga demostreerimaks, et dd saab mistahes seadme lugemisega hakkama, siis panen siia ka mälu kopeerimise näite.


suuruste probleem, jupitamine
<pre>
üle võrgu: ssh & netcat
dd if=/dev/mem of=/home/kasutaja/mem.bin
</pre>


Kopeerida saab ka osa mingist andmekandjast. Näiteks kõvaketta esimesel 512 baidil asub ketta master boot record. Sellest on kasulik eraldi varukoopia teha.
Tekkinud faili vaatamiseks
<pre>
<pre>
dd if=/dev/sda of=/home/user/MBR_koopia.img bs=512 count=1
dd if=/home/kasutaja/mem.bin | hexdump -C
</pre>
</pre>


Kuna tõmmise tegemisel kirjutatakse faili kogu kõvakettal olev info. Kui tühi ruum on nullidega üle kirjutatud, siis pakitud tõmmis tuleb oluliselt väiksem, kuna nullid pakkuvad hästi kokku.
= Varundamine ja taastamine =
 
Kõige lihtsam ja kindlam variant on masin sulgeda, haakida külge olemasoleva kettaga analoogne ketas, käivitada masin live CD pealt ja siis teha lihtsalt tervest kõvakettast koopia.


Üldjuhul peaksid lähteketas ja sihtketas olema sama mahutavusega. Sihtketas võib olla suurem kui lähteketas, sellisel juhul jääb sihtketta lõpus olev ruum lihtsalt kasutamata. Uue ketta kettajaod saab peale kasutusele võtmist [http://en.wikipedia.org/wiki/GNU_Parted parted] või [http://en.wikipedia.org/wiki/GParted gparted] programmiga suuremaks venitada. Kui sihtketas on väiksem kui lähteketas, siis jääb ketta lõpus olev info lihtsalt kirjutamata ja saadud koopia ei ole kasutatav. Kui on siiski vajadus kopeerida suurel kettal olev info väiksemale, siis tuleks suure ketta kettajaod eelnevalt väiksemaks teha. Eeldusel muidugi, et kettal oleva info maht seda võimaldab. Enne kettajao suuruse muutmist on soovitatav andmetest kuskile mujale varukoopia teha. 
Töötava masina puhul võib probleemiks olla see, et arvutit ei ole võimalik varukoopia tegemise ajaks kasutusest maha võtta ja samas pole masinas endas ka ruumi varukoopia mahutamiseks. Üks variant on siin suunata dd väljund võrku, et koopia üle [https://wiki.itcollege.ee/index.php/Ssh ssh] või [http://en.wikipedia.org/wiki/Netcat netcat]'i teise masinasse salvestada.
SSH näide:
<pre>
dd if=/dev/sda1 | ssh kasutaja@192.168.0.1 "sudo dd of=/home/kasutaja/sda1.img"
</pre>
Keerulisem näide koos pakkimisega:
<pre>
dd if=/dev/sda1 bs=2048 | gzip | ssh kasutaja@192.168.0.1 "cat - | gunzip | dd of=/dev/sda1 bs=2048"
</pre>
Kopeerida saab ka osa mingist andmekandjast. Näiteks kõvaketta esimesel 512 baidil asub ketta '''master boot record''' ja kettajagude tabel. Sellest on kasulik eraldi varukoopia teha.
<pre>
<pre>
dd if=/dev/sda1 | ssh user@192.168.0.1 "sudo dd of=/home/user/sda1.img"
dd if=/dev/sda of=/home/kasutaja/MBR_koopia.img bs=512 count=1
</pre>
</pre>
Varukoopiast taastamine käib täpselt samamoodi nagu varukoopia tegemine, ainult '''if''' ja '''of''' tuleb ära vahetada.


= Kõvaketta puhastamine =
= Kõvaketta puhastamine =
==== Nullidega ülekirjutamine ====
==== Nullidega ülekirjutamine ====
Mõnikord võib tekkida vajadus andmekandja puhastamiseks kogu eelnevalt talletatud infost. Näiteks arvuti või kõvaketta müümisel, peale kasutusest mahavõttu vms. Selleks on võimalik dd-käsku kasutades ketas nullidega üle kirjutada ja muuta kogu kõvakettal olnud info mittetaastatavaks. Paranoilised isikud võivad seda isegi mitu korda teha :-) Süsteemiketta puhastamiseks tuleb arvuti live-CD pealt üles bootida.  
Mõnikord võib tekkida vajadus andmekandja puhastamiseks kogu eelnevalt talletatud infost. Näiteks arvuti või kõvaketta müümisel, peale kasutusest mahavõttu vms. Selleks on võimalik dd-käsku kasutades ketas nullidega üle kirjutada ja muuta kogu kõvakettal olnud info mittetaastatavaks. Paranoilised isikud võivad seda isegi mitu korda teha :-) Süsteemiketta puhastamiseks tuleb arvuti käivitada live CD pealt.  
<pre>
<pre>
dd if=/dev/zero of=/dev/sda
dd if=/dev/zero of=/dev/sda
</pre>
</pre>
Peale ketta puhastamist oleks hea ka kontrollida, kas ketas on ikka tõepoolest puhas.  
Peale ketta puhastamist oleks hea ka kontrollida, kas ketas on ikka tõepoolest puhas. Aja kokkuhoiu mõttes võib piirduda näiteks ketta ühe osa ülevaatamisega. Bs=1M ja count=10 argumentidega vaatame läbi andmekandja esimesed 10MB.
 
<pre>
<pre>
dd if=/dev/sda bs=1M count=10 | hexdump -C
dd if=/dev/sda bs=1M count=10 | hexdump -C
</pre>
</pre>
Aja kokkuhoiu mõttes võib piirduda näiteks ketta ühe osa ülevaatamisega. Bs=1M ja count=10 argumentidega vaatame läbi andmekandja esimesed 10MB
 
Programmi väljund juhul kui 8,6GB adndmekandja sisaldab tõepoolest ainult nulle:
<pre>
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
201f78000
16841664+0 records in
16841664+0 records out
8622931968 bytes (8.6 GB) copied, 1247.05 s, 6.9 MB/s
</pre>
 
Kõvaketta nullidega ülekirjutamine võib osutuda vajalikuks ka siis, kui mõni trooja või viirus on ennast paigutanud sellisesse kõvaketta osasse, mida pole võimalik operatsioonisüsteemi vahenditega hallata.


====Vaba ruumi puhastamine====
====Vaba ruumi puhastamine====
Teine variant on see, et kogu vaba ruum suvaliste andmetega üle kirjutada. Kogu senine info jääb kettale alles. Vaba ruum kirjutatakse suvaliste andmetega üle, nii et kettalt juba kustutatud asjad pole enam kättesaadavad.
Teine variant on see, et kogu '''vaba ruum''' suvaliste andmetega üle kirjutada. Kogu senine info jääb kettale alles. Vaba ruum kirjutatakse suvaliste andmetega üle, nii et kettalt juba kustutatud asjad pole enam kättesaadavad. Dev/urandom asemel võib kasutada ka /dev/zero. Viimase eeliseks on see, et kui hiljem kettast tõmmisfail teha ja kokku pakkida, siis nullid pakkuvad paremini kokku kui suvalised andmed.
<pre>
<pre>
dd if=/dev/urandom of=/home/user/suurfail.tmp
dd if=/dev/urandom of=/home/kasutaja/suurfail.tmp
</pre>
</pre>
Selle käsuga hakatakse genereerima suvalistest andmetest faili ja see protsess kestab niikaua kuni kettal veel vaba ruumi on. Vaba ruumi lõppemisel protsess katkestatakse. Peale seda tuleb kindlasti see fail ära kustutada, et kettale taas ruumi tekiks.
Selle käsuga hakatakse genereerima suvalistest andmetest faili ja see protsess kestab niikaua kuni kettal veel vaba ruumi on. Vaba ruumi lõppemisel protsess katkestatakse. Peale seda tuleb kindlasti see fail ära kustutada, et kettale taas ruumi tekiks.
<pre>
<pre>
rm /home/user/suurfail.tmp
rm /home/kasutaja/suurfail.tmp
</pre>
 
= Täiendavad võimalused =
 
* andmekandjate kiiruste testimine
* ketta noorendamine
* dd ja hexdump'ga asjade sisse vaatamine
* erinevate failide genereerimine
* võrgu kiiruse test
<pre>
ftp kasutaja@server
put "|dd if=/dev/zero bs=32k count=10000" /dev/null
</pre>
</pre>


= hdd analüüs/testimine =
===Täiendavat lugemist===
 
http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/
 
http://www.forensicfocus.com/linux-dd-basics
 
http://en.wikipedia.org/wiki/Dd_(Unix)
 
http://linuxmanpages.com/man1/dd.1.php
 
=Märkused=
 
Dd ei näita enne töö lõpetamist ekraanil mingit väljundit. Programm nimega dcfldd teeb sama töö nagu dd, ainult näitab ka jooksvalt progressi.


kiirused
Kokkuvõtteks saab dd käsuga väga palju kõikvõimalikke operatsioone sooritada. Samas on iga kindla töö jaoks olemas paremad ja täiuslikumad tööriistad. Dd on nagu korralik multifunktsionaalne taskunuga :-)
noorendamine
hexdump


=märkused=
=Autor=
Peep Binsol


DD ei näita enne töö lõpetamist ekraanil mingit väljundit
AK31
asjad võtavad palju aega


[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]

Latest revision as of 10:50, 9 January 2011

Sissejuhatus

dd - disk duplicate programmi kasutatakse madala taseme kopeerimiseks. Ta ei kopeeri mitte faile, vaid konkreetseid baite mingilt andmekandjalt. Dd ei hooli ka sellest, millised kettajaod on kettal. Sellega saab kopeerida mistahes kettajagude ja failisüsteemidega kettaid.

Mõned märkused dd kasutamiseks:

  • dd on väga levinud programm ja ta on vaikimisi olemas enamustes linuxi süsteemides.
  • dd kasutamiseks pead olema root õigustega.
  • enne kasutamist veendu kindlasti, et sisend ja väljund said õigesti märgitud, muidu võid oma kettal olevad andmed väga kergesti rikkuda.
  • dd ei anna töötamisel mingit väljundit ja samas võtavad operatsioonid suuremahuliste ketastega palju aega. Katsetamiseks on head väiksemad andmekandjad nagu näiteks mälupulgad.

Süntaks

Dd juured ulatuvad tagasi ammustesse IBM JCL aegadesse ja tema süntaks on jäänuk neist iidsetest aegadest. Seega tuleb arvestada, et see on veidi erivev tavaliste linuxi käskude süntaksist.

dd if=<lähteketas> of=<sihtketas>

dd if=/dev/sda of=/dev/sdb

dd if=/dev/sda5 of=/dev/sdb5 bs=4096 conv=noerror,notrunc

NB! võrdusmärkide ümber ei tohi olla tühikuid.

Mõned olulisemad võtmed:

  • bs - ploki suurus. Kui ploki suurus jäetakse määramata, siis kasutatakse vaikimisi suurust 512 baiti. Ploki suurusena kasutatakse üldiselt kahe astmeid (512, 1024, 2048, 4096 jne), aga ei pea tingimata. Võib ka märkida kujul 32K, 1M jne. Suuruse valikul võiks arvestada sellega, et ploki suurus ei oleks suurem kui masina vaba mälu hulk.
  • count - mitut plokki kasutame. Korrutades ploki suuruse plokkide arvuga saame teada, kui palju me reaalselt andmeid läbi vaatame. Näiteks bs=1M, count=10 vaatab ketta algusest arvestades läbi 10MB andmeid.
  • skip - mitu plokki me algusest vahele jätame. Näiteks bs=1M count=10, skip=5 loeb andmed alates 5MB'st kuni 10MB'ni.
  • conv=noerror - noerror argument kindlustab ketta kopeerimise isegi siis, kui lähtekettal on loetamatuid sektoreid.
  • conv=notrunc - ei kirjuta sihtfaili üle vaid muudab lihtsalt vajaliku osa failist.

Täpsemalt vaata siit: Linuxmanpages.com

Lihtne kopeerimine

Operatsioonid kõvakettaga

Kõige lihtsam näide on see, et kopeerida ühe kõvaketta sisu täpselt samasugusele teisele kettale.

dd if=/dev/sda of=/dev/sdb

if on ketas mida kopeeritakse (lähteketas).

of on ketas kuhu kopeeritakse (sihtketas).


Dd võimaldab kettast ka nn. tõmmisfaili tegemist. See on igapäevaseks kasutamiseks hulka kasulikum kui ühe ketta kopeerimine teisele.

dd if=/dev/sda of=/home/kasutaja/varukoopia.img

Sellisel varukoopia tegemisel pole aga erilist mõtet, kuna tulemuseks saadav fail on väga suur. Saadava faili suurus võrdub kopeeritava ketta suurusega. Näiteks 200GB ketta tõmmisfail on 200GB suur, olgugi et suurem osa sellest ruumist võis tühi olla. Sellest ülesaamiseks oleks mõistlik tõmmisfail kohe alguses gzip pakkimisprogrammi sisendisse suunata.

dd if=/dev/sda | gzip > /home/kasutaja/varukoopia.img.gz

Et saadav tõmmisfail veel väiksemaks saada, tuleks silmas pidada asjaolu, et failide kustutamisel neid päriselt kettalt ei kustutata ja info jääb binaarkujul siiski kettale alles ning dd korjab selle info sealt ka kokku. Et kogu kõvakettalt loetud info kõige efektiivsemalt kokku pakkida, oleks kasulik vaba ruum enne nullidega üle kirjutada - nullid pakkuvad hästi kokku. Vt. altpoolt - Vaba ruumi puhastamine.


Alati ei ole vajalik terve ketta kopeerimine vaid piisab ka mingi kindla kettajao kopeerimisest.

dd if=/dev/sda1 of=/dev/sdb1

Kui sihtkettajagu ei eksisteeri, siis dd alustab ketta algusest ja loob selle.

CD/DVD

CD/DVD tõmmise tegemiseks

dd if=/dev/cdrom of=/home/kasutaja/CD_image.iso bs=2048 conv=notrunc

CD'l ja DVD'l on sektori suuruseks 2048 baiti, seega oleks seda hea kopeerida sektorite kaupa. Tekkinud tõmmist saab kasutada nagu tavalist CD/DVD seadet. Selleks tuleks iso-fail failisüsteemi ühendada

mkdir /mnt/imageCD
mount -o loop /home/kasutaja/CD_image.iso /mnt/imageCD

Floppy

Kogu floppy ketta sisu kopeerimine tõmmisfailiks

dd if=/dev/fd0 of=/home/kasutaja/floppy.img bs=2x80x18b conv=notrunc

Muu

Muutmälu kopeerimist ei lähe tavaliselt küll vaja, aga demostreerimaks, et dd saab mistahes seadme lugemisega hakkama, siis panen siia ka mälu kopeerimise näite.

dd if=/dev/mem of=/home/kasutaja/mem.bin

Tekkinud faili vaatamiseks

dd if=/home/kasutaja/mem.bin | hexdump -C

Varundamine ja taastamine

Kõige lihtsam ja kindlam variant on masin sulgeda, haakida külge olemasoleva kettaga analoogne ketas, käivitada masin live CD pealt ja siis teha lihtsalt tervest kõvakettast koopia.

Üldjuhul peaksid lähteketas ja sihtketas olema sama mahutavusega. Sihtketas võib olla suurem kui lähteketas, sellisel juhul jääb sihtketta lõpus olev ruum lihtsalt kasutamata. Uue ketta kettajaod saab peale kasutusele võtmist parted või gparted programmiga suuremaks venitada. Kui sihtketas on väiksem kui lähteketas, siis jääb ketta lõpus olev info lihtsalt kirjutamata ja saadud koopia ei ole kasutatav. Kui on siiski vajadus kopeerida suurel kettal olev info väiksemale, siis tuleks suure ketta kettajaod eelnevalt väiksemaks teha. Eeldusel muidugi, et kettal oleva info maht seda võimaldab. Enne kettajao suuruse muutmist on soovitatav andmetest kuskile mujale varukoopia teha.


Töötava masina puhul võib probleemiks olla see, et arvutit ei ole võimalik varukoopia tegemise ajaks kasutusest maha võtta ja samas pole masinas endas ka ruumi varukoopia mahutamiseks. Üks variant on siin suunata dd väljund võrku, et koopia üle ssh või netcat'i teise masinasse salvestada.

SSH näide:

dd if=/dev/sda1 | ssh kasutaja@192.168.0.1 "sudo dd of=/home/kasutaja/sda1.img"

Keerulisem näide koos pakkimisega:

dd if=/dev/sda1 bs=2048 | gzip | ssh kasutaja@192.168.0.1 "cat - | gunzip | dd of=/dev/sda1 bs=2048"

Kopeerida saab ka osa mingist andmekandjast. Näiteks kõvaketta esimesel 512 baidil asub ketta master boot record ja kettajagude tabel. Sellest on kasulik eraldi varukoopia teha.

dd if=/dev/sda of=/home/kasutaja/MBR_koopia.img bs=512 count=1 

Varukoopiast taastamine käib täpselt samamoodi nagu varukoopia tegemine, ainult if ja of tuleb ära vahetada.

Kõvaketta puhastamine

Nullidega ülekirjutamine

Mõnikord võib tekkida vajadus andmekandja puhastamiseks kogu eelnevalt talletatud infost. Näiteks arvuti või kõvaketta müümisel, peale kasutusest mahavõttu vms. Selleks on võimalik dd-käsku kasutades ketas nullidega üle kirjutada ja muuta kogu kõvakettal olnud info mittetaastatavaks. Paranoilised isikud võivad seda isegi mitu korda teha :-) Süsteemiketta puhastamiseks tuleb arvuti käivitada live CD pealt.

dd if=/dev/zero of=/dev/sda

Peale ketta puhastamist oleks hea ka kontrollida, kas ketas on ikka tõepoolest puhas. Aja kokkuhoiu mõttes võib piirduda näiteks ketta ühe osa ülevaatamisega. Bs=1M ja count=10 argumentidega vaatame läbi andmekandja esimesed 10MB.

dd if=/dev/sda bs=1M count=10 | hexdump -C

Programmi väljund juhul kui 8,6GB adndmekandja sisaldab tõepoolest ainult nulle:

 00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 *
 201f78000
 16841664+0 records in
 16841664+0 records out
 8622931968 bytes (8.6 GB) copied, 1247.05 s, 6.9 MB/s

Kõvaketta nullidega ülekirjutamine võib osutuda vajalikuks ka siis, kui mõni trooja või viirus on ennast paigutanud sellisesse kõvaketta osasse, mida pole võimalik operatsioonisüsteemi vahenditega hallata.

Vaba ruumi puhastamine

Teine variant on see, et kogu vaba ruum suvaliste andmetega üle kirjutada. Kogu senine info jääb kettale alles. Vaba ruum kirjutatakse suvaliste andmetega üle, nii et kettalt juba kustutatud asjad pole enam kättesaadavad. Dev/urandom asemel võib kasutada ka /dev/zero. Viimase eeliseks on see, et kui hiljem kettast tõmmisfail teha ja kokku pakkida, siis nullid pakkuvad paremini kokku kui suvalised andmed.

dd if=/dev/urandom of=/home/kasutaja/suurfail.tmp

Selle käsuga hakatakse genereerima suvalistest andmetest faili ja see protsess kestab niikaua kuni kettal veel vaba ruumi on. Vaba ruumi lõppemisel protsess katkestatakse. Peale seda tuleb kindlasti see fail ära kustutada, et kettale taas ruumi tekiks.

rm /home/kasutaja/suurfail.tmp

Täiendavad võimalused

  • andmekandjate kiiruste testimine
  • ketta noorendamine
  • dd ja hexdump'ga asjade sisse vaatamine
  • erinevate failide genereerimine
  • võrgu kiiruse test
ftp kasutaja@server
put "|dd if=/dev/zero bs=32k count=10000" /dev/null

Täiendavat lugemist

http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/

http://www.forensicfocus.com/linux-dd-basics

http://en.wikipedia.org/wiki/Dd_(Unix)

http://linuxmanpages.com/man1/dd.1.php

Märkused

Dd ei näita enne töö lõpetamist ekraanil mingit väljundit. Programm nimega dcfldd teeb sama töö nagu dd, ainult näitab ka jooksvalt progressi.

Kokkuvõtteks saab dd käsuga väga palju kõikvõimalikke operatsioone sooritada. Samas on iga kindla töö jaoks olemas paremad ja täiuslikumad tööriistad. Dd on nagu korralik multifunktsionaalne taskunuga :-)

Autor

Peep Binsol

AK31