Optimisation de la taille du secteur logique pour la taille du secteur physique 4096 HDD


20

Avec de nombreux nouveaux disques durs, la taille du secteur physique est de 4096. Serait-il possible de faire en sorte que le système utilise une taille de secteur logique de la même taille, plutôt que la taille de secteur logique par défaut de 512?

Cela accélérera-t-il les lectures et les écritures en masse? Où peut-il être configuré?


Voir unix.stackexchange.com/a/18542/1131 pour des commentaires sur les problèmes d'alignement. Les versions récentes de mkfs.*devraient automatiquement utiliser la taille de secteur optimale. Vous pouvez faire des mkfs.*tests et inspecter le résultat (soit dans la sortie détaillée de mkfs ou dans un programme utilitaire fs connexe).
maxschlepzig du

Merci mais pas de problèmes d'alignement
Matan

Réponses:


29

512 octets n'est pas vraiment la taille de secteur par défaut. Cela dépend de votre matériel.

Vous pouvez afficher les tailles de secteurs physiques / logiques que votre disque signale via le /syspseudo système de fichiers, par exemple:

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

Quelle est la différence entre ces deux valeurs?

  • C'est physical_block_sizela taille minimale d'un bloc que le lecteur est capable d'écrire dans une opération atomique.
  • C'est logical_block_sizela plus petite taille que le disque soit capable d'écrire (cf. la documentation du noyau Linux).

Ainsi, si vous avez un lecteur 4k, il est logique que votre pile de stockage (système de fichiers, etc.) utilise quelque chose d'égal ou supérieur à la taille du secteur physique.

Ces valeurs sont également affichées dans les versions récentes de fdisk, par exemple:

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

Sur les distributions Linux actuelles, les programmes (qui devraient se soucier de la taille optimale du secteur) comme mkfs.xfschoisiront la taille optimale du secteur par défaut (par exemple 4096 octets).

Mais vous pouvez également le spécifier explicitement via une option, par exemple:

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

Ou:

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

Dans tous les cas, la plupart des mkfsvariantes afficheront également la taille de bloc utilisée lors de l'exécution.

Pour un système de fichiers existant, la taille du bloc peut être déterminée avec une commande comme:

# 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

Ou:

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

Ou:

# 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

Lors de la création du système de fichiers sur une partition, une autre chose à vérifier est alors si l'adresse de début de la partition est réellement alignée sur la taille du bloc physique. Par exemple, regardez la fdisk -lsortie, convertissez les adresses de début en octets, divisez-les par la taille du bloc physique - le rappel doit être nul si les partitions sont alignées.


Merci, votre clarification de ce que Linux décrit comme des tailles de blocs logiques et physiques a été très utile. Je suis récemment tombé sur une situation où le même disque dur de 8 To apparaissait comme des blocs de 512 octets dans un boîtier USB et des blocs 4K dans un autre, à la fois logique et physique. Je pensais que quelque chose n'allait pas parce que Linux n'a pas vu la carte de partition lorsque j'ai changé de boîtier, mais j'ai trouvé que GPT démarre sur le deuxième bloc logique, donc il était juste au mauvais endroit pour le nouvel alignement. J'ai utilisé gdisk pour recréer une seule grande partition, et toutes mes données étaient toujours là (ext4 avec des blocs 4K).
Raptor007

La méthode que vous avez décrite pour vérifier l'alignement est-elle fiable? J'ai utilisé l'utilitaire "parted" et il a signalé qu'une partition hdd est alignée, mais avec votre approche, j'ai demandé la taille du bloc physique, obtenu 512, puis pris l'adresse de début de la partition fdisk -l, divisée par 8 puis 512. La le reste n'était pas 0, donc la partition ne semble pas alignée
user907860

1
@ user907860 Pourquoi divisez-vous par 8? Un fdisk -lrapport Units = sectors of 1 * 512 = 512 bytesdans l'un de mes systèmes Linux - ainsi, pour un lecteur logique / physique 512/4096 avec 2 partitions à partir de 2048 et 1026048, je calcule 2048*512%4096et 1026048*512%4096- par exemple dans un shell python. Puisque les deux expressions sont égales à zéro, ces partitions sont alignées en 4k.
maxschlepzig

merci beaucoup pour l'explication, je n'ai pas remarqué que le nombre était des secteurs, pas des bits. J'ai voté la réponse il y a quelques mois, malheureusement, je ne peux pas le faire à nouveau
user907860

2

Non, ce n'est pas possible, et cela n'aurait pas d'importance s'il l'était. L'E / S est généralement effectuée en unités d'au moins 4096 octets de toute façon, et généralement beaucoup plus.


2
Je ne sais pas comment cette déclaration se rapporte à ma question .. la taille du secteur logique peut impliquer de plus petits morceaux dans une partie du pipeline IO, ainsi qu'une émulation inutile sur le firmware du disque dur. Voulez-vous clarifier?
Matan

