Wie teste ich, ob alle Schreibvorgänge auf meiner Festplatte auf die 4k-Sektoren ausgerichtet sind?

9

Ich verwende Linux mit 4 Festplatten, die 4k-Sektoren verwenden. Zwischen meinem Dateisystem und den Raw-Geräten befinden sich mehrere Ebenen: Festplatten> Linux Raid 5> dm-crypt> LVM.

Jede Ressource, die ich gefunden habe, hat erklärt, wie jede Ebene eingerichtet wird, um sicherzustellen, dass Schreibvorgänge auf dieser Ebene an der 4k-Sektorgrenze ausgerichtet werden. Ich habe jedoch nichts gefunden, was erklärt, wie überprüft werden kann, ob die auf die Festplatten vorgenommenen Schreibvorgänge tatsächlich an 4k-Grenzen stattfinden.

Ich bin nicht daran interessiert, mein Setup erneut zu überprüfen, um mithilfe von Logik festzustellen, ob es richtig ausgerichtet ist. Ich möchte untersuchen, was tatsächlich passiert, wenn Schreibvorgänge auf die Festplatte ausgeführt werden.

Wie kann ich die Adressen und die Größe der Schreibvorgänge protokollieren oder anzeigen, die auf meine Festplatten ausgeführt werden, damit ich überprüfen kann, ob sie korrekt ausgerichtet sind?

Brian Pellin
quelle

Antworten:

2

Habe mir vor einiger Zeit die gleiche Frage gestellt und einfach folgendes gemacht:

Schrieb ein paar Mal mit der Shell eine ziemlich ungewöhnliche Zeichenfolge in eine Datei (so etwas wie "WackaWacka"). Dann suchte man einfach mit einem Hex-Dump (verwendet od ) den tatsächlichen Inhalt der Festplatte und überprüfte, ob das erste Auftreten der Zeichenfolge gespeichert wurde genau am Anfang eines 4k Blocks.

Hinweis: Verwenden Sie keinen Editor. Möglicherweise werden temporäre Dateien erstellt, von denen Sie nicht wissen, dass sie auch die Zeichenfolgen enthalten können. Mach es so:

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

Also kann .sh_history die Suchzeichenfolge enthalten, aber nicht fünfmal hintereinander ;-)

Und dann suchen Sie einfach:

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

Nun, es ist am besten auf einer ziemlich leeren Festplatte, um zu vermeiden, dass Gigabyte an Daten durchsucht werden ;-)

ktf
quelle
1
Da dm-crypt eine der Ebenen in meinem Stapel ist, reicht diese Lösung nicht aus, da diese Zeichen nicht auf die Festplatte geschrieben werden.
Brian Pellin
Das ist schlecht. Die einzige andere Lösung, die ich mir vorstellen kann, besteht darin, einen 4k-Block in einer Datei explizit zu ändern und zu überprüfen, ob sich nur der Inhalt eines physischen Blocks auf der Festplatte geändert hat (oder ob zwei aufeinanderfolgende Blöcke betroffen sind) - und dies funktioniert nur, wenn die Daten nicht komprimiert sind durch die Verschlüsselungsschicht. Dennoch muss man wissen, auf welchem Datenträger-Block die Datei gespeichert ist und für die Suche irgendwelchen Änderungen auf große Platten schwierig sein kann.
Ktf
2

Schreiben Sie einen 4k-Block und beobachten Sie, mit wie vielen Daten gelesen / geschrieben wird iostat(Die Spalten 'Blk_read' 'Blk_wrtn'). Wenn die Daten nicht ausgerichtet sind, löst ein Schreibvorgang zuerst Lesevorgänge und mehr als 4 KB Schreibvorgänge aus.

Sie müssen jedoch darauf achten, keine Metadatenaktualisierungen zu messen ... oder sie einfach zu übertönen, indem Sie Tausende von 4k-Schreibvorgängen ausführen ... Stellen Sie also sicher, dass nichts anderes Datenträger scannt oder geöffnete Dateien enthält (glaube lsofich) ausreichend?), dann eine neue Datei öffnen, warten, ausführen iostat, 4k in die Datei schreiben, das Schreiben synchronisieren (oder einfach eine Weile warten?) und dann iostaterneut prüfen .

Dies scheint für mich eine vernünftige Leistung zu liefern:

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

iostatDie Manpage von Note behauptet, in 512-Byte-Blöcken zu berichten, und ich sehe, dass etwas mehr als 80000 zusätzliche Blöcke geschrieben und keine Blöcke gelesen wurden. Wenn Ihre Ausrichtung deaktiviert ist, wird eine ähnliche Anzahl von Lesevorgängen angezeigt (da zum Schreiben eines falsch ausgerichteten 4k die beiden betroffenen Blöcke gelesen, mutiert und zurückgeschrieben werden müssen). Tatsächlich ist der einzige Grund, warum die Ausrichtung wichtig ist, das Vermeiden solcher Lesevorgänge (also ist das wirklich das, wonach Sie suchen möchten: Löst ein Schreib-Workload Lesevorgänge aus?)

PT
quelle
Wissen Sie, ob iostat über die Anzahl der Lese- / Schreibvorgänge berichtet, die das Betriebssystem an das Blockgerät sendet, oder basiert diese Zahl auf dem Laufwerk, das angibt, wie viele Blöcke es gelesen und geschrieben hat?
Brian Pellin
Ich vermute, dass es von der OS-Blockgeräte-Abstraktion stammt, nicht direkt vom Laufwerk, aber ich weiß es nicht genau. Ich bin mir auch nicht sicher, ob es "über" oder "unter" der dm-crypt-Schicht sein würde.
PT