Optimización del tamaño del sector lógico para el tamaño del sector físico 4096 HDD

20

Con muchos discos duros nuevos, el tamaño del sector físico es 4096. ¿Sería posible hacer que el sistema utilice un tamaño de sector lógico del mismo tamaño, en lugar del tamaño de sector lógico predeterminado de 512?

¿Acelerará las lecturas y escrituras masivas? ¿Dónde se puede configurar?

Matan
fuente
Consulte unix.stackexchange.com/a/18542/1131 para obtener comentarios sobre problemas de alineación. Las versiones recientes de mkfs.*deberían usar automáticamente el tamaño de sector óptimo. Puede hacer algunas mkfs.*pruebas e inspeccionar el resultado (ya sea en la salida detallada de mkfs o en un programa de utilidad fs relacionado).
maxschlepzig
Gracias pero sin problemas de alineación
Matan

Respuestas:

29

512 bytes no es realmente el tamaño de sector predeterminado. Depende de tu hardware.

Puede mostrar qué tamaños de sector físico / lógico informa su disco a través del /syspseudo sistema de archivos, por ejemplo:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

¿Cuál es la diferencia entre esos dos valores?

  • El physical_block_sizees el tamaño mínimo de un bloque de la unidad es capaz de escribir en una operación atómica.
  • El logical_block_sizees el tamaño más pequeño de la unidad es capaz de escribir (véase la documentación del núcleo Linux).

Por lo tanto, si tiene una unidad de 4k, tiene sentido que su pila de almacenamiento (sistema de archivos, etc.) use algo igual o mayor que el tamaño del sector físico.

Esos valores también se muestran en versiones recientes de fdisk, por ejemplo:

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

En las distribuciones actuales de Linux, los programas (que deberían preocuparse por el tamaño óptimo del sector) mkfs.xfselegirán el tamaño óptimo del sector de forma predeterminada (por ejemplo, 4096 bytes).

Pero también puede especificarlo explícitamente a través de una opción, por ejemplo:

# mkfs.xfs -f -s size=4096 /dev/sda

O:

# mkfs.ext4 -F -b 4096 /dev/sda

En cualquier caso, la mayoría de las mkfsvariantes también mostrarán el tamaño de bloque utilizado durante la ejecución.

Para un sistema de archivos existente, el tamaño del bloque se puede determinar con un comando como:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

O:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

O:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

Al crear el sistema de archivos en una partición, otra cosa a verificar es si la dirección de inicio de la partición está realmente alineada con el tamaño del bloque físico. Por ejemplo, mire la fdisk -lsalida, convierta las direcciones de inicio en bytes, divídalas por el tamaño del bloque físico; el recordatorio debe ser cero si las particiones están alineadas.

maxschlepzig
fuente
Gracias, su aclaración de lo que Linux describe como tamaños de bloque lógicos y físicos fue muy útil. Recientemente me encontré con una situación en la que el mismo disco duro de 8TB apareció como bloques de 512 bytes en un gabinete USB y bloques de 4K en otro, tanto lógico como físico. Pensé que algo estaba mal porque Linux no veía el mapa de partición cuando cambié los gabinetes, pero luego descubrí que GPT comienza en el segundo bloque lógico, por lo que estaba en el lugar equivocado para la nueva alineación. Utilicé gdisk para recrear una sola partición grande, y todos mis datos todavía estaban allí (ext4 con bloques 4K).
Raptor007
¿Es confiable el método que describió para verificar la alineación? Utilicé la utilidad "separada" e informó que una partición de disco duro está alineada, pero con su enfoque, pregunté el tamaño del bloque físico, obtuve 512, luego tomé la dirección de inicio de la partición fdisk -l, la dividí entre 8 y luego 512. el resto no era 0, por lo que la partición parece no estar alineada
user907860
1
@ user907860 ¿Por qué divide entre 8? A fdisk -linforma Units = sectors of 1 * 512 = 512 bytesen uno de mis sistemas Linux, por lo tanto, para una unidad lógica / física 512/4096 con 2 particiones a partir de 2048 y 1026048 calculo 2048*512%4096y 1026048*512%4096, por ejemplo, en un shell de Python. Como ambas expresiones son iguales a cero, esas particiones están alineadas 4k.
maxschlepzig
muchas gracias por la explicación, no noté que el número era sectores, no bits. Voté la respuesta hace un par de meses, lamentablemente, no puedo hacerlo de nuevo
user907860
2

No, no es posible, ni importaría si lo fuera. IO generalmente se realiza en unidades de al menos 4096 bytes de todos modos, y generalmente mucho más.

