GNU/Linux >> Znalost Linux >  >> Linux

Příkaz Linux DD – 15 příkladů se všemi možnostmi

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.


Linux
  1. Linux Tee Command s příklady

  2. Příkaz linuxové hlavy s příklady

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. Linux řazení příkazů s příklady

  3. Echo Command v Linuxu (s příklady)

  1. man Command v Linuxu s příklady

  2. Příkaz AWK v Linuxu s příklady

  3. Curl Command v Linuxu s příklady