Linux dd-kommandot är ett av de mest kraftfulla verktyg som kan användas på olika sätt. Detta verktyg används främst för att kopiera och konvertera data, därför står det för data duplicering. Detta verktyg kan användas för:
- säkerhetskopiera och återställa en hel hårddisk eller en partition.
- skapa virtuella filsystem och säkerhetskopiera bilder av CD eller DVD-skivor som kallas ISO-filer
- kopiera regioner av raw-enhetsfiler som säkerhetskopiera MBR (master boot record).
- konvertera dataformat som ASCII till EBCDIC.,
- konvertera gemener till versaler och vice versa.
endast superanvändaren kan utföra detta kommando. Du bör vara mycket försiktig när du använder detta kommando som felaktig användning kan orsaka enorma dataförlust. Så, vissa människor anser att detta verktyg som data destroyer.
Syntax för DD-kommandot
den grundläggande användningen av DD-kommandot är ganska lätt eftersom det bara tar två argument: if= för att ange indatafilen och of= för att ange utdatafilen. Argumenten för dessa alternativ kan vara antingen filer eller blockenheter., Jag skulle dock inte rekommendera att använda dd för att kopiera filer eftersom cp gör det på ett mycket enklare sätt. Du kan dock använda den för att klona en hårddisk. Syntaxen är
dd if=<source file name> of=<target file name>
vi lär oss olika alternativ när vi går igenom dd-kommandoexempel.
säkerhetskopiera och återställa en hel disk eller en partition
det är möjligt att spara alla data från en hel disk/partition till en annan disk / partition. Inte en enkel kopia som CP kommando men ett block storlek kopia.
en., Säkerhetskopiera hela disken till disken
Du kan kopiera alla data (hela disken) från disken /dev/sda
till /dev/sdb
. dd vet ingenting om filsystemet eller partitionerna; det kommer bara att kopiera allt från /dev/sda
till /dev/sdb
. Du måste ange blockstorleken som ska kopieras vid tidpunkten medbs
– alternativet. Så, detta kommer att klona disken med samma data på samma partition.
detta fungerar endast om den andra enheten är lika stor som eller större än den första., Annars får du trunkerade och värdelösa partitioner på den andra. Här, om står för input file, av står för output file och bs står för blockstorleken (antal byte som ska läsas/skriva åt gången). Se till att du använder blockstorlekar i multiplar av 1024 byte som är lika med 1KB. Om du inte anger blockstorlek använder dd en standardblockstorlek på 512 byte. Värdetconv
noerror tillåter verktyget att fortsätta kopiera data även om det stöter på några fel. Synkroniseringsalternativet tillåter att använda synkroniserad I / O.
b., Skapa dd-skivavbild (filbild)
Du kan skapa en bild av en disk eller en filbild. Säkerhetskopiera en disk till en bild kommer att vara snabbare än att kopiera exakta data. Diskbilden gör också restaureringen mycket enklare.
# dd if=/dev/sda of=/tmp/sdadisk.img
Du kan lagra utdatafilen där du vill, men du måste ge ett filnamn som slutar med.img
– tillägget enligt ovan. Istället för /tmp/sdadisk.img
kan du lagra det till exempel på/sdadisk.img
om du vill.
C., Skapa en komprimerad skivavbild
eftersom dd skapar det exakta innehållet på en hel disk betyder det att det tar för mycket storlek. Du kan bestämma dig för att komprimera skivavbilden med kommandot nedan
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
röret | operatören gör utgången på det vänstra kommandot blir ingången på det högra kommandot. Alternativet-c
skriver ut på standardutmatning och håller originalfilerna oförändrade.
D. säkerhetskopiera en partition eller klona en partition till en annan
istället för en hel disk kan du bara säkerhetskopiera en enkel partition., Du behöver bara ange partitionsnamnet i indatafilen enligt nedan
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
detta kommer att synkronisera partitionen /dev/sda1
till /dev/sdb1
. Du måste kontrollera att storleken på /dev/sdb1
ska vara större än /dev/sda1
. Eller så kan du skapa en partitionsbild enligt nedan
# dd if=/dev/sda1 of=/tmp/sda1.img
e. återställa en disk eller en partitionsbild
spara en disk eller en partition hjälper till att återställa alla data, om det finns några problem med vår ursprungliga enhet., För att återställa måste du invertera inmatningsfilen med utmatningsfilen som anges under säkerhetskopiering enligt nedan.
# dd if=/tmp/sdadisk.img of=/dev/sda
Du kommer att hämta data som fanns före säkerhetskopieringen och inte efter operationen
e. återställa komprimerad bild
Du måste först ange den komprimerade filen och utdatafilen som är disken komprimerad innan.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
alternativet-D här är att packa upp. Notera utdatafilen. Du kan montera den återställda disken för att se innehållet., Observera att du kommer att lägga till data efter den senaste komprimeringen backup operation.
skapa virtuella filsystem/Backup bilder av CD eller DVD-skivor som iso-filer
Du kan behöva skapa ett virtuellt filsystem på Linux av vissa skäl som att skapa en virtuell maskin på din Linux-värd. Du kan också behöva skapa en ISO-säkerhetskopia av en CD eller DVD
A. skapa ett virtuellt filsystem
ett virtuellt filsystem är ett filsystem som finns i en fil, som i sin tur finns på en fysisk disk. Du kan behöva det för att skapa till exempel en extra swap eller loop-enhet eller en virtuell maskin., Vi behöver /dev/zero
som är en fil som används för att skapa en fil utan data men med önskad storlek (en fil med alla nollor). Med andra ord kommer detta att skapa en datafil med alla nollor i filen som ger storleken till en fil.
# dd if=/dev/zero of=/file bs=1024K count=500500+0 records in500+0 records out524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
alternativetcount
avser antalet inmatningsblock som ska kopieras. Kombinerat med blockstorlek värde, anger den totala storleken att kopiera., Till exempel bs=1024k
och count=500
ge en storlek=1024K*500 =524288000 byte =524MB
låt oss nu kontrollera storleken på vår fil
# ls -lh /file-rw-r--r-- 1 root root 500M May 17 18:57 /file
Du kan se att vi har vårt virtuella filsystem Skapat med den angivna storleken. Du kan nu använda den för att skapa loop-enhet eller en virtuell disk eller något annat.
b. ändra de första 512 byte av en fil med null-data
om du anger en befintlig utdatafil under operationen kommer du att förlora dess data. Av vissa skäl kan du behöva byta ut en blockstorlek på utdatafilen.,
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
alternativetnotrunc
avser att inte trunkera filen, ersätt bara de första 512 byte, om det finns. Annars får du en 512 byte fil
C. skapa en säkerhetskopia iso bild av CD eller DVD
Du kanske undrar varför inte bara kopiera innehållet på din CD till en katalog. Hur skulle du hantera startsektorn på en CD? Du kan inte hitta det som en fil på enheten eftersom det bara är den första sektorn. Eftersom dd kopierar sektor för sektor, å andra sidan, kommer det att kopiera den informationen också.,
# dd if=/dev/cdrom of=/mycd.iso
Du måste veta att du måste använda alternativet -o loop
, vilket gör att du kan montera en fil som vilken vanlig enhet som helst. Så, för att montera/mycd.iso
på katalogen/mnt/cd
, gör som nedan
# mount -o loop /mycd.iso /mnt/cd
d) skapa en startbar USB-enhet
låt oss anta att vi har hämtat centos iso-bild här till den här katalogen ”~/Downloads/”.
om=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso-indatafilen finns i sökvägen ’ ~ / Downloads / CentOS-8-x86_64-1905-dvd1.,iso’
av = / dev / sdb-utdatafilen finns i sökvägen ’/ dev / sdb ’
bs=1M-Läs från ’ ~ / Downloads / CentOS-8-x86_64-1905-dvd1.iso ”och skriv till” /dev / sdb ” 1 megabyte data åt gången.
# dd if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso of= / dev / sdb bs=1M
säkerhetskopiera och återställa MBR
GRUB bootloader lagras oftast i MBR på den startbara enheten. MBR utgör de första 512 bytesna på disken, vilket tillåter upp till 466 byte av lagring för startladdaren. Det extra utrymmet kommer att användas för att lagra partitionstabellen för den enheten., Om MBR blir skadad kommer vi inte att kunna starta upp i Linux.
a. säkerhetskopiera MBR
eftersom MBR utgör diskens första 512 byte behöver vi bara kopiera blockstorleken
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
medcount=1
ochbs=512
kopieras endast 512 byte som motsvarar storleken på vår MBR. – herr talman!,
Du kan visa den sparade MBR med od-kommandot som dumpar filer i oktala och andra format enligt nedan
# od -xa /tmp/sdambr.img0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
alternativet väljer namngivna tecken och -x
väljer hexadecimala 2-byte enheter
b. säkerhetskopiera startdata MBR exklusive partitionen tabell
MBR 512 byte data finns på den första sektorn av hårddisken. Den består av 446 byte bootstrap, 64 byte partitionstabell och 2 byte signatur., Det innebär att vi kan utesluta partitionstabellen och byte-signaturen medan vi säkerhetskopierar MBR med att bara spara en blockstorlek som är lika med bootstrap-storleken.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
C. återställa MBR från MBR bild
Du kan återställa MBR som visas på tidigare kommandon med
# dd if=/tmp/sdambr.img of=/dev/sda
konvertera dataformat
om en inmatningsfil använder en teckenuppsättning som inte är den ursprungliga teckenuppsättningen på värddatorn måste importoperatören utföra en konvertering., Om ASCII till exempel är det ursprungliga formatet för strängar på värddatorn, men indatafilen representerar strängar med EBCDIC, måste du konvertera EBCDIC till ASCII och vice versa.
en. Konvertera data format av en fil från EBCDIC till ASCII –
Om det är en ebcdic-filen med dig, mestadels hämtade från stordatorsystem, då, du skulle vilja konvertera dem till ASCII för att göra ändringar med hjälp av text-redigerare på UNIX-servrar
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
conv
värde som parametern nu är ascii eftersom vi konvertera från EBCDIC till ASCII –
b., Konvertera dataformatet för en fil från ASCII till EBCDIC
Efter att ha ändrat ASCII-versionen och en gång gjort, kan du konvertera den tillbaka till EBCDIC som ska användas av din ansökan.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
värdeparameternconv
är nu EBCDIC eftersom vi konverterar från ASCII till EBCDIC. Om du bara ersätter ett visst antal byte med ett motsvarande antal byte med olika tecken, skulle konverteringen vara smidig och applikationsläsning av filen borde inte ha några problem.,
konvertera fall av en fil
dd kommando kan också användas för en fantastisk sak. Det kan konvertera all text (alfabet) i en fil till övre eller nedre fallet och vice versa. Till exempel nedan kommer vi att ha en fil för testen.
# cat file10test dd convert
a. konvertera en fil till versaler
eftersom vår textfil exempel är på gemener, kommer vi att konvertera den till versaler
# dd if=~/file10 of=~/file20 conv=ucase
kommandot kommer att skapa den nya filen som anges. Se till att alternativetconv
tar ucase-värde., Låt oss kontrollera resultatet
# cat file20 TEST DD CONVERT
b. konvertera en fil till gemener
nu kommer vi att göra omvänd operation som kommer att konvertera till gemener
# dd if=~/file20 of=~/file30 conv=lcase
se till att vi använder lcaseconv
möjlighet att konvertera från versaler till gemener.
# cat file30 test dd convert
kommandot dd konverterar inte filnamnen, bara dess innehåll.
slutsats
dd-kommandot, även om det inte är tekniskt ett arkiveringskommando, är liknande på vissa sätt eftersom det kan kopiera en hel partition eller disk till en fil och vice versa.