Optimieren der logischen Sektorgröße für die Festplatte mit der physischen Sektorgröße 4096

20

Bei vielen neuen Festplatten beträgt die physische Sektorgröße 4096. Wäre es möglich, dass das System eine logische Sektorgröße derselben Größe anstelle der standardmäßigen logischen Sektorgröße von 512 verwendet?

Wird es Massenlese- und Schreibvorgänge beschleunigen? Wo kann es konfiguriert werden?

Matan
quelle
Unter unix.stackexchange.com/a/18542/1131 finden Sie Kommentare zu Ausrichtungsproblemen. Aktuelle Versionen von mkfs.*sollten automatisch die optimale Sektorgröße verwenden. Sie können einige mkfs.*Tests durchführen und das Ergebnis überprüfen (entweder in der ausführlichen Ausgabe von mkfs oder in einem verwandten Dienstprogramm fs).
Maxschlepzig,
Vielen Dank, aber keine Ausrichtungsprobleme
Matan

Antworten:

29

512 Byte ist nicht wirklich die Standardsektorgröße. Das hängt von Ihrer Hardware ab.

Über das /sysPseudodateisystem können Sie beispielsweise anzeigen, welche physischen / logischen Sektorgrößen Ihre Festplatte meldet :

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

Was ist der Unterschied zwischen diesen beiden Werten?

  • Dies physical_block_sizeist die minimale Größe eines Blocks, den das Laufwerk in einer atomaren Operation schreiben kann.
  • Dies logical_block_sizeist die kleinste Größe, die das Laufwerk schreiben kann (siehe die Dokumentation zum Linux-Kernel).

Wenn Sie also ein 4-KB-Laufwerk haben, ist es sinnvoll, dass Ihr Speicherstapel (Dateisystem usw.) etwas verwendet, das der Größe des physischen Sektors entspricht oder darüber liegt.

Diese Werte werden auch in neueren Versionen angezeigt fdisk, beispielsweise von:

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

Auf aktuellen Linux-Distributionen mkfs.xfswählen Programme (die sich um die optimale Sektorgröße kümmern sollten) wie standardmäßig die optimale Sektorgröße (z. B. 4096 Bytes).

Sie können es aber auch explizit über eine Option angeben, zum Beispiel:

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

Oder:

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

In jedem Fall mkfszeigen die meisten Varianten während der Ausführung auch die verwendete Blockgröße an.

Für ein vorhandenes Dateisystem kann die Blockgröße mit einem Befehl wie folgt bestimmt werden:

# 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

Oder:

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

Oder:

# 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

Wenn Sie das Dateisystem auf einer Partition erstellen, müssen Sie außerdem prüfen, ob die Startadresse der Partition tatsächlich an der physischen Blockgröße ausgerichtet ist. Schauen Sie sich zum Beispiel die fdisk -lAusgabe an, konvertieren Sie die Startadressen in Bytes, dividieren Sie sie durch die physische Blockgröße - die Erinnerung muss Null sein, wenn die Partitionen ausgerichtet sind.

maxschlepzig
quelle
Vielen Dank, Ihre Erklärung dessen, was Linux als logische und physikalische Blockgrößen bezeichnet, war sehr hilfreich. Ich bin kürzlich auf eine Situation gestoßen, in der dieselbe 8-TB-Festplatte als 512-Byte-Blöcke in einem USB-Gehäuse und als 4-KB-Blöcke in einem anderen, sowohl logischen als auch physischen, angezeigt wurde. Ich dachte, etwas stimmte nicht, weil Linux die Partitionszuordnung nicht sah, als ich die Gehäuse wechselte, aber dann stellte ich fest, dass GPT auf dem zweiten logischen Block startet, sodass es nur an der falschen Stelle für die neue Ausrichtung war. Ich habe gdisk verwendet, um eine einzelne große Partition neu zu erstellen, und alle meine Daten waren noch da (ext4 mit 4K-Blöcken).
Raptor007
Ist die von Ihnen beschriebene Methode zur Überprüfung der Ausrichtung zuverlässig? Ich habe das Dienstprogramm "parted" verwendet und es wurde gemeldet, dass eine Festplattenpartition ausgerichtet ist, aber bei Ihrem Ansatz habe ich die physische Blockgröße abgefragt, 512 abgerufen und dann die Startadresse der Partition fdisk -labgerufen, durch 8 geteilt und dann 512 Der Rest war nicht 0, daher scheint die Partition nicht ausgerichtet zu sein
user907860
1
@ user907860 Warum dividieren Sie durch 8? Ein fdisk -lBericht Units = sectors of 1 * 512 = 512 bytesin einem meiner Linux-Systeme - also für ein 512/4096 logisch / physikalisches Laufwerk mit 2 Partitionen ab 2048 und 1026048 - berechne ich 2048*512%4096und 1026048*512%4096- zB in einer Python-Shell. Da beide Ausdrücke gleich Null sind, sind diese Partitionen 4k ausgerichtet.
Maxschlepzig
Vielen Dank für die Erklärung. Ich habe nicht bemerkt, dass es sich bei der Zahl um Sektoren und nicht um Bits handelt. Ich habe die Antwort vor ein paar Monaten hochgestuft, kann es leider nicht noch einmal tun
user907860
2

Nein, es ist nicht möglich und es wäre auch egal, wenn es so wäre. E / A-Vorgänge werden in der Regel in Einheiten von mindestens 4096 Bytes ausgeführt, und in der Regel in viel mehr.

