Das ist eine dunkle Frage, ich weiß. Ich versuche, einige Festplatten auf einer Linux-Box auf Leistung zu testen. Ich erhalte einige inkonsistente Ergebnisse und führe denselben Test auf derselben Festplatte aus. Ich weiß, dass Festplatten eine unterschiedliche Leistung haben, je nachdem, auf welchen Teil der Festplatte zugegriffen wird. Insbesondere Lese- und Schreibvorgänge an der Außenseite der Platte haben aufgrund der nahezu konstanten Datendichte und der konstanten Drehzahl einen viel höheren Durchsatz als Lese- und Schreibvorgänge an der Innenseite der Platte.
Ich würde gerne sehen, ob meine Inkonsistenzen auf diese geometriebedingte Varianz im Durchsatz zurückzuführen sind. Ist es möglich, mit vorhandenen Tools herauszufinden, wo auf der Festplatte eine Datei abgelegt wurde?
Wenn nicht, kann ich wahrscheinlich etwas schreiben, um die Gerätedatei selbst direkt zu suchen, zu lesen und zu schreiben, wobei das Dateisystem umgangen (und zerstört) wird, aber ich hoffe, dies zu vermeiden. Ich verwende derzeit ext4 auf einem 3.0-Kernel (Arch Linux, falls wichtig), interessiere mich aber auch für Techniken für andere Dateisysteme.
quelle
Antworten:
Sie könnten dafür verwenden
debugfs
:Ändern Sie die Festplatte / Partition entsprechend und stellen Sie sicher, dass die Festplatte nicht gemountet ist. Sie erhalten eine Liste mit allen verwendeten Blöcken:
quelle
Sie können die Verwendung FIBMAP ioctl , wie sie beispielhaft hier , oder unter Verwendung von hdparm :
quelle
HDIO_GETGEO failed: Inappropriate ioctl for device
Dieser Thread gibt Ihnen möglicherweise einen Einblick in den Algorithmus zur Platzierung von ext4-Dateien.
debugfs
hat einebmap
Funktion, die die gewünschten Daten zu geben scheint. Sie sollten in der Lage sein, aufeinanderfolgende Blöcke einer Datei zu vergeben und die physischen Blocknummern abzurufen.quelle
Die Frage ist ziemlich alt, aber es gibt eine andere Antwort, die für diejenigen nützlich sein könnte, die dies bei Google finden:
filefrag
(in Debian ist es im Paket enthaltene2fsprogs
).Es hat den Vorteil, dass es auch für andere Dateisysteme funktioniert (ich habe es für UDF verwendet), die von anderen hier beschriebenen Tools nicht unterstützt zu werden scheinen.
Der in der Ausgabe dargestellte Versatz soll ein Vielfaches der in der zweiten Zeile (hier 4096) angegebenen Blockgröße sein. Beachten Sie, dass logische Offsets möglicherweise nicht zusammenhängend sind, da eine Datei Lücken aufweisen kann (sofern dies vom Dateisystem unterstützt wird).
quelle