GNU/Linux >> Linux Esercitazione >  >> Linux

È meglio usare cat, dd, pv o un'altra procedura per copiare un CD/DVD?

Tutti i seguenti comandi sono equivalenti. Leggono i byte del CD /dev/sr0 e scriverli in un file chiamato 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

Perché dovresti usarne uno invece dell'altro?

  • Semplicità. Ad esempio, se conosci già cat o cp , non hai bisogno di imparare un altro comando.

  • Robustezza. Questa è un po' una variante della semplicità. Quanto rischio c'è che cambiando il comando cambi ciò che fa? Vediamo alcuni esempi:

    • Qualsiasi cosa con reindirizzamento:potresti accidentalmente inserire un reindirizzamento al contrario o dimenticarlo. Poiché la destinazione dovrebbe essere un file inesistente, set -o noclobber dovrebbe assicurarsi di non sovrascrivere nulla; tuttavia potresti sovrascrivere un dispositivo se scrivi accidentalmente >/dev/sda (per un CD, che è di sola lettura, non c'è alcun rischio, ovviamente). Questo parla a favore di cat /dev/sr0 >image.iso (difficile sbagliare in modo dannoso) su alternative come tee </dev/sr0 >image.iso (se inverti i reindirizzamenti o dimentichi quello di input, tee scriverà a /dev/sr0 ).
    • cat :potresti accidentalmente concatenare due file. Ciò rende i dati facilmente recuperabili.
    • dd :i e o sono vicini sulla tastiera e in qualche modo insoliti. Non esiste un equivalente di noclobber , of= sovrascriverà felicemente qualsiasi cosa. La sintassi di reindirizzamento è meno soggetta a errori.
    • cp :se si scambia accidentalmente la sorgente e la destinazione, il dispositivo verrà sovrascritto (di nuovo, assumendo un dispositivo non di sola lettura). Se cp viene richiamato con alcune opzioni come -R o -a che alcune persone aggiungono tramite un alias, copierà il nodo del dispositivo piuttosto che il contenuto del dispositivo.
  • Funzionalità aggiuntive. L'unico strumento qui che ha utili funzionalità aggiuntive è pv , con le sue potenti opzioni di reportistica.
    Ma qui puoi controllare quanto è stato copiato guardando comunque la dimensione del file di output.

  • Prestazione. Questo è un processo legato all'I/O; l'influenza principale sulle prestazioni è la dimensione del buffer:lo strumento legge un blocco dall'origine, scrive il blocco nella destinazione, ripete. Se il blocco è troppo piccolo, il computer passa il tempo a passare da un'attività all'altra. Se il blocco è troppo grande, le operazioni di lettura e scrittura non possono essere parallelizzate. La dimensione ottimale del blocco su un PC è in genere di pochi megabyte, ma ovviamente dipende molto dal sistema operativo, dall'hardware e da cos'altro sta facendo il computer. Qualche tempo fa, su Linux, ho fatto dei benchmark per le copie da disco rigido a disco rigido, che hanno mostrato che per le copie all'interno dello stesso disco, dd con una grande dimensione del buffer ha il vantaggio, ma per le copie su più dischi, cat ha vinto su qualsiasi dd dimensione del buffer.

Ci sono alcuni motivi per cui trovi dd citato così spesso. A parte le prestazioni, non sono motivi particolarmente validi.

  • Nei sistemi Unix molto vecchi, alcuni strumenti di elaborazione del testo non erano in grado di gestire i dati binari (usavano internamente stringhe con terminazione nulla, quindi tendevano ad avere problemi con i byte nulli; alcuni strumenti presumevano anche che i caratteri usassero solo 7 bit e non ha elaborato correttamente i set di caratteri a 8 bit). Non sono sicuro che questo sia mai stato un problema con cat (era con strumenti più orientati alla linea come head , sed , ecc.), ma le persone tendevano ad evitarlo sui dati binari a causa della sua associazione con l'elaborazione del testo. Questo non è un problema sui sistemi moderni come Linux, OSX, *BSD o qualsiasi cosa sia conforme a POSIX.
  • C'è una specie di mito che dd è in qualche modo "di livello inferiore" rispetto ad altri strumenti come cat e accede direttamente ai dispositivi. Questo è completamente falso:dd e cat e tee e gli altri leggono tutti i byte dal loro input e scrivono i byte sul loro output. La vera magia è in /dev/sr0 .
  • dd ha un'insolita sintassi della riga di comando, quindi spiegare come funziona dà più opportunità di brillare spiegando qualcosa che basta scrivere cat /dev/sr0 .
  • Utilizzando dd con un buffer di grandi dimensioni può avere prestazioni migliori, ma non è sempre così (vedi alcuni benchmark su Linux).

Un grosso rischio con dd è che può ignorare silenziosamente alcuni dati . Penso dd è sicuro finché skip o count non sono passati ma non sono sicuro che sia così su tutte le piattaforme. Ma non ha alcun vantaggio se non per le prestazioni.

Quindi usa semplicemente pv se vuoi il suo fantastico rapporto sui progressi, o cat se non lo fai.


Invece di utilizzare strumenti generici come cat o dd , si dovrebbero preferire strumenti più affidabili sugli errori di lettura come

  • drescue
  • readcd (che ha meccanismi di correzione degli errori/riprova per le unità CD/DVD integrate)

Inoltre, le loro impostazioni predefinite sono più adatte rispetto ad es. dd 's.


Ci sono fatti interessanti in questo caso, specialmente questi:

  • Ho appena controllato l'output che ho ricevuto e fornito (questa volta ho usato un altro disco, esattamente, il disco di installazione di Xubuntu 15.04 x64), e con entrambe le procedure (dd e pv ) i checksum sono identici .
  • Ho avuto l'idea, dopo aver eseguito il dd procedura, apri l'unità e chiudila con lo stesso disco, quindi termina il test con il pv procedura. Facendo proprio questo, ho ottenuto copie identiche con entrambe le procedure.
  • Io penso Ho ottenuto checksum diversi la prima volta, perché per qualche motivo i dati raccolti dall'unità CD/DVD sembrano essere stati "registrati" per altri scopi per un po' di tempo (come una cache) -- quindi, altre operazioni come i checksum sono state rese un molto più veloce del trasferimento. Si prega di commentare se si conosce la causa esatta di ciò.
  • Un altro fatto è che dd senza count=X Il parametro si ferma correttamente alla fine del disco e restituisce la stessa immagine del disco di pv (i checksum sono identici), quindi è meglio per me utilizzare dd senza parametri o solo pv .

Quindi, per ora, sembra pv e dd può eseguire una copia di CD/DVD con gli stessi risultati.


Linux
  1. Come generare una password casuale in Linux usando /dev/random

  2. Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

  3. Cosa sono i file /dev/zero e /dev/null in Linux

  4. Come si scambia /dev/sda con /dev/sdb?

  5. DD da /dev/zero a /dev/null... cosa succede realmente

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

kernel:disabilitare /dev/kmem e /dev/mem

È sbagliato collegare /dev/random a /dev/urandom su Linux?

Crea un dispositivo a blocchi virtuale che scrive su /dev/null

Differenze tra /dev/sda e /dev/sda1