GNU/Linux >> Znalost Linux >  >> Linux

5 Praktické příklady příkazu dd v Linuxu

Příkaz dd v Linuxu je nástroj pro kopírování a převod souborů a má mnoho praktických využití.

Bylo navrženo, že název je odvozen od starší funkce jazyka IBM Job Control Language, kde dd znamenalo „definice dat“. V Linuxu tato zkratka znamená „Data Duplicator“ nebo „Disk Dump“ nebo řadu dalších aliterací v závislosti na vašem zdroji.

Možná si dokonce vysloužila dojemnou přezdívku „ničitel dat“, což mě přivádí k důležitému bodu. Při procvičování příkazu dd buďte opatrní.

Tento příkaz je schopen způsobit vážné poškození. Nezapomeňte dvakrát zkontrolovat svou syntaxi, abyste se vyhnuli nákladné chybě. Nechcete být tím, kdo si plete názvy oddílů a v agónii sleduje, jak je jejich kořenový oddíl zničen a nahrazen prázdným souborem.

Seznámení s příkazem dd

Zde je syntaxe příkazu dd:

dd if=<filename> of=<filename> [options]

Tento příkaz má širokou škálu použití, uvedu některé běžné přístupy.

Fyzická média / klony oddílů / zálohy

Ve výše uvedené syntaxi jsou „if“ a „of“ pro vstupní soubor a výstupní soubor. Toto je základní funkce dd. Duplikuje data z jednoho zdroje do druhého. S dd nemusíte používat fyzická média.

Manipulace s textem

Je možné použít stdin (standardní vstup) z vaší klávesnice ke shromažďování vstupu a nasměrování do souboru. Je také možné rychle převést velikost písmen a řada dalších užitečných nástrojů pro úpravu textu je součástí manuálové stránky.

Již dříve jsem zmínil IBM v narážce na dlouhou historii tohoto programu. Jedna z původních funkcí tohoto příkazu se ve skutečnosti soustředila na převod EBCDIDC, kódovacího schématu vytvořeného IBM, na ASCII.

Manipulace se systémem souborů

Můžete s ním také kopírovat soubory, ale pro tuto jednoduchou aplikaci se doporučuje příkaz cp přes dd. Máme článek, kde si můžete přečíst o příkazu cp.

Některé poznámky k chování

Při kopírování pomocí dd , měli byste si také uvědomit, že ve výchozím nastavení zkopíruje kompletní informace z určitého zdroje.

To znamená, že pokud se pokusíte duplikovat oddíl nebo disk, zkopíruje se také volné místo.

Pokud tedy například klonujete pevný disk se 4 TB, budete potřebovat cílový disk s alespoň 4 TB, abyste předešli zkráceným souborům a chybám. Pamatujte také, že pokud má disk pouze 1 TB dat, dd zkopíruje zbývající 3 TB místa. To je špatný krok, který ztratí spoustu času a zdrojů.

Existují určitá omezení, která můžeme přidat k dd, a další opatření, která můžeme přijmout, abychom toto chování změnili. Ve skutečnosti existuje obrovské množství ovládacích prvků, které lze použít ve spojení s dd. Pokusím se uvést některé z těch, o kterých si myslím, že mohou být našim čtenářům nejvíce prospěšné, ale cílem tohoto článku je poskytnout základ dd, nikoli dokumentovat všechny možné funkce.

Pozor! K procvičování použijte virtuální stroj

Vyzývám vás, abyste svůj cíl pojmově a pečlivě provedli, abyste se vyhnuli poškození nebo zničení důležitých souborů. Je zřejmé, že neneseme odpovědnost za ztrátu vašich informací. Pokud uděláte chybu. Neříkejte, že jsme vás nevarovali.

Doporučuji cvičit na fiktivním virtuálním stroji, abyste se seznámili předtím, než se pokusíte změnit jakákoli aktiva „skutečného světa“. Je to proto, že příkaz dd má schopnost se změnit a tím poškodit váš souborový systém, pokud jej použijete nesprávně.

Pro tento tutoriál jsem se rozhodl vyzkoušet něco mimo rodinu Debianu a vytvořil jsem kopii Fedory 31 ve VirtualBoxu.

5 praktických příkladů příkazu dd

S varováními a některými kontextovými informacemi mimo cestu jsme připraveni přejít k některým aplikacím pro tento jednoduchý, ale výkonný příkaz.

Příklad 1:Klonování disků

Klonování jednoho disku na druhý může být s dd velmi snadné. Pro můj příklad mám dva disky s názvem „sda“ a „sdb“.

Pamatujte, že „sda“ se pokusí zkopírovat do „sdb“ pomocí celého obsahu disku, nejen dat.

