it-swarm.com.de

Optimierung der logischen Sektorgröße für die physische Sektorgröße 4096 HDD

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?

Beschleunigt es das Lesen und Schreiben in großen Mengen? Wo kann es konfiguriert werden?

23
Matan

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

Sie können anzeigen, welche physischen/logischen Sektorgrößen Ihre Festplattenberichte über /sys Pseudo-Dateisystem, zum Beispiel:

# 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?

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

Wenn Sie also ein 4k-Laufwerk haben, ist es sinnvoll, dass Ihr Speicherstapel (Dateisystem usw.) etwas verwendet, das gleich oder größer als die Größe des physischen Sektors ist.

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

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

Bei aktuellen Linux-Distributionen können Programme (die sich um die optimale Sektorgröße kümmern sollten) wie mkfs.xfs wählt standardmäßig die optimale Sektorgröße aus (z. B. 4096 Byte).

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 zeigen die meisten mkfs -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 dem folgenden 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 das fdisk -l ausgeben, die Startadressen in Bytes konvertieren, durch die physische Blockgröße dividieren - die Erinnerung muss Null sein, wenn die Partitionen ausgerichtet sind.

30
maxschlepzig

Nein, es ist nicht möglich und es wäre auch nicht wichtig, wenn es so wäre. IO wird normalerweise sowieso in Einheiten von mindestens 4096 Bytes und normalerweise viel mehr ausgeführt.

2
psusi

Ja, es ist möglich, aber dies würde dazu führen, dass sich das Laufwerk viel schneller füllt als es sollte. Bei Dateien mit weniger als 512 KB belegt jede Datei dann volle 4096 KB (4 MB) und füllt den Rest des Sektors mit Nullen, da die meisten Dateisysteme (NTFS und dergleichen) nicht in der Lage sind, Dateien für die gemeinsame Nutzung von Sektoren zu verwenden. Die beste Option für ein Dateisystem besteht darin, variable Sektorgrößen zuzulassen. Dies erhöht jedoch die Größe der MFT (Master File Table) 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 normalen PC für den täglichen Gebrauch nur ein paar Nullen. Nach alledem besteht nun die Möglichkeit, Daten in der MFT selbst zu speichern, wenn es um Daten geht, die kleiner als die logische Sektorgröße sind. Dies bedeutet jedoch, dass Ihre MFT sehr groß wird und 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 Sie entweder die maximale Größe erreichen oder die Laufwerksnutzung die für die MFT freie Nutzung ü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 jede logische Sektorgröß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 kann natürlich bei einer Sektorgröße von mehr als 4 MB nicht auftreten, da dann Grenzen überschritten werden und Daten verloren gehen.

Klärt das die Dinge für Sie ein bisschen auf?

1
D337z