2
@Matan, je ne comprends pas du tout votre commentaire. J'ai expliqué que les E / S ne sont pas exécutées 512 octets à la fois, donc le fait que le disque soit adressé dans des secteurs de 512 octets n'a pas d'importance. La seule fois où le lecteur doit effectuer une émulation est si vous essayez de faire une écriture qui n'est pas alignée en 4k, et puisque les E / S sont normalement effectuées en multiples de 4k de toute façon, et les outils de partitionnement modernes s'assurent que la partition démarre sur une limite de 4k, cela n'arrivera pas.
psusi

1
Cette "réponse" est tout à fait erronée, tant dans ses affirmations que dans ses conclusions. La taille logique est définie lorsqu'un volume est formaté. Les décalages entre la taille logique et la taille physique ont un coût certain dans des technologies telles que le stockage flash.
Chris Stratton

@ChrisStratton, non, vous pensez à la taille du bloc / cluster du système de fichiers. La taille de secteur logique est la taille d'un secteur que le lecteur signale au système d'exploitation, et il ne peut lire et écrire que des unités de cette taille ou un multiple de cette taille, et les secteurs sont numérotés en unités de cette taille. Comparez avec la taille du secteur physique, où certains disques lisent et écrivent des secteurs 4k en interne, mais prétendent qu'ils utilisent des secteurs de 512 octets pour une compatibilité descendante avec les systèmes d'exploitation plus anciens qui ne peuvent pas traiter les secteurs logiques 4k.
psusi

Incorrect. Le problème existe à chaque fois qu'un logiciel essaie de fonctionner sur des unités plus petites que la taille physique du système de stockage. Cela est particulièrement vrai avec des unités logiques plus petites qu'une taille de bloc d'effacement flash - le logiciel finit par devoir dupliquer les parties intactes dans un nouveau bloc physique, et cela coûte la durée de vie de l'effacement, peu importe si cela est fait par le code du système de fichiers du système d'exploitation ou par le code interne au lecteur.
Chris Stratton

1

Oui, c'est possible, mais cela entraînerait le remplissage du lecteur beaucoup plus rapidement qu'il ne le devrait. Pour les fichiers de moins de 512 Ko, chaque fichier occuperait alors un total de 4096 Ko (4 Mo) et remplirait le reste du secteur avec des 0 en raison de l'incapacité de la plupart des systèmes de fichiers (NTFS et similaires) à permettre aux fichiers de partager des secteurs. La meilleure option pour un système de fichiers serait d'autoriser des tailles de secteur variables, mais cela augmente la taille du MFT (table de fichiers maîtres) et augmente le risque de corruption de données tout en réduisant la capacité de récupérer facilement des données. En d'autres termes, les limites ne seraient pas entièrement connues du logiciel de récupération. Ainsi, bien qu'une taille de secteur logique de 4096 Ko soit géniale pour les gros fichiers, pour un PC à usage quotidien normal, ce n'est qu'un tas de 0. Maintenant, cela dit, il y a la possibilité de stocker des données dans le MFT lui-même quand il s'agit de données plus petites que la taille du secteur logique. Cela signifie cependant que votre MFT devient énorme et que les données seront écrites deux fois (il y a deux copies du MFT sur votre disque dur). Vous devrez également spécifier la taille maximale du MFT qui peut causer des problèmes lorsque vous atteignez son maximum ou que l'utilisation du lecteur dépasse ce qui serait gratuit pour le MFT. Tout cela est basé sur l'utilisation d'un système de fichiers NTFS. Du côté positif, NTFS vous permet d'utiliser la compression native pour les fichiers au niveau du bloc pour toute taille de secteur logique de 4 Mo ou moins. Cette limitation est appliquée en raison de la façon dont fonctionne la compression NTFS. Les blocs de 4 Mo sont lus et compressés quelle que soit la taille du secteur logique. Ceci, bien sûr,

Alors, cela clarifie-t-il un peu les choses pour vous?


Je pense que cette réponse serait meilleure s'il n'utilisait pas NTFS comme exemple de système de fichiers, car (sauf si les choses ont changé au cours des dernières années), il n'est pas bien pris en charge ou pas du tout sous Unix et ses amis
Fox

Le K signifie Kilo qui est un préfixe d'unité métrique signifiant mille. 4 Mio, c'est 1024 secteurs et non 1 comme vous le suggérez. 4096 octets est de 4 Ko ou 0,00390625 MiB.
Aeyoun

Ce n'est pas une réponse. OP parle de la taille du secteur du disque dur, pas de la taille du bloc du système de fichiers. C'est une couche différente.
炸鱼 薯条 德里克

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

Vous avez manqué de noter la source de cette citation. Dans d'autres mains, je pense que c'est une copie de votre commentaire précédent ici: superuser.com/a/1372494/141252
andras.tim
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.