Příkaz dd pro Linux je jedním z nejvýkonnějších nástrojů, který lze použít různými způsoby. Tento nástroj se používá hlavně pro kopírování a konverzi dat, proto je zkratkou pro datový duplikátor. Tento nástroj lze použít pro:
- Zálohování a obnovení celého pevného disku nebo oddílu.
- Vytváření virtuálního souborového systému a záložní obrazy disků CD nebo DVD nazývané soubory ISO
- Zkopírujte oblasti nezpracovaných souborů zařízení, jako je záloha MBR (hlavní spouštěcí záznam).
- Převod datových formátů jako ASCII na EBCDIC.
- Převod malých písmen na velká a naopak.
Tento příkaz může provést pouze superuživatel. Při používání tohoto příkazu byste měli být velmi opatrní, protože nesprávné použití může způsobit obrovskou ztrátu dat. Někteří lidé tedy považují tento nástroj za ničitel dat.
Syntaxe příkazu dd
Základní použití příkazu dd je poměrně snadné, protože vyžaduje pouze dva argumenty:if =k určení vstupního souboru a of =k určení výstupního souboru. Argumenty těchto možností mohou být buď soubory, nebo blokovaná zařízení. Nedoporučoval bych však používat dd ke kopírování souborů, protože cp to dělá mnohem jednodušším způsobem. Můžete jej však použít ke klonování pevného disku. Syntaxe je
dd if=<source file name> of=<target file name> [Options]
Při procházení příkladů příkazů dd se naučíme různé možnosti.
1. Zálohování a obnova celého disku nebo diskového oddílu
Je možné uložit všechna data z celého disku/diskového oddílu na jiný disk/diskový oddíl. Není to jednoduchá kopie jako příkaz cp, ale kopie velikosti bloku.
a. Zálohujte celý disk na disk
Všechna data (celý disk) můžete zkopírovat z disku /dev/sda
na /dev/sdb
. dd neví nic o souborovém systému nebo oddílech; pouze zkopíruje vše z /dev/sda
na /dev/sdb
. Velikost bloku, který se má zkopírovat, musíte zadat pomocí bs
volba. Tím se tedy naklonuje disk se stejnými daty na stejném oddílu.
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync 97281+0 records in 97280+0 records out 99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s
Toto funguje pouze v případě, že druhé zařízení je stejně velké nebo větší než první. V opačném případě získáte zkrácené a bezcenné oddíly na druhém. Zde platí, že if znamená vstupní soubor , of znamená výstupní soubor a bs znamená velikost bloku (počet bajtů ke čtení/zápisu najednou). Ujistěte se, že používáte velikosti bloků v násobcích 1024 bajtů, což se rovná 1 kB. Pokud neurčíte velikost bloku, dd použije výchozí velikost bloku 512 bajtů. conv
parametr hodnoty noerror umožňuje nástroji pokračovat v kopírování dat, i když narazí na nějaké chyby. Možnost synchronizace umožňuje používat synchronizované I/O.
b. Vytvoření obrazu disku dd (obraz souboru)
Můžete vytvořit obraz disku nebo obraz souboru. Zálohování disku do obrazu bude rychlejší než kopírování přesných dat. Obraz disku také značně usnadňuje obnovu.
# dd if=/dev/sda of=/tmp/sdadisk.img
Výstupní soubor můžete uložit, kam chcete, ale musíte zadat název souboru končící na .img
prodloužení jako výše. Místo /tmp/sdadisk.img
, můžete jej uložit například na /sdadisk.img
pokud chcete.
c. Vytvoření komprimovaného obrazu disku
Protože dd vytváří přesný obsah celého disku, znamená to, že zabírá příliš velkou velikost. Můžete se rozhodnout komprimovat obraz disku pomocí příkazu níže
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
Potrubí | operátor způsobí, že výstup levého příkazu se stane vstupem pravého příkazu. -c
volba zapisuje výstup na standardní výstup a zachovává původní soubory beze změny.
d. Zálohujte oddíl nebo naklonujte jeden oddíl do druhého
Místo celého disku můžete zálohovat pouze jednoduchý oddíl. Stačí zadat název oddílu ve vstupním souboru, jak je uvedeno níže
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Tím se synchronizuje oddíl /dev/sda1
na /dev/sdb1
. Musíte ověřit velikost /dev/sdb1
by měl být větší než /dev/sda1
. Nebo můžete vytvořit obraz oddílu, jak je uvedeno níže
# dd if=/dev/sda1 of=/tmp/sda1.img
e. Obnovení obrazu disku nebo diskového oddílu
Uložení disku nebo oddílu pomáhá obnovit všechna data, pokud se vyskytnou problémy s naším původním diskem. Chcete-li obnovit, musíte invertovat vstupní soubor s výstupním souborem uvedeným během operace zálohování, jak je uvedeno níže.
# dd if=/tmp/sdadisk.img of=/dev/sda
Získáte data, která byla přítomna před operací zálohování a nikoli po operaci
e. Obnovení komprimovaného obrázku
Nejprve musíte označit komprimovaný soubor a výstupní soubor, což je disk, který byl předtím komprimován.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
Volbou -d je zde dekomprimace. Poznamenejte si výstupní soubor. Obnovený disk můžete připojit, abyste viděli jeho obsah. Pamatujte, že data budou přidána po poslední operaci komprese zálohy.
2. Vytváření virtuálních souborových systémů/záložních obrazů disků CD nebo DVD jako souborů iso
Z nějakých důvodů může být potřeba vytvořit virtuální souborový systém v Linuxu, například vytvoření virtuálního počítače na hostiteli Linuxu. Můžete také potřebovat vytvořit záložní obraz iso disku CD nebo DVD
a. Vytvoření virtuálního souborového systému
Virtuální souborový systém je souborový systém, který existuje v souboru, který zase existuje na fyzickém disku. Můžete jej potřebovat například k vytvoření dalšího odkládacího nebo smyčkového zařízení nebo virtuálního počítače. Potřebujeme /dev/zero
což je soubor používaný k vytvoření souboru bez dat, ale s požadovanou velikostí (soubor se samými nulami). Jinými slovy, toto vytvoří datový soubor se všemi nulami v souboru, který dá velikost souboru.
# dd if=/dev/zero of=/file bs=1024K count=500 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
Možnost count
odkazuje na počet vstupních bloků, které mají být zkopírovány. V kombinaci s hodnotou velikosti bloku označuje celkovou velikost ke kopírování. Například bs=1024k
a count=500
zadejte velikost=1024 kB*500 =524288000 bajtů =524 MB
Nyní zkontrolujeme velikost našeho souboru
# ls -lh /file -rw-r--r-- 1 root root 500M May 17 18:57 /file
Můžete vidět, že máme vytvořený náš virtuální souborový systém s uvedenou velikostí. Nyní jej můžete použít k vytvoření smyčkového zařízení nebo virtuálního disku nebo čehokoli jiného.
b. Upravte prvních 512 bajtů souboru s nulovými daty
Pokud během operace označíte existující výstupní soubor, ztratíte jeho data. Z některých důvodů může být potřeba nahradit velikost bloku výstupního souboru.
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
notrunc
možnost odkazuje na nezkracovat soubor, pouze nahradit prvních 512 bajtů, pokud existuje. V opačném případě získáte soubor o velikosti 512 bajtů
c. Vytvoření záložního iso obrazu disku CD nebo DVD
Možná se divíte, proč nezkopírovat obsah vašeho CD do adresáře. Jak byste naložili se zaváděcím sektorem CD? Nemůžete to najít jako soubor na zařízení, protože je to jen první sektor. Protože dd kopíruje sektor po sektoru, na druhou stranu zkopíruje i tyto informace.
# dd if=/dev/cdrom of=/mycd.iso
Musíte vědět, že musíte použít -o loop
možnost, která vám umožní připojit soubor jako každé normální zařízení. Takže k připojení /mycd.iso
na /mnt/cd
adresář, postupujte podle níže
# mount -o loop /mycd.iso /mnt/cd
d) Vytvořte spouštěcí jednotku USB
Předpokládejme, že jsme stáhli iso obraz centos zde do tohoto adresáře "~/Downloads/".
if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso – vstupní soubor je v cestě '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso'
of=/dev/sdb - výstupní soubor je v cestě '/dev/sdb'
bs=1M – Číst z '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso' a zapisovat do '/dev/sdb' 1 MB dat najednou.
# dd if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M
3. Zálohování a obnovení MBR
Bootloader GRUB je nejčastěji uložen v MBR spouštěcí jednotky. MBR tvoří prvních 512 bajtů disku, což umožňuje až 466 bajtů úložiště pro bootloader. Dodatečné místo bude použito k uložení tabulky oddílů pro daný disk. Pokud dojde k poškození MBR, nebudeme moci zavést Linux.
a. Zálohování MBR
Protože MBR tvoří prvních 512 bajtů na disku, stačí zkopírovat tuto velikost bloku
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
S count=1
a bs=512
, bude zkopírováno pouze 512 bajtů, což odpovídá velikosti našeho MBR.
Uložený MBR můžete zobrazit pomocí příkazu od, který ukládá soubory v osmičkovém a jiném formátu, jak je uvedeno níže
# od -xa /tmp/sdambr.img 0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul 0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
volba vybírá pojmenované znaky a -x
vybere hexadecimální 2bajtové jednotky
b. Zálohování spouštěcích dat MBR s výjimkou tabulky oddílů
Data MBR 512 bajtů jsou umístěna v prvním sektoru pevného disku. Skládá se ze 446 bajtů bootstrapu, 64 bajtové tabulky oddílů a 2 bajtů podpisu. Znamená to, že můžeme vyloučit tabulku oddílů a podpis bajtů při zálohování MBR s zachováním pouze velikosti bloku rovnající se velikosti bootstrapu.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c. Obnovení MBR z obrazu MBR
MBR můžete obnovit, jak je znázorněno na předchozích příkazech pomocí
# dd if=/tmp/sdambr.img of=/dev/sda
3. Převod datových formátů
Pokud vstupní soubor používá znakovou sadu, která není nativní znakovou sadou hostitelského počítače, musí operátor importu provést převod. Pokud je například ASCII nativním formátem pro řetězce na vašem hostitelském počítači, ale vstupní datový soubor představuje řetězce pomocí EBCDIC, musíte EBCDIC převést na ASCII a naopak.
a. Převeďte datový formát souboru z EBCDIC na ASCII
Pokud máte soubor ebcdic, většinou načtený ze systémů sálových počítačů, pak byste jej chtěli převést na ASCII pro provádění úprav pomocí textových editorů na serverech UNIX
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
conv
parametr value je nyní ascii protože převádíme z EBCDIC na ASCII
b. Převeďte datový formát souboru z ASCII na EBCDIC
Po úpravě verze ASCII a po dokončení ji můžete převést zpět na EBCDIC, aby ji mohla používat vaše aplikace.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
conv
parametr value je nyní e bcdic protože převádíme z ASCII na EBCDIC. Pokud pouze nahrazujete určitý počet bajtů ekvivalentním počtem bajtů s různými znaky, převod bude hladký a aplikace se čtením souboru by neměla mít žádné problémy.
4. Převod velkých a malých písmen souboru
Příkaz DD lze také použít k úžasné věci. Dokáže převést veškerý text (abeceda) v souboru na velká nebo malá písmena a naopak. Pro níže uvedený příklad budeme mít soubor pro testy.
# cat file10 test dd convert
a. Převod souboru na velká
Protože náš příklad textového souboru je na malá písmena, převedeme jej na velká
# dd if=~/file10 of=~/file20 conv=ucase
Příkaz vytvoří uvedený nový soubor. Podívejte se, že nyní conv
volba trvá ucase hodnota. Pojďme zkontrolovat výsledek
# cat file20 TEST DD CONVERT
b. Převod souboru na malá písmena
Nyní provedeme opačnou operaci, která převede na malá písmena
# dd if=~/file20 of=~/file30 conv=lcase
Podívejte se, že používáme lcase z conv
možnost převodu z velkých písmen na malá.
# cat file30 test dd convert
Příkaz dd nepřevádí názvy souborů, pouze jejich obsah.
Závěr
Příkaz dd, i když technicky nejde o archivační příkaz, je v některých ohledech podobný, protože dokáže zkopírovat celý oddíl nebo disk do souboru a naopak.