Psusi
quelle
2
Ich bin mir nicht sicher, in welchem ​​Zusammenhang diese Aussage zu meiner Frage steht. Die logische Sektorgröße kann bedeuten, dass in einem Teil der E / A-Pipeline kleinere Teile vorhanden sind und die Festplattenfirmware unnötig emuliert werden muss. Möchten Sie das klären?
Matan,
2
@Matan, ich kann aus deinem Kommentar überhaupt keinen Sinn machen. Ich habe erklärt, dass die E / A-Operation nicht mit jeweils 512 Byte ausgeführt wird, sodass die Tatsache, dass die Festplatte in 512-Byte-Sektoren adressiert ist, keine Rolle spielt. Das Laufwerk muss nur emulieren, wenn Sie versuchen, einen Schreibvorgang auszuführen, der nicht auf 4 KB ausgerichtet ist. Da E / A-Vorgänge normalerweise ohnehin in Vielfachen von 4 KB ausgeführt werden und moderne Partitionierungstools sicherstellen, dass die Partition an einer Grenze von 4 KB beginnt. das wird nicht passieren.
Psusi
1
Diese "Antwort" ist sowohl in ihren Behauptungen als auch in ihren Schlussfolgerungen völlig falsch. Die logische Größe wird festgelegt, wenn ein Volume formatiert wird. Fehlanpassungen zwischen logischer und physischer Größe verursachen bei Technologien wie Flash-basierten Speichern erhebliche Kosten.
Chris Stratton
@ChrisStratton, nein, Sie denken an die Block- / Clustergröße des Dateisystems. Die Größe des logischen Sektors ist die Größe eines Sektors, den das Laufwerk dem Betriebssystem meldet. Es kann nur Einheiten dieser Größe oder ein Vielfaches dieser Größe lesen und schreiben, und die Sektoren werden in Einheiten dieser Größe nummeriert. Vergleichen Sie dies mit der physischen Sektorgröße, bei der einige Laufwerke tatsächlich 4-KByte-Sektoren intern lesen und schreiben, aber so tun, als würden sie 512-Byte-Sektoren verwenden, um die Abwärtskompatibilität mit älteren Betriebssystemen zu gewährleisten, die 4-KByte-logische Sektoren nicht verarbeiten können.
Psusi
Falsch. Das Problem tritt immer dann auf, wenn Sie Software haben, die versucht, mit Einheiten zu arbeiten, die kleiner als die physische Größe des Speichersystems sind. Dies gilt insbesondere für Logikeinheiten, die kleiner als ein Flash-Löschblock sind - die Software muss die unberührten Teile in einen neuen physischen Block duplizieren, und dies kostet die Löschung der Lebensdauer, unabhängig davon, ob dies durch den Dateisystemcode des Betriebssystems oder durch den Code erfolgt intern auf dem Laufwerk.
Chris Stratton
1

Ja, dies ist möglich, würde jedoch dazu führen, dass sich das Laufwerk viel schneller füllt, als es sollte. Bei Dateien mit weniger als 512 KB würde jede Datei dann volle 4096 KB (4 MB) belegen und den Rest des Sektors mit Nullen füllen, da die meisten Dateisysteme (NTFS und dergleichen) keine gemeinsamen Sektoren für Dateien zulassen. Die beste Option für ein Dateisystem wäre, variable Sektorgrößen zuzulassen. Dies erhöht jedoch die Größe der MFT (Master-Dateitabelle) und erhöht das Risiko einer Datenbeschädigung, während die Fähigkeit zur einfachen Wiederherstellung von Daten verringert wird. Mit anderen Worten, die Grenzen wären der Wiederherstellungssoftware nicht vollständig bekannt. Während eine logische Sektorgröße von 4096 KB für große Dateien fantastisch ist, sind es für einen PC mit normalem Alltagsgebrauch nur ein paar Nullen. Nun, mit diesen Worten: Es besteht die Möglichkeit, Daten in der MFT selbst zu speichern, wenn es sich um Daten handelt, die kleiner als die logische Sektorgröße sind. Dies bedeutet jedoch, dass Ihre MFT sehr groß wird und die Daten zweimal geschrieben werden (auf Ihrer Festplatte befinden sich zwei Kopien der MFT). Sie müssten auch die maximale Größe der MFT angeben, die zu Problemen führen kann, wenn entweder die maximale Größe erreicht wird oder die Laufwerksauslastung die für die MFT freie Größe überschreitet. All dies basiert auf der Verwendung eines NTFS-Dateisystems. Auf der helleren Seite können Sie mit NTFS die native Komprimierung für Dateien auf Blockebene für alle logischen Sektoren mit einer Größe von 4 MB oder weniger verwenden. Diese Einschränkung wird aufgrund der Funktionsweise der NTFS-Komprimierung angewendet. 4-MB-Blöcke werden unabhängig von der Größe des logischen Sektors gelesen und komprimiert. Dies ist natürlich

Also, klärt das die Dinge für Sie ein bisschen auf?

D337z
quelle
Ich denke, diese Antwort wäre besser, wenn NTFS nicht als Beispiel-Dateisystem verwendet würde, da es (sofern sich die Dinge nicht in den letzten Jahren geändert haben) unter Unix und Freunden
Fox
Das K steht für Kilo, ein metrisches Präfix für 1000. 4 MiB sind 1024 Sektoren und nicht 1, wie Sie vorschlagen. 4096 Bytes sind 4 KiB oder 0,00390625 MiB.
Aeyoun
Dies ist keine Antwort. OPs sprechen von der Sektorgröße der Festplatte, nicht von der Blockgröße des Dateisystems. Das ist eine andere Schicht.
炸鱼 炸鱼 德里克
-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.
Thomas
quelle
Sie haben versäumt, die Quelle dieses Zitats aufzuschreiben. In anderen Händen, ich denke , das eine Kopie der vorherigen Kommentar ist hier: superuser.com/a/1372494/141252
andras.tim