Comment puis-je tester pour voir si toutes les écritures sur mon disque dur sont alignées sur ses secteurs 4k?

9

J'utilise Linux avec 4 disques durs qui utilisent des secteurs 4k. Il existe plusieurs couches entre mon système de fichiers et les périphériques bruts: Disques> Linux Raid 5> dm-crypt> LVM.

Chaque ressource que j'ai trouvée a expliqué comment configurer chaque couche pour garantir que les écritures au-dessus de cette couche seront alignées sur la limite du secteur 4k. Cependant, je n'ai rien trouvé qui explique comment vérifier que les écritures effectuées sur les disques durs se produisent réellement aux limites de 4k.

Je ne suis pas intéressé à réexaminer ma configuration pour utiliser la logique afin de déterminer si elle est correctement alignée. Je veux examiner ce qui se passe réellement lorsque des écritures sont effectuées sur le disque.

Comment puis-je enregistrer ou afficher les adresses et la taille des écritures qui sont effectuées sur mes disques durs, afin de pouvoir vérifier qu'elles sont correctement alignées?

Brian Pellin
la source

Réponses:

2

Je me suis posé la même question il y a quelque temps et j'ai simplement fait ce qui suit:

A écrit avec le shell plusieurs fois une chaîne plutôt inhabituelle dans un fichier (quelque chose comme "WackaWacka") Puis a simplement recherché avec un vidage hexadécimal (utilisé od ) le contenu réel du disque et vérifié si la première occurrence de la chaîne a été stockée exactement au début d'un bloc de 4k.

Astuce: n'utilisez pas d'éditeur - il peut créer des fichiers temporaires dont vous ne connaissez pas qui peuvent également contenir les chaînes. Faites-le de cette façon:

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

Donc .sh_history peut contenir la chaîne de recherche, mais pas 5 fois de suite ;-)

Et puis, recherchez simplement:

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

Eh bien, il vaut mieux le faire sur un disque plutôt vide pour éviter de parcourir des gigaoctets de données ;-)

ktf
la source
1
Étant donné que dm-crypt est l'une des couches de ma pile, cette solution n'est pas suffisante, car ces caractères ne seront pas écrits sur le disque.
Brian Pellin
C'est mauvais. La seule autre solution à laquelle je pourrais penser est de changer explicitement un bloc 4k dans un fichier et de vérifier si seul le contenu d'un bloc physique sur le disque a changé (ou si deux blocs consécutifs sont affectés) - et cela ne fonctionnera que si les données ne sont pas compressées par la couche de chiffrement. Néanmoins , il faut savoir, sur quel disque bloc le fichier est stocké et la recherche de tout changement peut être difficile sur les grands disques.
ktf
2

Écrivez un bloc de 4k et regardez combien de données sont lues / écrites avec iostat(les colonnes 'Blk_read' 'Blk_wrtn'). Si les données ne sont pas alignées, une écriture déclenchera les lectures en premier et déclenchera plus de 4 000 écritures.

Vous devrez faire attention de ne pas mesurer les mises à jour de métadonnées, mais ... ou tout simplement les noyer en faisant 1000s de 4k .... écrit Donc , assurez - vous que rien d' autre numérise des disques ou des fichiers ouverts maintenant (je pense lsofserait suffisant?), puis ouvrez un nouveau fichier, attendez, exécutez iostat, écrivez 4k dans le fichier, synchronisez l'écriture (ou attendez un peu?), puis vérifiez à iostatnouveau.

Cela semble donner une sortie raisonnable pour moi:

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

iostatLa page de manuel de Note prétend rapporter dans des blocs de 512 octets, et je vois qu'un peu plus de 80000 blocs supplémentaires ont été écrits, et aucun bloc n'a été lu. Si votre alignement est désactivé, vous verrez un nombre similaire de lectures (car pour écrire un 4k mal aligné, il faut lire les deux blocs impactés, les muter et les réécrire). En fait, la seule raison pour laquelle l'alignement est important est d'éviter de telles lectures (c'est donc vraiment ce que vous voulez rechercher: un déclencheur de charge d'écriture lit-il?)

PT
la source
Savez-vous si iostat signale le nombre de lectures / écritures que le système d'exploitation effectue sur le périphérique de bloc, ou ce nombre est-il basé sur le lecteur indiquant le nombre de blocs qu'il a lu et écrit?
Brian Pellin,
Je soupçonne que c'est de l'abstraction du périphérique de blocage du système d'exploitation, pas directement du lecteur, mais je ne sais pas avec certitude. Je ne suis pas sûr non plus que ce soit "au-dessus" ou "en dessous" de la couche dm-crypt.
PT