Dd: Difference between revisions
Line 54: | Line 54: | ||
dd if=/dev/sda | gzip > /home/kasutaja/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 | 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. | ||
Revision as of 10:17, 7 January 2011
Teema võttis: Peep Binsol, AK31
Teema on pooleli.
Sissejuhatus
DD - disk duplicate programmi DD Kasutatakse madala taseme kopeerimiseks. Ta ei kopeeri mitte faile, vaid konkreetseid baite mingilt amdmekandjalt. 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ästude sõntaksist. 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=x mitu plokki
hoiatus äravahetamise kohta
conv=noerror - võrdusmärgi ümber ei tohi tühikuid olla
Noerror argument kindlustab ketta kopeerimise isegi siis, kui lähtekettal on loetamatuid sektoreid.
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>.
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).
Ü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.
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 partitsiooni kopeerimisest.
dd if=/dev/sda1 of=/dev/sdb1
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
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
Backup ja restore
Kõige lihtsam ja kindlam variant on live CD pealt käivitamine
Töötava masina puhul võib probleemiks olla see, et arvutit ei ole võimalik varukoopia tegemise ajaks 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.
dd if=/dev/sda1 | ssh user@192.168.0.1 "sudo dd of=/home/user/sda1.img"
dd if=/dev/hda bs=2048 | gzip | ssh user@host "cat - | gunzip | dd of=/dev/hda bs=2048"
suuruste probleem, jupitamine
üle võrgu: ssh & netcat
Kopeerida saab ka osa mingist andmekandjast. Näiteks kõvaketta esimesel 512 baidil asub ketta master boot record. Sellest on kasulik eraldi varukoopia teha.
dd if=/dev/sda of=/home/user/MBR_koopia.img bs=512 count=1
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 live-CD pealt üles bootida.
dd if=/dev/zero of=/dev/sda
Peale ketta puhastamist oleks hea ka kontrollida, kas ketas on ikka tõepoolest puhas.
dd if=/dev/sda bs=1M count=10 | hexdump -C
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
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/user/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/user/suurfail.tmp
hdd analüüs/testimine
kiirused noorendamine hexdump
võrgu test
ftp kasutaja@server put "|dd if=/dev/zero bs=32k count=10000" /dev/null
märkused
DD ei näita enne töö lõpetamist ekraanil mingit väljundit -> dcfldd aitab asjad võtavad palju aega