ZFS auf Linux/ Glossar/ Blocks

BlocksBearbeiten

In diesem Abschnitt werden die verschiedene Blöcke, ihre Eigenschaften und damit zusammenhängende Eigenschaften der Festplatte erklärt.

SektorenBearbeiten

Ein Sektor bezeichnet bei Festplatten die kleinste Organisationseinheit, die gelesen bzw. geschrieben werden kann.

Zu beachten ist, dass moderne Festplatten das Advanced Format (AF) nutzen. Dabei haben die Sektoren eine Größe von 4 KiB statt der ursprünglichen 512 Byte [1]. Zusätzlich führen diese Festplatten meist eine Emulation von 512 Byte Sektoren durch, um auch mit älteren Betriebssystemen kompatibel zu bleiben. Durch die Anpassung der Blockgröße an die Sektorgröße können überflüssige Lese- und Schreibzugriffe vermieden und somit eine Steigerung der Geschwindigkeit erreicht werden. Werden Festplatten mit AF eingesetzt, sollte die Anpassung immer an die physische Sektorgröße von 4 KiB und nicht an die emulierte Größe erfolgen.


physische BlocksBearbeiten

Die physische Blockgröße, welche sich hinter dem Parameter ashift eines Pools verbirgt, wird häufig auch einfach als Blockgröße bezeichnet. Die physische Blockgröße entspricht der Größe der Einheiten, die auf ein vdev geschrieben bzw. von diesem gelesen werden. Sie ist immer an ein bestimmtes vdev gebunden und wird entweder beim Erstellen eines Pools oder beim Hinzufügen eines vdevs gesetzt. Sobald diese an einen Pool gebunden sind, kann die physische Blockgröße nicht mehr verändert werden. Ein Pool kann jedoch aus vdevs mit verschiedenen Blockgrößen aufgebaut werden. Aufgrund der Endgültigkeit des Wertes ist es wichtig sich vor der Erstellung des Pools Gedanken über die richtige Blockgröße, zu machen. Bei der Verwendung von Festplatten sollte die Blockgröße immer an die Größe der Sektoren angepasst werden.

Die physische Blockgröße entspricht der Größe der Einheiten, die auf ein vdev geschrieben bzw. von diesem gelesen werden. Sie ist immer an ein bestimmtes vdev gebunden und wird entweder beim Erstellen eines Pools oder beim Hinzufügen eines vdevs gesetzt. Sobald diese an einen Pool gebunden sind, kann die physische Blockgröße nicht mehr verändert werden. Ein Pool kann jedoch aus vdevs mit verschiedenen Blockgrößen aufgebaut werden. Aufgrund der Endgültigkeit des Wertes ist es wichtig sich vor der Erstellung des Pools Gedanken über die richtige Blockgröße, zu machen. Bei der Verwendung von Festplatten sollte die Blockgröße immer an die Größe der Sektoren angepasst werden.


logische BlocksBearbeiten

Die logische Blockgröße wird bei einem Volume Dataset als volblocksize, bei einem Filesystem Dataset als recordsize bezeichnet.

Die Recordsize ist für viele der integrierten Funktionen, wie die Komprimierung, die Berechnung der Prüfsummen und die Deduplizierung relevant. Diese werden auf jeden Block einzeln angewendet bzw. beziehen sich auf diese. Sie kann unabhängig von der physischen Blockgröße der vdevs entweder für einen ganzen Pool oder einzelne Datasets gesetzt werden. Des Weiteren ist der Wert veränderlich und kann jederzeit angepasst werden. Zu interpretieren ist die recordsize als eine Obergrenze und nicht als feste Größe. Werden Dateien geschrieben, die kleiner sind, so wird ein kleiner Block angelegt. Sind die Daten größer als die Obergrenze, werden sie über mehrere logische Blöcke verteilt. Diese dynamische Größe hat den entscheidenden Vorteil, dass große Blöcke eingestellt werden können, während kleine Dateien trotzdem keinen ganzen Block belegen. Auf diese Weise wird der von herkömmlichen Dateisystemen bekannte Overhead vermieden. Sollte der Wert nicht explizit gesetzt werden, wird automatisch eine recordsize von 128 KiB genutzt.

Einfluss auf die Geschwindigkeit anderer Funktionen: siehe Kap. xyz


To-Do:

Listen statt Prosa, volblock