Unterschied zwischen Blockgröße und Clustergröße

20

Ich habe eine Frage zur Blockgröße und Clustergröße. In Bezug auf das, was ich darüber gelesen habe, gehe ich von Folgendem aus:

  • Die Blockgröße ist die physikalische Größe eines Blocks, meistens 512 Bytes. Es gibt keine Möglichkeit, dies zu ändern.
  • Die Clustergröße ist die Mindestgröße eines Blocks, der vom Betriebssystem gelesen und beschrieben werden kann. Wenn ich ein neues Dateisystem z. B. ext3 erstelle, kann ich diese minimale Blockgröße mit dem Schalter -b festlegen. Fast alle Programme wie dumpe2fs und mke2fs verwenden die Blockgröße als Namen für die Clustergröße.

Wenn ich die folgende Ausgabe habe:

$ stat test
File: `test'
Size: 13            Blocks: 4          IO Block: 2048   regular file
Device: 700h/1792d  Inode: 15          Links: 1

Stimmt es, dass die Größe der tatsächliche Speicherplatz in Byte ist, Blöcke die physisch verwendeten Blöcke (jeweils 512 Byte) sind und der E / A-Block sich auf die Blockgröße bezieht, die beim Erstellen des FS angegeben wurde?

pluckyDuck
quelle

Antworten:

26

Ich glaube, Sie sind verwirrt, möglicherweise, weil Sie mehrere Dokumente gelesen haben, die unterschiedliche Begriffe verwenden. Begriffe wie „Blockgröße“ und „Clustergröße“ haben auch im Kontext der Dateisystemliteratur keine universelle Bedeutung.

Dateisysteme

Für ext2 oder ext3 ist die Situation relativ einfach: Jede Datei belegt eine bestimmte Anzahl von Blöcken . Alle Blöcke in einem bestimmten Dateisystem haben dieselbe Größe, normalerweise eines von 1024, 2048 oder 4096 Bytes. Eine Datei¹, deren Größe zwischen N Blöcken plus einem Byte und N + 1 Blöcken liegt, belegt N + 1 Blöcke. Diese Blockgröße legen Sie mit fest mke2fs -b. Es gibt keine getrennte Vorstellung von Clustern.

Das FAT- Dateisystem, das insbesondere von MS-DOS und früheren Versionen von Windows verwendet wird, weist eine ähnlich einfache Speicherplatzzuordnung auf. Was ext2 Blöcke aufruft, ruft FAT Cluster auf . Das Konzept ist das gleiche.

Einige Dateisysteme verfügen über ein komplexeres Zuordnungsschema: Sie haben Blöcke mit fester Größe, können jedoch denselben Block zum Speichern der letzten Bytes von mehr als einer Datei verwenden. Dies wird als Blockunterzuordnung bezeichnet . Reiserfs und Btrfs machen das, aber nicht ext3 oder ext4.

Dienstprogramme

Unix-Dienstprogramme verwenden häufig das Wort "Block", um eine Einheit beliebiger Größe zu bezeichnen, in der Regel 512 Byte oder 1 KB. Diese Verwendung steht in keinem Zusammenhang mit einem bestimmten Dateisystem oder einer bestimmten Festplattenhardware. In der Vergangenheit ist der 512B-Block entstanden, weil Festplatten und Dateisysteme zu der Zeit oft in 512B-Blöcken betrieben wurden, aber die moderne Verwendung ist nur willkürlich. Herkömmliche Unix-Dienstprogramme und -Schnittstellen verwenden manchmal immer noch 512-Byte-Blöcke, obwohl 1- KB-Blöcke heutzutage häufig bevorzugt werden . Sie müssen die Dokumentation jedes Dienstprogramms überprüfen, um festzustellen, welche Blockgröße es verwendet (einige haben einen Schalter, z. B. du -Boder df -Bunter Linux).

Im GNU / Linux- statDienstprogramm gibt die blocksZahl die Anzahl der von der Datei verwendeten 512B-Blöcke an. Die IO BlockZahl ist die bevorzugte Größe für die Eingabe / Ausgabe von Dateien, die im Prinzip unabhängig ist, aber normalerweise einen Hinweis auf die Blockgröße des zugrunde liegenden Dateisystems (oder die Clustergröße, wenn Sie sie so nennen möchten) gibt. Hier haben Sie eine 13-Byte-Datei, die einen Block im ext3-Dateisystem mit einer Blockgröße von 2048 belegt. Daher belegt die Datei 4 512-Byte-Einheiten (von "Blöcken" genannt stat).

Festplatten

Die meisten Festplatten verfügen über eine Schnittstelle, die die Festplatte als eine Reihe von Sektoren anzeigt . Die Festplatte kann nur einen ganzen Sektor schreiben oder lesen, keine einzelnen Bits oder Bytes. Die meisten Festplatten haben 512-Byte-Sektoren, obwohl 4-KB-Sektoren vor ein paar Jahren aufgetaucht sind.

Die Größe des Festplattensektors steht nicht in direktem Zusammenhang mit der Blockgröße des Dateisystems, aber es ist für die Leistung besser, wenn ein Block aus einer ganzen Anzahl von Sektoren besteht.

¹ Ausnahme: Dateien mit geringer Dichte sparen Platz.

Gilles 'SO - hör auf böse zu sein'
quelle
2
Vielen Dank für Ihre Klarstellung. Ich bin wegen der Verwirrung hierher gekommen, die durch das ext2fsd-Tool für Windows verursacht wurde. Die Befehlszeilenoptionen beginnen mit: ´Verwendung: mke2fs [-c | -l Dateiname] [-b Blockgröße] [-C Clustergröße] ... ´ Nun, Sie sehen, sowohl Block- als auch Clustergröße ...
Bernhard Hiller
Mich interessiert auch, was der Unterschied zwischen der Blockgröße und der Clustergröße von mke2fs ist. Weiß jemand ?
X.LINK
1
@ X.LINK Es wird in der Manpage erklärt. Die Clustergröße wird von der bigalloc-Funktion verwendet , die, wenn ich richtig verstehe, den Zugriff auf große Dateien auf Kosten von mehr Speicherplatz beschleunigt.
Gilles 'SO- hör auf böse zu sein'