Het Linux dd commando is een van de krachtigste hulpprogramma ‘ s die op verschillende manieren gebruikt kunnen worden. Deze tool wordt voornamelijk gebruikt voor het kopiëren en converteren van gegevens, vandaar dat het staat voor data duplicator. Deze tool kan worden gebruikt voor:
- back-uppen en herstellen van een hele harde schijf of een partitie.
- virtueel bestandssysteem aanmaken en een back-up maken van images van CD of DVD ’s genaamd ISO-bestanden
- regio’ s van raw-apparaatbestanden kopiëren, zoals een back-up maken van MBR (master boot record).
- converteren van data formaten zoals ASCII naar EBCDIC.,
- kleine letters omzetten naar hoofdletters en vice versa.
alleen de superuser kan dit commando uitvoeren. Je moet heel voorzichtig zijn tijdens het gebruik van deze opdracht als onjuist gebruik kan enorme verlies van gegevens veroorzaken. Zo, sommige mensen beschouwen deze tool als data destroyer.
syntaxis van dd Commando
het basisgebruik van het dd commando is vrij eenvoudig omdat er slechts twee argumenten voor nodig zijn: if= om het invoerbestand op te geven en of= om het uitvoerbestand op te geven. De argumenten voor deze opties kunnen bestanden of blok apparaten., Ik zou echter niet aanraden om dd te gebruiken om bestanden te kopiëren, omdat cp dat op een veel eenvoudiger manier doet. U kunt het echter gebruiken om een harde schijf te klonen. De syntaxis is
dd if=<source file name> of=<target file name>
We zullen verschillende opties leren terwijl we door dd Commando voorbeelden gaan.
back-up en herstel van een volledige schijf of partitie
Het is mogelijk om alle gegevens van een volledige schijf/partitie op te slaan naar een andere schijf/partitie. Niet een eenvoudige kopie als CP Commando maar een blokgrootte kopie.
a., Back-up van hele schijf naar schijf
u kunt alle gegevens (hele schijf) van de schijf kopiëren /dev/sda
naar /dev/sdb
. dd weet niets over het bestandssysteem of partities; het zal gewoon alles kopiëren van /dev/sda
naar /dev/sdb
. U moet de blokgrootte aangeven die moet worden gekopieerd met bs
optie. Dus, dit zal de schijf klonen met dezelfde gegevens op dezelfde partitie.
Dit werkt alleen als het tweede apparaat zo groot of groter is dan het eerste., Anders krijg je afgeknotte en waardeloze partities op de tweede. Hier, als staat voor input file, van staat voor output file en bs staat voor de blokgrootte (aantal bytes te lezen/schrijven op een moment). Zorg ervoor dat je blokgroottes gebruikt in veelvouden van 1024 bytes wat gelijk is aan 1KB. Als u geen blokgrootte opgeeft, gebruikt dd een standaard blokgrootte van 512 bytes. Deconv
waardeparameter noerror staat het gereedschap toe om door te gaan met het kopiëren van de gegevens, ook al stuit het op fouten. De sync optie maakt het mogelijk om gesynchroniseerde I / O.
b te gebruiken., Dd disk image (file image)
u kunt een image van een schijf of een image van een bestand maken. Een back-up van een schijf naar een image zal sneller zijn dan het kopiëren van de exacte gegevens. Ook, disk image maakt de restauratie veel gemakkelijker.
# dd if=/dev/sda of=/tmp/sdadisk.img
u kunt het uitvoerbestand opslaan waar u wilt, maar u moet een bestandsnaam opgeven die eindigt met .img
extensie zoals hierboven. In plaats van /tmp/sdadisk.img
, kunt u het bijvoorbeeld opslaan op /sdadisk.img
Als u dat wilt.
c., Het maken van een gecomprimeerde schijfimage
omdat dd de exacte inhoud van een hele schijf maakt, betekent dit dat het te veel Grootte neemt. U kunt besluiten om de disk image te comprimeren met het onderstaande commando
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
De pipe | operator maakt de uitvoer van het linker commando de invoer van het rechter Commando. De -c
optie schrijft uitvoer op standaarduitvoer en houdt originele bestanden ongewijzigd.
d. reservekopie maken van een partitie of klonen van een partitie naar een andere
in plaats van een hele schijf, kunt u alleen een eenvoudige partitie back-uppen., U hoeft alleen de partitienaam in het invoerbestand aan te geven zoals hieronder
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Dit synchroniseert de partitie /dev/sda1
naar /dev/sdb1
. U moet controleren of de grootte van /dev/sdb1
groter moet zijn dan /dev/sda1
. Of u kunt een partitie image aanmaken zoals hieronder
# dd if=/dev/sda1 of=/tmp/sda1.img
e. het herstellen van een schijf of een partitie image
een schijf of een partitie opslaan helpt om alle gegevens te herstellen, als er een probleem is met onze originele schijf., Om te herstellen, moet u het invoerbestand omkeren met het uitvoerbestand aangegeven tijdens back-upbewerking zoals hieronder.
# dd if=/tmp/sdadisk.img of=/dev/sda
u zult gegevens ophalen die aanwezig waren vóór de back-upoperatie en niet na de operatie
e. het herstellen van gecomprimeerde afbeelding
u moet eerst het gecomprimeerde bestand en het uitvoerbestand aangeven dat de eerder gecomprimeerde schijf is.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
de-d optie hier is uitpakken. Let op het uitvoerbestand. U kunt de herstelde schijf aankoppelen om de inhoud te zien., Merk op dat u gegevens toegevoegd na de laatste compressie back-up operatie.
virtueel bestandssysteem maken/back-up images van CD of DVD ‘ s maken als iso-bestanden
u kunt een virtueel bestandssysteem op Linux maken om een aantal redenen, zoals het maken van een virtuele machine op uw Linux host. U kunt ook een back-up iso-image van een CD of DVD maken
a. een virtueel bestandssysteem aanmaken
een virtueel bestandssysteem is een bestandssysteem dat bestaat in een bestand, dat op zijn beurt bestaat op een fysieke schijf. U kunt het nodig hebben om bijvoorbeeld een extra swap-of loop-apparaat of een virtuele machine te maken., We hebben /dev/zero
nodig, dit is een bestand dat gebruikt wordt om een bestand aan te maken zonder gegevens maar met de vereiste grootte (een bestand met alle nul ‘ s). Met andere woorden, dit zal een gegevensbestand maken met alle nullen in het bestand die de grootte van een bestand zal geven.
# 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
de optie count
verwijst naar het aantal invoerblokken dat gekopieerd moet worden. In combinatie met de waarde van de blokgrootte geeft het de totale grootte aan die moet worden gekopieerd., Bijvoorbeeld bs=1024k
en count=500
geef een grootte=1024K*500 =524288000 bytes =524MB
nu controleren we de grootte van ons bestand
# ls -lh /file-rw-r--r-- 1 root root 500M May 17 18:57 /file
u kunt zien dat we ons virtuele bestandssysteem hebben aangemaakt met de aangegeven grootte. U kunt het nu gebruiken om loop-apparaat of een virtuele schijf of iets anders te maken.
b. Wijzig de eerste 512 bytes van een bestand met null data
Als u tijdens de bewerking een bestaand uitvoerbestand aangeeft, verliest u de data. Om een aantal redenen kan het nodig zijn om een blokgrootte van het uitvoerbestand te vervangen.,
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
de optie notrunc
verwijst naar het bestand niet afkappen, alleen de eerste 512 bytes vervangen, als het bestaat. Anders krijgt u een 512 byte bestand
c. het maken van een back-up iso image van CD of DVD
u kunt zich afvragen waarom niet gewoon kopiëren van de inhoud van uw CD naar een map. Hoe zou je omgaan met de boot sector van een CD? Je kunt dat niet vinden als een bestand op het apparaat, want het is gewoon de eerste sector. Omdat dd sector voor sector kopieert, zal zij die informatie ook kopiëren.,
# dd if=/dev/cdrom of=/mycd.iso
u moet weten dat u de optie -o loop
moet gebruiken, waarmee u een bestand kunt mounten zoals elk normaal apparaat. Dus, om /mycd.iso
aan te koppelen op de /mnt/cd
map, doe zoals hieronder
# mount -o loop /mycd.iso /mnt/cd
d) Maak een opstartbare USB Drive
laten we aannemen dat we centos iso image hier naar deze map “~/Downloads/”hebben gedownload.
if = ~ / Downloads / CentOS-8-x86_64-1905-dvd1.iso-invoerbestand bevindt zich in het pad ‘~/Downloads/CentOS-8-x86_64-1905-dvd1.,iso ‘
of = /dev/sdb – uitvoerbestand bevindt zich in het pad ‘/dev/sdb’
bs=1M – Read from ‘~ / Downloads / CentOS-8-x86_64-1905-dvd1.iso ‘en schrijf naar’ /dev/sdb ‘ 1 Megabytes aan data tegelijk.
# dd if = ~ / Downloads / CentOS-8-x86_64-1905-dvd1.iso of = /dev/sdb bs=1M
back-up en herstel van MBR
de GRUB bootloader wordt meestal opgeslagen in de MBR van het opstartbare station. MBR maakt de eerste 512 bytes van de schijf, die tot 466 bytes van opslag voor bootloader toestaan. De extra ruimte zal worden gebruikt om de partitietabel voor dat Station op te slaan., Als MBR beschadigd raakt, zullen we niet in staat zijn om op te starten in Linux.
A. Back-up maken van MBR
omdat de MBR de eerste 512 bytes van de schijf bevat, hoeven we alleen die blokgrootte
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
te kopiëren met de count=1
en bs=512
, alleen 512 bytes zullen worden gekopieerd die overeenkomen met de grootte van onze MBR.,
U kunt de weergave van de opgeslagen MBR met de od-opdracht die bestanden in octale en andere formaten zoals hieronder
# 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
optie selecteert met de naam tekens en -x
selecteert hexadecimale 2-byte-eenheden
b. Een back-up van de boot gegevens van de MBR met uitzondering van de partitie tabel
De MBR 512 bytes data bevindt zich op de eerste sector van de harde schijf. Het bestaat uit 446 bytes bootstrap, 64 bytes partitietabel en 2 bytes handtekening., Het betekent dat we de partitietabel en bytes handtekening kunnen uitsluiten terwijl we een back-up maken van de MBR met behoud van slechts een blokgrootte gelijk aan de bootstrap grootte.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c. herstellen van MBR van MBR-afbeelding
u kunt uw MBR herstellen zoals getoond op de vorige commando ‘ s met
# dd if=/tmp/sdambr.img of=/dev/sda
converteren van gegevensformaten
als een invoerbestand een tekenset gebruikt die niet de oorspronkelijke tekenset van de hostcomputer is, moet de importoperator een conversie uitvoeren., Als bijvoorbeeld ASCII het standaardformaat is voor tekenreeksen op uw hostcomputer, maar het invoergegevensbestand tekenreeksen vertegenwoordigt met EBCDIC, moet u EBCDIC converteren naar ASCII en vice versa.
A. converteer het gegevensformaat van een bestand van EBCDIC naar ASCII
als er een ebcdic-bestand bij u is, meestal opgehaald van mainframesystemen, dan wilt u deze converteren naar ASCII voor het maken van wijzigingen met behulp van tekstverwerkers op UNIX-servers
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
de conv
waardeparameter is nu ASCII omdat we converteren van EBCDIC naar ASCII
B., Converteer het dataformaat van een bestand van ASCII naar EBCDIC
na het wijzigen van de ASCII-versie en eenmaal gedaan, kunt u het terug converteren naar EBCDIC om te worden gebruikt door uw toepassing.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
de conv
waarde parameter is nu ebcdic omdat we converteren van ASCII naar EBCDIC. Als je gewoon een bepaald aantal bytes vervangt door een equivalent aantal bytes met verschillende karakters, zou de conversie soepel zijn en zou het lezen van het bestand geen problemen moeten hebben.,
het omzetten van hoofdletters van een bestand
DD commando kan ook gebruikt worden voor iets verbazingwekkends. Het kan alle tekst (alfabetten) in een bestand converteren naar hoofdletters of kleine letters en vice versa. Voor het voorbeeld hieronder hebben we een bestand voor de tests.
# cat file10test dd convert
a. een bestand converteren naar hoofdletters
omdat ons tekstbestand voorbeeld kleine letters bevat, zullen we het converteren naar hoofdletters
# dd if=~/file10 of=~/file20 conv=ucase
het commando zal het aangegeven nieuwe bestand aanmaken. Zie dat nu conv
optie ucase waarde neemt., Laten we het resultaat controleren
# cat file20 TEST DD CONVERT
b. een bestand converteren naar kleine letters
nu zullen we de omgekeerde bewerking uitvoeren die zal converteren naar kleine letters
# dd if=~/file20 of=~/file30 conv=lcase
zie dat we lcase van conv
optie gebruiken om van hoofdletters naar kleine letters te converteren.
# cat file30 test dd convert
dd het commando converteert de bestandsnamen niet, alleen de inhoud.
conclusie
het dd Commando, hoewel technisch gezien geen archiveringscommando, is in sommige opzichten vergelijkbaar omdat het een volledige partitie of schijf naar een bestand kan kopiëren en vice versa.