Ve výstupním souboru musíte alokovat dostatek místa, aby se do něj vešlo nevyužité místo v sektoru. Můžete také zvolit opětovné rozdělení disku na přesnou velikost aktuálně vyplněnou daty. Tuto metodu bych doporučil. Zkrátí dobu potřebnou k provedení operace a vytvoření užitečnějšího dokumentu.

Až budete připraveni klonovat disk, můžete spustit fdisk k identifikaci vašich disků, jejich oddílů a kapacity.

sudo fdisk -l 

Spuštěním tohoto příkazu se zobrazí seznam dostupných jednotek a oddílů a jejich příslušných velikostí. To může být užitečné pro správnou identifikaci vašeho cílového zařízení.

Opět pro naši aplikaci používáme názvy „sda“ a „sdb“ a budeme předpokládat, že mají stejnou velikost.

[[email protected] ~]$ sudo dd if=/dev/sda of=/dev/sdb
[[enter pw for sudo]]
dd: writing to 'dev/sdb': No space left on device
8108369+0 records in
8108369+0 records out
4151484416 bytes (4.2 GB, 3.9 GiB) copied, 12.3602 s 336 MB/s

Výstup nám dává vědět, že zápis byl úspěšný, můžeme ignorovat zprávu, že na „sdb“ již nezbývá žádné místo.

Souhrn také uvádí množství zkopírovaných dat, jak dlouho to trvalo a jak rychle bylo zkopírováno. Podíváme se na to trochu více, když popíšu velikost bloku.

Příklad 2:Zálohování diskového oddílu

Kroky pro klonování zařízení a zálohování oddílu jsou podobné. Místo toho, aby naším cílovým souborem bylo zařízení, můžeme vytvořit soubor ‚.img‘ (raw image disku).

Řekněme, že náš systém má samostatný oddíl pro náš domovský adresář na ‚sda2‘ a my ho chceme zálohovat do souboru s názvem ‚home_backup.img‘ v našem aktuálním adresáři.

dd if=/dev/sda2 of=home_backup.img

Je to tak snadné! Takže teď nemáte žádnou omluvu pro to, že nemáte dobrou zálohovací rutinu.

Jistě, bylo to snadné, ale vždy je co se naučit.

Zacházení s velikostí bloku v příkazu dd

Než se dostaneme k dalšímu příkladu, promluvme si o BS neboli velikosti bloku. Pokud jste viděli, že se to používá k zadání hodnoty pomocí příkazů dd, možná se divíte, proč to tam je.

Pokud vás vaše zvědavost zavede k vyhledávání na internetu, pak jsem ochoten se vsadit, že pravděpodobně stále zajímalo by mě, proč tam je.

Pokusím se podat srozumitelné vysvětlení. Bloková zařízení jsou obvykle fyzická média s omezeným úložištěm.

Informace na médiu, jako je disk, můžete vyhledat vyhledáním konkrétního bloku dat. Systém tak může například číst CD-ROM a vyhledávat informace počínaje blokem 500 (libovolné číslo). Lze jej také použít k „zaúčtování“ informací a možná použít informace z bloku 500 do bloku 1500.

Tyto bloky lze segmentovat způsoby, které zefektivňují analýzu systému. To může odrážet úložný prostor média nebo standardní systémové specifikace, se kterými bude médium pravděpodobně spojeno.

Budu pokračovat příkladem CD-ROM, který má vlastní definovanou velikost bloku (2048). Každý blok musí mít maximálně 2048 bajtů. I když blok obsahuje pouze 100 bajtů dat, bude stále zabírat stejných 2048 bajtů.

V některých případech můžete chtít definovat velikost bloku, aby dd běžel rychleji nebo aby se zabránilo poškození dat. Vrátíme-li se zpět k našemu příkladu CD-ROM, vytváření bloků jiné velikosti může způsobit anomálie, když je čas na čtení dat.

Pokud zůstane nedefinováno, dd použije velikost bloku 512. Toto je nejmenší velikost bloku, kterou může typický pevný disk přečíst.

Pokud vaše médium není omezeno na určitou velikost bloku, pravděpodobně jej můžete bezpečně upravit pro výkon (dobu zápisu). Podívejme se na několik příkladů.

Výkon s nespecifikovanou velikostí bloku

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img
[sudo] password for linuxhandbook: 
dd: writing to 'home_backup.img': No space left on device
31974953+0 records in
31974952+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 113.848 s, 144 MB/s

Výkon s velikostí bloku 1024

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img bs=1024
[sudo] password for linuxhandbook: 
dd: error writing 'home_backup.img': No space left on device
15987477+0 records in
15987476+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 75.4371 s, 217 MB/s

