Primero creo una partición correctamente alineada en una nueva tabla GPT usando parted especificando porcentajes para el inicio y el final de la partición:
# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 1%
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB primary
(parted) quit
Tenga en cuenta que este disco está usando el formato avanzado, pero informa correctamente el tamaño del sector físico 4096Ba Parted. Miremos de nuevo, usando sectores como la unidad:
# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 2048s 4095s 2048s primary
(parted) quit
- ¿Por qué comenzó la partición
2048sy no34scuál es el primer sector posible ? 34sno es un sector de inicio correctamente alineado si el tamaño del sector físico es4096By el tamaño del sector lógico (que es el que especifique en Parted) es512B. Un sector de inicio correctamente alineado es divisible por8(desde el tamaño del sector físico / tamaño del sector lógico =8). Pero eso significa que40ses el primer sector de inicio correctamente alineado, pero no se usa. ¿Por qué?
Si intentamos crear una partición de 100MiBcapacidad correctamente alineada comenzando 40sen una nueva tabla de partición GPT:
# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 40s 204839s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) unit MiB
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 0.02MiB 100MiB 100MiB fat32 primary
(parted)
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 40s 204839s 204800s fat32 primary
(parted)
- Todavía recibimos la
Warning: The resulting partition is not properly aligned for best performance.advertencia, aunque40s204840 (204839s+ 1) son divisibles por8. ¿Por qué?
fuente

optimal_io_sizepistas. Por lo tanto, no hay forma de distinguir entre los dispositivos ATA "heredados" que no proporcionanalignment_offsety el valoralignment_offsetpredeterminado es 0 y los que tienenalignment_offset=0. fdisk / parted usa una alineación de partición de 1 MB para tales unidades.Probablemente agregaré que en Linux uno puede encontrarse en una situación en la
partedque nunca puede pasar una verificación de alineación óptima y mínima al mismo tiempo.La razón de esto es que
parted(al menos a partir de la versión 3.2) se basalibblkid, lo que a su vez informa los valores de/sys/block/<disk>/queue/minimum_io_sizey/sys/block/<disk>/queue/optimal_io_size(ver io-limits.txt ).Entonces, mientras que para un disco de formato avanzado, el primero probablemente sea algo así como 4k, el último puede tener algún valor loco, por ejemplo
65535 * 512 == 33553920.Ahora, si miramos el código fuente, la alineación "adecuada" o de "mejor rendimiento" está definida por la fórmula en parted.c :: division_align_check () :
donde
grain_sizeproviene del tamaño de bloque de E / S anterior,geom.startes nuestro desplazamiento de partición, y el desplazamiento de alineaciónpa->offsetes con frecuencia cero.Por defecto, parted supondría que 1 MiB es óptimo, y ~ 4k es el tamaño de bloque mínimo (no es una simplificación), por lo que estos valores se correlacionarían; sin embargo, si
libblkiddecide lo contrario,partedtiende a confiar en él y reemplaza ese valor predeterminado de 1 MiB con el valor que se encuentra en/sys/block/<disk>/queue/optimal_io_size. (Al mismo tiempo,/sys/block/<disk>/queue/minimum_io_sizees muy probable que le dé el mismo 4096 B.)En ese caso, la verificación óptima separada nunca pasará simultáneamente con la verificación mínima , lo que posiblemente podría ser un poco confuso.
Con eso en mente: si tiene dudas, eche un vistazo
queue/optimal_io_sizeyqueue/minimum_io_size, y si el primero no es divisible por el segundo, simplemente ignore la advertencia de 'separación' y decida usted mismo si desea realizar una verificación óptima o mínima. .fuente