Estoy tratando de averiguar el tamaño óptimo para una copia grande de mi disco duro usando dd. Estoy tratando de averiguar cuál es el mejor tamaño de bloque para usarlo, lo que supongo es el tamaño de bloque de hardware para esa unidad.
Estoy tratando de averiguar el tamaño óptimo para una copia grande de mi disco duro usando dd. Estoy tratando de averiguar cuál es el mejor tamaño de bloque para usarlo, lo que supongo es el tamaño de bloque de hardware para esa unidad.
Respuestas:
El comando lsblk es excelente para esto:
lsblk -o NAME,PHY-SeC
Los resultados:
NAME PHY-SEC
sda 512
├─sda1 512
├─sda2 512
└─sda5 512
Linux expone el tamaño del sector físico en los archivos /sys/block/sdX/queue/physical_block_size
. Sin embargo, para obtener el mejor rendimiento, probablemente debería hacer una pequeña prueba con diferentes tamaños y medidas. Podría no encontrar una clara respuesta en el que el uso de exactamente el tamaño de bloque físico sería obtener el resultado óptimo (aunque supongo que no puede ser una mala elección).
hdparm
probablemente te mentirá.
$ sudo hdparm -I /dev/sda | grep -i physical
Physical Sector size: 4096 bytes
hdparm -I /dev/sda | grep Sector
es más agradable, ya que mostrará tamaños físicos y lógicos a la vez, para facilitar la comparación.
La mía no pretende ser una respuesta completa, pero espero que también ayude.
Aquí hay algo de http://mark.koli.ch/2009/05/howto-whole-disk-backups-with-dd-gzip-and-p7zip.html
Para una copia de seguridad más rápida, puede ayudar a determinar el tamaño de bloque óptimo del dispositivo de disco del que va a realizar la copia de seguridad. Suponiendo que va a hacer una copia de seguridad / dev / sda, así es como puede usar el comando fdisk para determinar el mejor tamaño de bloque:
rescuecd#/> /sbin/fdisk -l /dev/sda | grep Units
Units = cylinders of 16065 * 512 = 8225280 bytes
Tenga en cuenta que la salida de fdisk dice "cilindros de 16065 * 512". Esto significa que hay 512 bytes por bloque en el disco. Puede mejorar significativamente la velocidad de la copia de seguridad aumentando el tamaño del bloque en un múltiplo de 2 a 4. En este caso, un tamaño de bloque óptimo podría ser 1k (512 * 2) o 2k (512 * 4). Por cierto, volverse codicioso y usar un tamaño de bloque de 5k (512 * 10) o algo excesivo no ayudará; finalmente, el sistema tendrá un cuello de botella en el dispositivo y no podrá exprimir ningún rendimiento adicional del proceso de copia de seguridad. (énfasis añadido)
Sospecho que la diferencia en el rendimiento entre un tamaño de bloque casi óptimo y óptimo para una configuración dada es insignificante a menos que el conjunto de datos sea enorme. De hecho, un usuario de FixUnix (publicación de 2007) afirmó que sus tiempos óptimos fueron solo un 5% más rápidos que los subóptimos. Tal vez pueda exprimir un poco más la eficiencia utilizando un múltiplo del tamaño del "clúster" o del tamaño del bloque del sistema de archivos.
Por supuesto, si te alejas demasiado a ambos lados del tamaño de bloque óptimo, tendrás problemas.
La conclusión es que es probable que gane solo alrededor del 5% en rendimiento (es decir, 3 minutos por hora) con el tamaño de bloque óptimo absoluto, así que considere si vale la pena su tiempo y esfuerzo para seguir investigando. Mientras te mantengas alejado de los valores extremos, no debes sufrir.
echo "p" | /sbin/fdisk /dev/sda...
lugar de /sbin/fdisk -l /dev/sda...
? el segundo será más limpio y no intentará hacer ningún cambio.
/sbin/fdisk -l /dev/sda | grep Units
. Podría haber sido cambiado en los últimos dos años. En cualquier caso, he actualizado tu respuesta.
Cada transferencia de disco genera una interrupción que el procesador debe manejar. El disco típico de 50Mb / s querrá generar 100000 de ellos cada segundo con un tamaño de bloque de 512b. sistemas de hasta 64k ISA DMA) serían más prácticos ...
Además, puede mirar a través de la salida de lshw
para verificar otros resultados (y también porque parece que no tengo hdparm
disponible en mi distribución). Esto podría ayudar a reducirlo:
sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'