Můžete vidět, že proces byl proveden vyšší rychlostí. Další běh s velikostí bloku 4096 byl rychlejší, ale s rychlostí 327 MB/s. Ukládání do mezipaměti systému může také hrát roli v rychlosti, ale to je téma na jiný den.

Možná jste si všimli rozdílů v počtu vstupů a výstupů. Je to proto, že měníme velikost každého bloku a tím i kapacitu jednotlivých bloků, přestože výstupní soubor zůstává stejný. Z tohoto důvodu může mít úprava hodnoty bs nezamýšlené důsledky. Mohlo by to například vést k nesrovnalostem při provádění kontrolního součtu.

Příklad 3:Smazání dat a vynulování disku

Pamatujete si všechna předchozí varování? Tento příkaz nahradí každý blok „sda“ nulami.

dd if=/dev/zero of=/dev/sda

Jak to funguje? V podstatě stejné jako všechny ostatní příkazy dd dovnitř a ven. Co je „/dev/zero“?

Je to pseudozařízení obsažené v operačních systémech Unix/Linux, které bude zapisovat nuly do souboru, dokud nedosáhne konce souboru.

Podobně můžete použít „dev/random“, který vydává náhodné bity dat. To může být zbytečné, pokud plánujete použít k nahrazení obsahu nezpracovaný soubor obrázku, protože použití dd již zkopíruje nevyužité místo.

Všimněte si, že někteří oškliví lidé oklamou nic netušící uživatele při spuštění tohoto příkazu na různých fórech Linuxu. Nyní, když víte, co tento příkaz dělá, nestanete se obětí tohoto zlého žertu.

Příklad 4:Vytvoření .ISO z CD/DVD

Pokud váš počítač stále má, můžete kopírovat přímo z jednotky CD-ROM. Již dříve jsem zmínil, že standardní velikost bajtů na cd-rom je 2048. Nastavíme velikost bajtu, aby tomu odpovídala, abychom se vyhnuli problémům s převodem, a poté přidáme několik dalších příkazů.

dd if=/dev/cdrom of=space_jam_dvd.iso bs=2048 conv=noerror,sync

Dovolte mi vysvětlit několik věcí. S conv=noerror , budou všechny chyby ignorovány. Program bude pokračovat až do posledního bloku bez zastavení. Nezastaví se to pro ně.

Při použití ve spojení s „noerror“, „synchronizace“ zajistí, že všechny chybějící bloky dat budou automaticky doplněny nulovými informacemi.

To znamená, že stávající data budou mapována do stejných umístění, pravděpodobně se zachováním co největšího obsahu.

Je důležité se ujistit, že vaše zdrojové a cílové soubory mají pro tyto operace stejné nastavení ‚bs‘, jinak nebudou mít zamýšlené výsledky.

Příklad 5:Vytvoření zaváděcího USB

Pomocí dd můžete vytvořit zaváděcí USB a je to stejně snadné, jak byste očekávali. Ve skutečnosti se jedná o jedno z nejoblíbenějších použití příkazu dd.

Je zde jeden krok navíc. K vytvoření souborového systému na našem USB používáme příkaz mkfs před spuštěním „dd“.

Bez voleb používá výchozí systém ext2. Za předpokladu, že se USB, které chceme připravit, nazývá ‚sdb‘ a chceme změnit systém souborů na ext4, spustíme následující příkaz:

sudo mkfs.ext4 /dev/sdb

Pokud chcete používat se systémem Windows, můžete první část příkazu nahradit mkfs.ntfs.

Můžete také použít následující syntaxi:

mkfs -t [for type] $filesystem.

Jakmile je zaváděcí médium připraveno, můžeme pokračovat k našemu příkazu dd.

dd if=someFile.iso of=/dev/sdb

Použijte připojitelný obraz .iso a zkopírujte jej na odpovídající název jednotky pro vaše zařízení USB.

Závěr

Děkuji za přečtení. Doufám, že se vám tento základ na ‚dd‘ líbil. Existuje tolik různých způsobů, jak můžete tento příkaz použít. Snažil jsem se pokrýt spoustu užitečnějších příkladů. Pokud máte něco, co byste chtěli vidět, nebo máte přímý dotaz, rád vám pomohu. Dejte mi vědět, co si myslíte níže v komentářích.


Linux
  1. Praktické příklady příkazu Unzip v Linuxu

  2. 10 Praktické příklady příkazů Linux nm

  3. 7 Příklady příkazů Linux df

  1. cp Command v Linuxu:7 praktických příkladů

  2. Linux Shutdown Command:5 praktických příkladů

  3. 8 Příklady příkazů Linux TR

  1. 5 Praktické příklady příkazu „cd“ v Linuxu

  2. 16 Praktické příklady příkazu Traceroute v Linuxu

  3. 20 Praktické příklady příkazu Chown v Linuxu