¿Cómo pruebo para ver si todas las escrituras en mi disco duro están alineadas con sus 4k sectores?

9

Estoy usando Linux con 4 discos duros que usan 4k sectores. Hay varias capas entre mi sistema de archivos y los dispositivos sin formato: Discos> Linux Raid 5> dm-crypt> LVM.

Cada recurso que he encontrado ha explicado cómo configurar cada capa para garantizar que las escrituras en la parte superior de esa capa se alinearán con el límite del sector 4k. Sin embargo, no he encontrado nada que explique cómo verificar que las escrituras realizadas en los discos duros realmente están sucediendo en los límites de 4k.

No estoy interesado en volver a examinar mi configuración para usar la lógica para determinar si está alineada correctamente. Quiero examinar qué sucede realmente cuando se realizan escrituras en el disco.

¿Cómo puedo registrar o ver las direcciones y el tamaño de las escrituras que se están realizando en mis discos duros, para poder verificar que estén correctamente alineados?

Brian Pellin
fuente

Respuestas:

2

Me hice la misma pregunta hace algún tiempo y simplemente hice lo siguiente:

Escribió con el shell un par de veces una cadena bastante inusual en un archivo (algo así como "WackaWacka") Luego simplemente buscó con un volcado hexadecimal (usado od ) el contenido real del disco y comprobó si la primera aparición de la cadena estaba almacenada exactamente en el comienzo de un bloque de 4k.

Sugerencia: no utilice un editor; puede crear archivos temporales que no conoce y que también pueden contener las cadenas. Hacerlo de esta forma:

 $ for i in 1 2 3 4 5 ...
 >  do
 >   echo "WackaWacka!"
 >  done > mytestfile

Entonces .sh_history puede contener la cadena de búsqueda, pero no 5 veces seguidas ;-)

Y luego, solo busca:

 # sync
 # od -c /dev/sda | grep 'W   a   c   k   a'

Bueno, es mejor hacerlo en un disco bastante vacío para evitar la búsqueda de Gigabytes de datos ;-)

ktf
fuente
1
Dado que dm-crypt es una de las capas en mi pila, esta solución no es suficiente, ya que estos caracteres no se escribirán en el disco.
Brian Pellin
Eso es malo. Solo otra solución que se me ocurre es cambiar explícitamente un bloque de 4k en un archivo y verificar si solo ha cambiado el contenido de un bloque físico en el disco (o si se ven afectados dos bloques consecutivos), y esto solo funcionará si los datos no están comprimidos por la capa de cifrado. Sin embargo, uno debe saber en qué bloque de disco se almacena el archivo y buscar cualquier cambio puede ser difícil en discos grandes.
ktf
2

Escriba un bloque de 4k y observe cuántos datos se leen / escriben con iostat(las columnas 'Blk_read' 'Blk_wrtn'). Si los datos no están alineados, una escritura activará las lecturas primero y activará más de 4k de escrituras.

Sin embargo, deberá tener cuidado de no medir ninguna actualización de metadatos ... o simplemente ahogarlos haciendo miles de escrituras de 4k ... Así que asegúrese de que nada más esté escaneando discos o sosteniendo archivos abiertos (creo lsofque sería ¿suficiente?), luego abra un nuevo archivo, espere, ejecute iostat, escriba 4k en el archivo, sincronice la escritura (¿o simplemente espere un momento?) y luego verifique iostatnuevamente.

Esto parece dar un resultado razonable para mí:

iostat  -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat  -d /dev/hdb3

iostatLa página de manual de Note dice que se informa en bloques de 512 bytes, y veo que se escribieron más de 80000 bloques adicionales, y no se leyeron bloques. Si su alineación está desactivada, verá un número similar de lecturas (ya que para escribir un 4k mal alineado, es necesario leer los dos bloques afectados, mutarlos y volver a escribirlos). De hecho, la única razón por la que la alineación es importante es evitar tales lecturas (así que eso es realmente lo que desea buscar: ¿se lee un disparador de carga de trabajo de escritura?)

PT
fuente
¿Sabe si iostat informa sobre el número de lecturas / escrituras que el sistema operativo realiza en el dispositivo de bloque, o este número se basa en la unidad que informa cuántos bloques ha leído y escrito?
Brian Pellin
Sospecho que es por la abstracción del dispositivo de bloqueo del sistema operativo, no directamente desde la unidad, pero no estoy seguro. Tampoco estoy seguro de si estaría "arriba" o "debajo" de la capa dm-crypt.
PT