psusi
fuente
2
No estoy seguro de cómo se relaciona esta afirmación con mi pregunta ... el tamaño del sector lógico puede implicar trozos más pequeños en alguna parte de la tubería de E / S, más una emulación innecesaria en el firmware del HDD. Cuidado para aclarar?
Matan el
2
@Matan, no puedo entender tu comentario en absoluto. Le expliqué que IO no se realiza 512 bytes a la vez, por lo que el hecho de que el disco se aborde en sectores de 512 bytes no importa. El único momento en que la unidad tiene que emular es si intenta hacer una escritura que no esté alineada con 4k, y dado que IO normalmente se hace en múltiplos de 4k de todos modos, y las herramientas de partición modernas se aseguran de que la partición comience en un límite de 4k, Eso no va a suceder.
psusi
1
Esta "respuesta" es completamente errónea, tanto en sus afirmaciones como en sus conclusiones. El tamaño lógico se establece cuando se formatea un volumen. Los desajustes entre el tamaño lógico y el físico tienen un costo definido en tecnologías como el almacenamiento basado en flash.
Chris Stratton
@ChrisStratton, no, estás pensando en el tamaño del bloque / clúster del sistema de archivos. El tamaño del sector lógico es el tamaño de un sector que la unidad informa al sistema operativo, y solo puede leer y escribir unidades de ese tamaño o un múltiplo de ese tamaño, y los sectores están numerados en unidades de ese tamaño. Compare con el tamaño del sector físico, donde algunas unidades realmente leen y escriben 4k sectores internamente, pero pretenden que están utilizando sectores de 512 bytes para la compatibilidad con sistemas operativos más antiguos que no pueden manejar 4k sectores lógicos.
psusi
Incorrecto. El problema existe cada vez que tiene un software que intenta operar en unidades más pequeñas que el tamaño físico del sistema de almacenamiento. Esto es especialmente cierto con las unidades lógicas más pequeñas que un tamaño de bloque de borrado instantáneo: el software termina duplicando las partes no tocadas en un nuevo bloque físico y eso cuesta borrar la vida, independientemente de si lo hace el código del sistema de archivos del sistema operativo o el código interno a la unidad.
Chris Stratton
1

Sí, es posible, sin embargo, al hacerlo, la unidad se llenará mucho más rápido de lo que debería. Para archivos de menos de 512K, cada archivo ocuparía un total de 4096K (4MB) y llenaría el resto del sector con 0 debido a la incapacidad de la mayoría de los sistemas de archivos (NTFS y similares) para permitir que los archivos compartan sectores. La mejor opción para un sistema de archivos sería permitir tamaños de sector variables, sin embargo, esto aumenta el tamaño de la MFT (tabla maestra de archivos) y aumenta el riesgo de corrupción de datos al tiempo que reduce la capacidad de recuperar datos fácilmente. En otras palabras, los límites no serían completamente conocidos por el software de recuperación. Entonces, si bien un tamaño de sector lógico de 4096K es increíble para archivos grandes, para una PC normal de uso diario, es solo un montón de ceros. Ahora, con eso dicho, existe la opción de almacenar datos en la propia MFT cuando se trata de datos más pequeños que el tamaño del sector lógico. Esto, sin embargo, significa que su MFT se vuelve enorme y los datos se escribirían dos veces (hay dos copias de la MFT en su HDD). También tendría que especificar el tamaño máximo de la MFT, lo que puede causar problemas cuando alcanza su máximo o el uso de la unidad excede lo que la MFT podría usar. Todo esto se basa en el uso de un sistema de archivos NTFS. En el lado positivo de las cosas, NTFS le permite usar compresión nativa para archivos en el nivel de bloque para cualquier tamaño de sector lógico de 4 MB o menos. Esta limitación se aplica debido a la forma en que funciona la compresión NTFS. Los bloques de 4 MB se leen y comprimen independientemente del tamaño del sector lógico. Esto, por supuesto,

Entonces, ¿esto te aclara un poco las cosas?

D337z
fuente
Creo que esta respuesta sería mejor si no usara NTFS como sistema de archivos de ejemplo, ya que (a menos que las cosas hayan cambiado en los últimos años) no es compatible o no está bajo Unix y sus amigos
Fox
La K significa Kilo, que es un prefijo de unidad métrica que significa mil. 4 MiB es 1024 sectores y no 1 como usted sugiere. 4096 bytes son 4 KiB o 0,00390625 MiB.
Aeyoun
Esta no es una respuesta. OP está hablando del tamaño de sector de HDD, no del tamaño de bloque del sistema de archivos. Esa es una capa diferente.
炸鱼 薯条 德里克
-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.
Thomas
fuente
Te perdiste al escribir la fuente de esta cita. En otras manos, creo que esto es una copia de su comentario anterior aquí: superuser.com/a/1372494/141252
andras.tim