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 4096B
a 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
2048s
y no34s
cuál es el primer sector posible ? 34s
no es un sector de inicio correctamente alineado si el tamaño del sector físico es4096B
y 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 que40s
es el primer sector de inicio correctamente alineado, pero no se usa. ¿Por qué?
Si intentamos crear una partición de 100MiB
capacidad correctamente alineada comenzando 40s
en 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, aunque40s
204840 (204839s
+ 1) son divisibles por8
. ¿Por qué?
fuente
optimal_io_size
pistas. Por lo tanto, no hay forma de distinguir entre los dispositivos ATA "heredados" que no proporcionanalignment_offset
y el valoralignment_offset
predeterminado 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
parted
que 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_size
y/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_size
proviene del tamaño de bloque de E / S anterior,geom.start
es nuestro desplazamiento de partición, y el desplazamiento de alineaciónpa->offset
es 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
libblkid
decide lo contrario,parted
tiende 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_size
es 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_size
yqueue/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