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à
catocp, 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 noclobberdovrebbe 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 dicat /dev/sr0 >image.iso(difficile sbagliare in modo dannoso) su alternative cometee </dev/sr0 >image.iso(se inverti i reindirizzamenti o dimentichi quello di input,teescriverà a/dev/sr0). cat:potresti accidentalmente concatenare due file. Ciò rende i dati facilmente recuperabili.dd:ieosono vicini sulla tastiera e in qualche modo insoliti. Non esiste un equivalente dinoclobber,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). Secpviene richiamato con alcune opzioni come-Ro-ache alcune persone aggiungono tramite un alias, copierà il nodo del dispositivo piuttosto che il contenuto del dispositivo.
- Qualsiasi cosa con reindirizzamento:potresti accidentalmente inserire un reindirizzamento al contrario o dimenticarlo. Poiché la destinazione dovrebbe essere un file inesistente,
-
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,
ddcon una grande dimensione del buffer ha il vantaggio, ma per le copie su più dischi,catha vinto su qualsiasidddimensione 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 comehead,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 comecate accede direttamente ai dispositivi. Questo è completamente falso:ddecateteee gli altri leggono tutti i byte dal loro input e scrivono i byte sul loro output. La vera magia è in/dev/sr0. ddha un'insolita sintassi della riga di comando, quindi spiegare come funziona dà più opportunità di brillare spiegando qualcosa che basta scriverecat /dev/sr0.- Utilizzando
ddcon 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 (
ddepv) i checksum sono identici . - Ho avuto l'idea, dopo aver eseguito il
ddprocedura, apri l'unità e chiudila con lo stesso disco, quindi termina il test con ilpvprocedura. 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
ddsenzacount=XIl parametro si ferma correttamente alla fine del disco e restituisce la stessa immagine del disco dipv(i checksum sono identici), quindi è meglio per me utilizzareddsenza parametri o solopv.
Quindi, per ora, sembra pv e dd può eseguire una copia di CD/DVD con gli stessi risultati.