¿Cómo encuentro el tamaño de lectura del bloque de hardware para mi disco duro?

Respuestas:

44

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 
Thomas Bratt
fuente
3
¿Distingue entre tamaño lógico y tamaño físico?
CMCDragonkai
2
No proporcionará el tamaño físico real.
sjas
77
Funciona para mí, PHY-SEC muestra el físico correcto y LOG-SEC muestra el tamaño lógico.
soger
31

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).

hlovdal
fuente
2
Tengo un sistema Debian Lenny (kernel 2.6.26) que solo expone un hw_sector_size en esa ubicación, y un nuevo sistema Ubuntu Karmic (kernel 2.6.31) que proporciona ambos. entonces esto es algo dependiente del kernel en uso.
quack quijote
No proporcionará el tamaño físico real.
sjas
@sjas ¿Podrías expandirte? ¿Cómo sabes esto?
Hashim
1
@Hashim Lo probé en algunos discos duros antiguos que tenía donde algunos tenían 512b y otros 4k de tamaño de sector. superuser.com/a/426015/145072 es la solución que realmente funcionó. todo lo demás hdparmprobablemente te mentirá.
SJAS
7

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


3 - Determine el tamaño de bloque apropiado

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.

Mark C
fuente
1
alguna razón para usar en 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.
quack quijote
Sería mejor preguntarle a Mark Kolich (vinculado). Estaba creando una copia de seguridad, y solo cité una sección de su artículo.
Mark C
1
@MarkC El artículo vinculado utiliza /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.
Bob
2
OMI, esta es la respuesta más útil, principalmente debido al último párrafo en negrita. Linux trabaja muy duro para optimizar el acceso al disco, por lo que siempre que use el programador io apropiado y la configuración de búfer sucio para su disco, un tamaño de bloque de 8192 bytes debería estar bien para cualquier situación.
soger
4

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 ...

ZaB
fuente
¿Podrías aclarar?
sjas
1
@Sjas Lo que él o ella está diciendo es, aparentemente, que cada sector se transfiere por separado con una "interrupción" asociada que el procesador debe manejar. Un tamaño de bloque mayor significa menos interrupciones (y, por lo tanto, menos ciclos de CPU utilizados) para la misma cantidad de datos.
Mark C
1

Además, puede mirar a través de la salida de lshwpara verificar otros resultados (y también porque parece que no tengo hdparmdisponible en mi distribución). Esto podría ayudar a reducirlo:

sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'
Vista elíptica
fuente