Añadir un gran búfer acelerará las cosas significativamente . El tamaño por defecto es pequeño; como 512 bytes. Se puede aumentar el tamaño utilizando la opción bs. Sólo estoy usando sudo porque tú lo hiciste.
sudo dd if=/dev/disk bs=4096m | sudo dd of=/Volumes/Path/To.iso bs=4096m
Este comando de aspecto aterrador pedirá a los comandos dd que informen de su estado. El -s dice que se señalice.
sudo kill -s siginfo $(pgrep ^dd) # get dd info
He hecho pruebas con varios tamaños de búfer, cuanto más grande sea el búfer más rápida será la copia. No quiero tener un buffer tan grande ya que el buffer necesita ser paginado.
Si me equivoqué en la sintaxis anterior, estos son los comandos reales que me han funcionado. Asumo que sabes que necesitas desmontar la partición/unidad antes de usar dd. Para algunos comandos de dd, necesité usar sudo.
dd if=/dev/disk0s10 bs=4096m | gzip | dd of=~/disk0-s10 bs=4096m
dd if=~/disk0-s10 bs=4096m | gunzip | dd of=/dev/disk0s10 bs=4096m
sudo kill -s siginfo $(pgrep ^dd) # get dd info
Edit: Jan 18,2019 Hice los tiempos usando uno o dos comandos dd. Era un cara y cruz sobre qué forma era más rápida. El tiempo en mi prueba varió típicamente por 0,3 de un segundo entre los comandos. Sin embargo, en un caso los dos comandos dd fueron más lentos por más de un segundo. La diferencia parecía estar en qué comando se ejecutaba primero. La segunda prueba fue siempre más rápida. Supongo que el comando dd construye un segundo proceso para dar salida a los datos y se comunica con el segundo proceso a través de una tubería. Esto es casi lo mismo que usar dos comandos dd.
dd if=InstallESD.dmg bs=801920k of="/Volumes/--Mojave--/mojave2.dmg"
5+1 records in
5+1 records out
4719681368 bytes transferred in 28.887363 secs (163382216 bytes/sec)
Show_Time
date +%s
Elapsed time in seconds since start of processing: 84 Time of this step: 29
dd if=InstallESD.dmg bs=801920k | dd of="/Volumes/--Mojave--/mojave.dmg" bs=801920k
5+1 records in
5+1 records out
4719681368 bytes transferred in 27.383548 secs (172354633 bytes/sec)
0+72017 records in
0+72017 records out
4719681368 bytes transferred in 27.459524 secs (171877757 bytes/sec)
Show_Time
date +%s
Elapsed time in seconds since start of processing: 112 Time of this step: 28
rm "/Volumes/--Mojave--/mojave.dmg"
rm "/Volumes/--Mojave--/mojave2.dmg"
Show_Time
date +%s
Elapsed time in seconds since start of processing: 112 Time of this step: 0
dd if=InstallESD.dmg bs=801920k of="/Volumes/--Mojave--/mojave2.dmg"
5+1 records in
5+1 records out
4719681368 bytes transferred in 26.754509 secs (176406950 bytes/sec)
Show_Time
date +%s
Elapsed time in seconds since start of processing: 139 Time of this step: 27
dd if=InstallESD.dmg bs=801920k | dd of="/Volumes/--Mojave--/mojave.dmg" bs=801920k
5+1 records in
5+1 records out
4719681368 bytes transferred in 26.210222 secs (180070255 bytes/sec)
0+72017 records in
0+72017 records out
4719681368 bytes transferred in 26.286946 secs (179544682 bytes/sec)
Show_Time
date +%s
Elapsed time in seconds since start of processing: 165 Time of this step: 26
... se recortaron las líneas del principio. ...
Aquí está el bash script que he utilizado.
#!/bin/bash -v
function Show_Time () {
let currentRunTime="$( date +%s ) - ${Seconds_since_the_epoch_start}"
let stepRunTime=currentRunTime-previousRunTime
echo " Elapsed time in seconds since start of processing: ${currentRunTime}" \
" Time of this step: ${stepRunTime}"
echo
let previousRunTime=currentRunTime
}
savedCommandName="$0"
echo
echo "${savedCommandName} script last revised on $(GetFileInfo -m $0)"
#echo "${savedCommandName} script revised."
echo
# input file name "/Applications/InstallmacOSHighSierra.app/Contents/SharedSupport/InstallESD.dmg"
inputDir="/Applications/InstallmacOSHighSierra.app/Contents/SharedSupport"
cd ${inputDir}
inputName="InstallESD.dmg"
echo "inputDir is ${inputDir}"
echo "inputName is ${inputName}"
ls -l "${inputDir}/${inputName}"
ls -l "/Volumes/--Mojave--/mojave.dmg"
rm "/Volumes/--Mojave--/mojave.dmg"
ls -l "/Volumes/--Mojave--/mojave.dmg"
ls -l "/Volumes/--Mojave--/mojave2.dmg"
rm "/Volumes/--Mojave--/mojave2.dmg"
ls -l "/Volumes/--Mojave--/mojave2.dmg"
# Set the start time now that the user interaction is done
Seconds_since_the_epoch_start=$( date +%s )
# 80meg buffer
Show_Time
dd if=InstallESD.dmg bs=801920k of="/Volumes/--Mojave--/mojave2.dmg"
Show_Time
dd if=InstallESD.dmg bs=801920k | dd of="/Volumes/--Mojave--/mojave.dmg" bs=801920k
Show_Time
rm "/Volumes/--Mojave--/mojave.dmg"
rm "/Volumes/--Mojave--/mojave2.dmg"
Show_Time
dd if=InstallESD.dmg bs=801920k of="/Volumes/--Mojave--/mojave2.dmg"
Show_Time
dd if=InstallESD.dmg bs=801920k | dd of="/Volumes/--Mojave--/mojave.dmg" bs=801920k
Show_Time
rm "/Volumes/--Mojave--/mojave.dmg"
rm "/Volumes/--Mojave--/mojave2.dmg"
Show_Time
dd if=InstallESD.dmg bs=801920k of="/Volumes/--Mojave--/mojave2.dmg"
Show_Time
dd if=InstallESD.dmg bs=801920k | dd of="/Volumes/--Mojave--/mojave.dmg" bs=801920k
Show_Time