GNU/Linux >> Znalost Linux >  >> Linux

Je lepší pro kopírování CD/DVD použít cat, dd, pv nebo jiný postup?

Všechny následující příkazy jsou ekvivalentní. Čtou bajty CD /dev/sr0 a zapište je do souboru s názvem image.iso .

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

Proč byste měli používat jedno přes druhé?

  • Jednoduchost. Například pokud již znáte cat nebo cp , nemusíte se učit další příkaz.

  • Robustnost. Tohle je tak trochu varianta jednoduchosti. Jak velké je riziko, že změna příkazu změní to, co dělá? Podívejme se na několik příkladů:

    • Cokoli s přesměrováním:Mohli byste omylem zadat přesměrování špatně nebo na něj zapomenout. Protože cílem má být neexistující soubor, set -o noclobber by měl zajistit, že nic nepřepíšete; pokud však omylem zapíšete >/dev/sda, můžete zařízení přepsat (u CD, které je pouze pro čtení, samozřejmě žádné riziko nehrozí). To hovoří ve prospěch cat /dev/sr0 >image.iso (těžko se pokazit špatně) oproti alternativám jako tee </dev/sr0 >image.iso (pokud převrátíte přesměrování nebo zapomenete vstupní, tee zapíše do /dev/sr0 ).
    • cat :můžete omylem zřetězit dva soubory. Data tak lze snadno zachránit.
    • dd :i a o jsou blízko na klávesnici a poněkud neobvyklé. Neexistuje žádný ekvivalent noclobber , of= s radostí cokoliv přepíše. Syntaxe přesměrování je méně náchylná k chybám.
    • cp :pokud omylem zaměníte zdroj a cíl, zařízení bude přepsáno (opět za předpokladu, že zařízení není pouze pro čtení). Pokud cp se vyvolává s některými možnostmi, jako je -R nebo -a který někteří lidé přidají prostřednictvím aliasu, zkopíruje uzel zařízení spíše než obsah zařízení.
  • Další funkce. Jediným nástrojem, který má užitečné doplňkové funkce, je pv s výkonnými možnostmi vytváření přehledů.
    Zde však můžete zkontrolovat, kolik toho bylo zkopírováno, a to tak, že se podíváte na velikost výstupního souboru.

  • Výkon. Toto je I/O-vázaný proces; hlavní vliv na výkon má velikost vyrovnávací paměti:nástroj načte blok ze zdroje, zapíše blok do cíle, opakuje. Pokud je blok příliš malý, počítač tráví čas přepínáním mezi úkoly. Pokud je blok příliš velký, nelze operace čtení a zápisu paralelizovat. Optimální velikost bloku na PC je obvykle kolem několika megabajtů, ale to samozřejmě velmi závisí na operačním systému, hardwaru a na tom, co ještě počítač dělá. Před chvílí jsem v Linuxu provedl benchmarky pro kopie z pevného disku na pevný disk, což ukázalo, že pro kopie na stejném disku je dd s velkou velikostí vyrovnávací paměti má výhodu, ale pro kopie mezi disky cat vyhrál nad jakýmkoli dd velikost vyrovnávací paměti.

Existuje několik důvodů, proč najdete dd tak často zmiňovaný. Kromě výkonu to nejsou zvlášť dobré důvody.

  • Ve velmi starých unixových systémech si některé nástroje pro zpracování textu nedokázaly poradit s binárními daty (interně používaly řetězce zakončené nulou, takže měly tendenci mít problémy s nulovými bajty; některé nástroje také předpokládaly, že znaky používají pouze 7 bitů a nezpracoval správně 8bitové znakové sady). Nejsem si jistý, jestli to někdy byl problém s cat (Bylo to s více linkově orientovanými nástroji, jako je head , sed , atd.), ale lidé měli tendenci se mu vyhýbat na binárních datech kvůli jeho spojení se zpracováním textu. To není problém na moderních systémech, jako je Linux, OSX, *BSD nebo cokoli, co je kompatibilní s POSIX.
  • Existuje jakýsi mýtus, že dd je poněkud „nižší úroveň“ než jiné nástroje, jako je cat a přistupuje přímo k zařízením. Toto je zcela nesprávné:dd a cat a tee a ostatní všichni čtou bajty ze svého vstupu a zapisují je na svůj výstup. Skutečné kouzlo je v /dev/sr0 .
  • dd má neobvyklou syntaxi příkazového řádku, takže vysvětlení, jak to funguje, dává větší příležitost zazářit vysvětlením něčeho, co stačí napsat cat /dev/sr0 .
  • Pomocí dd s velkou velikostí vyrovnávací paměti může mít lepší výkon, ale není tomu tak vždy (viz některé benchmarky na Linuxu).

Velké riziko s dd je, že může tiše přeskočit některá data . Myslím, že dd je bezpečný, dokud skip nebo count nejsou předány, ale nejsem si jistý, zda je tomu tak na všech platformách. Ale nemá žádnou výhodu kromě výkonu.

Stačí tedy použít pv pokud chcete jeho efektní zprávu o průběhu, nebo cat pokud ne.


Namísto použití obecných nástrojů jako cat nebo dd , měli byste preferovat nástroje, které jsou spolehlivější při chybách čtení, jako je

  • ddrescue
  • readcd (který má vestavěné mechanismy pro opravy chyb/opakování pro jednotky CD/DVD)

Navíc jejich výchozí nastavení je vhodnější než např. dd 's.


V tomto případě jsou zajímavé skutečnosti, zejména tyto:

  • Právě jsem zkontroloval výstup, který jsem dostal a poskytl (tentokrát jsem použil jiný disk, přesně, instalační disk Xubuntu 15.04 x64), a s oběma postupy (dd a pv ) kontrolní součty jsou identické .
  • Napadlo mě to po provedení dd otevřete jednotku a zavřete ji stejným diskem a poté dokončete test pomocí pv postup. Díky tomu jsem získal identické kopie s oběma postupy.
  • Myslím Poprvé jsem dostal jiné kontrolní součty, protože z nějakého důvodu se zdá, že data shromážděná z jednotky CD/DVD byla nějakou dobu „zaznamenána“ pro jiné účely (jako mezipaměť) – takže byly provedeny další operace, jako jsou kontrolní součty. mnohem rychlejší než převod. Pokud znáte přesnou příčinu, napište komentář.
  • Další skutečností je, že dd bez count=X parametr se zastaví správně na konci disku a poskytne stejný obraz disku jako u pv (kontrolní součty jsou identické), takže je pro mě lepší použít dd bez parametrů nebo jen pv .

Zatím to tedy vypadá pv a dd může provést kopii CD/DVD se stejnými výsledky.


Linux
  1. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  1. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  2. Kdy mám použít /dev/shm/ a kdy /tmp/?

  3. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0

  1. Kdy použít /dev/random vs /dev/urandom?

  2. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  3. Proč jsou < nebo > vyžadovány pro použití /dev/tcp