Einführung
Linux verfügt über robuste Systeme und Werkzeuge zur Verwaltung von Hardwaregeräten, einschließlich Speicherlaufwerken. In diesem Artikel werden wir auf hoher Ebene behandeln, wie Linux diese Geräte darstellt und wie roher Speicherplatz auf dem Server nutzbar gemacht wird.
Was ist Blockspeicher?
Blockspeicher ist ein anderer Name für das, was der Linux-Kernel als Blockgerät bezeichnet. Ein Blockgerät ist ein Stück Hardware, das zur Datenspeicherung verwendet werden kann, wie eine traditionelle drehende Festplatte (HDD), Solid-State-Drive (SSD), Flash-Speicherstick und so weiter. Es wird als Blockgerät bezeichnet, weil der Kernel mit der Hardware interagiert, indem er auf festgelegte Blockgrößen oder Raumstücke verweist.
Mit anderen Worten, Blockspeicher ist das, was Sie als regulären Festplattenspeicher auf einem Computer betrachten. Einmal eingerichtet, fungiert es als Erweiterung des aktuellen Dateisystembaums, und Sie sollten in der Lage sein, Informationen von jedem Laufwerk austauschbar zu schreiben oder zu lesen.
Was sind Festplattenpartitionen?
Diskpartitionen sind eine Möglichkeit, eine Speicherplatte in kleinere nutzbare Einheiten aufzuteilen. Eine Partition ist ein Abschnitt einer Speicherplatte, der ähnlich wie eine eigene Festplatte behandelt werden kann.
Die Partitionierung ermöglicht es Ihnen, den verfügbaren Speicherplatz zu segmentieren und jede Partition für einen anderen Zweck zu verwenden. Dadurch erhält der Benutzer mehr Flexibilität und kann eine einzelne Festplatte möglicherweise für mehrere Betriebssysteme, Auslagerungsspeicher oder spezialisierte Dateisysteme segmentieren.
Obwohl Festplatten ohne Partitionierung formatiert und verwendet werden können, erwarten Betriebssysteme in der Regel eine Partitionstabelle, selbst wenn nur eine einzelne Partition auf die Festplatte geschrieben wird. Es wird im Allgemeinen empfohlen, neue Festplatten zu partitionieren, um eine größere Flexibilität zu ermöglichen.
MBR vs GPT
Beim Partitionieren einer Festplatte ist es wichtig zu wissen, welche Partitionierung Format verwendet wird. Dies kommt im Allgemeinen auf eine Wahl zwischen MBR (Master Boot Record) und GPT (GUID Partition Table) an.
MBR ist über 30 Jahre alt. Aufgrund seines Alters hat es einige ernsthafte Einschränkungen. Zum Beispiel kann es nicht für Festplatten über 2 TB Größe verwendet werden und kann nur maximal vier primäre Partitionen haben.
GPT ist ein moderneres Partitionierungsschema, das einige der Probleme löst, die im MBR vorhanden sind. Systeme, die GPT ausführen, können deutlich mehr Partitionen pro Festplatte haben. Dies ist normalerweise nur durch die Beschränkungen des Betriebssystems selbst begrenzt. Darüber hinaus gibt es keine Größenbeschränkung für Festplatten mit GPT, und die Informationen zur Partitionstabelle sind an mehreren Stellen verfügbar, um gegen Korruption zu schützen. GPT kann auch eine „schützende MBR“ schreiben, um die Kompatibilität mit MBR-only-Tools zu gewährleisten.
In den meisten Fällen ist GPT die bessere Wahl, es sei denn, Ihr Betriebssystem hindert Sie daran, es zu verwenden.
Formatierung und Dateisysteme
Während der Linux-Kernel eine Rohfestplatte erkennen kann, muss sie formatiert werden, um verwendet zu werden. Die Formatierung ist der Prozess des Schreibens eines Dateisystems auf die Festplatte und der Vorbereitung für Dateioperationen. Ein Dateisystem ist das System, das Daten strukturiert und steuert, wie Informationen auf die zugrunde liegende Festplatte geschrieben und von ihr abgerufen werden. Ohne ein Dateisystem könnten Sie das Speichergerät nicht für Standarddateisystemoperationen verwenden.
Es gibt viele verschiedene Dateisystemformate, von denen jedes seine eigenen Kompromisse hat, einschließlich der Unterstützung durch das Betriebssystem. Sie alle stellen dem Benutzer eine ähnliche Darstellung der Festplatte zur Verfügung, aber die Funktionen und Plattformen, die sie unterstützen, können sehr unterschiedlich sein.
Einige der beliebtesten Dateisysteme für Linux sind:
- Ext4: Das beliebteste Standard-Dateisystem ist Ext4, ein Nachfolger von Ext2 und Ext3. Das Ext4-Dateisystem ist protokolliert, abwärtskompatibel mit älteren Systemen, stabil und verfügt über ausgereifte Unterstützung und Werkzeuge. Es ist eine gute Wahl, wenn Sie keine speziellen Anforderungen haben.
- XFS: XFS ist auf Leistung und große Datenmengen spezialisiert. Es formatiert schnell und weist gute Durchsatzcharakteristiken auf, wenn es mit großen Dateien und großen Festplatten arbeitet. Es verfügt auch über Funktionen zur Live-Snapshot-Erstellung. XFS verwendet die Metadatenprotokollierung anstelle der Protokollierung sowohl der Metadaten als auch der Daten. Dies führt zu schneller Leistung, kann jedoch bei plötzlichem Stromausfall zu Datenbeschädigungen führen.
- Btrfs: Btrfs ist ein modernes, funktionsreiches Dateisystem mit Kopierschreibvorgang. Diese Architektur ermöglicht es, einige Volumenverwaltungsfunktionen in die Dateisystemebene zu integrieren, einschließlich Snapshots und Klonen. Es wird standardmäßig auf einigen Consumer- und kommerziellen NAS (Netzwerkspeichersystemen) verwendet und ist beliebt für dedizierte, mehrere Festplatten umfassende Arrays.
- ZFS: ZFS ist ein weiteres Dateisystem mit Kopierschreibvorgang und Volumenmanager mit einem robusten und ausgereiften Funktionsumfang. Es konkurriert recht direkt mit Btrfs, verfügt über Funktionen zur Datenintegrität, kann große Dateisystemgrößen verarbeiten, verfügt über typische Volumenfunktionen wie Snapshot-Erstellung und Klonen und kann Volumen in RAID- und RAID-ähnliche Arrays zur Redundanz- und Leistungszwecken organisieren. ZFS hat aufgrund von Lizenzbedenken eine kontroverse Geschichte, ist jedoch nicht viel beliebter oder weniger beliebt als Btrfs, wenn man die kommerzielle Unterstützung berücksichtigt.
Zusätzlich verwendet Windows hauptsächlich *NTFS und ExFAT, während macOS hauptsächlich HFS+ und APFS verwendet. Es ist in der Regel möglich, diese Dateisystemformate auf verschiedenen Plattformen zu lesen und manchmal zu schreiben, aber möglicherweise sind zusätzliche Kompatibilitätswerkzeuge erforderlich.
Wie Linux Speichergeräte verwaltet
Gerätedateien in /dev
In Linux wird fast alles durch eine Datei irgendwo in der Dateisystemhierarchie dargestellt. Dazu gehören Hardware wie Speicherlaufwerke, die im System als Dateien im Verzeichnis /dev
dargestellt werden. Typischerweise beginnen Dateien, die Speichergeräte darstellen, mit sd
oder hd
gefolgt von einem Buchstaben. Zum Beispiel ist das erste Laufwerk auf einem Server normalerweise etwas wie /dev/sda
.
Auf diesen Laufwerken befinden sich auch Partitionen, die ebenfalls Dateien in /dev
haben und durch Anhängen der Partitionsnummer an das Ende des Laufwerksnamens dargestellt werden. Zum Beispiel wäre die erste Partition auf dem Laufwerk aus dem vorherigen Beispiel /dev/sda1
.
Während die /dev/sd*
und /dev/hd*
Gerätedateien den traditionellen Weg darstellen, um auf Laufwerke und Partitionen zu verweisen, besteht ein erheblicher Nachteil darin, diese Werte allein zu verwenden. Der Linux-Kernel entscheidet bei jedem Bootvorgang, welches Gerät welchen Namen erhält, was zu verwirrenden Szenarien führen kann, in denen sich die Geräteknoten ändern.
Um dieses Problem zu umgehen, enthält das Verzeichnis /dev/disk
Unterverzeichnisse, die verschiedenen, persistenteren Möglichkeiten entsprechen, Festplatten und Partitionen im System zu identifizieren. Diese enthalten symbolische Links, die beim Bootvorgang wieder zu den richtigen /dev/[sh]da*
-Dateien führen. Die Links sind nach dem identifizierenden Merkmal des Verzeichnisses benannt (zum Beispiel nach der Partitionskennzeichnung im Verzeichnis /dev/disk/by-partlabel
). Diese Links zeigen immer auf die richtigen Geräte, sodass sie als statische Bezeichner für Speicherplätze verwendet werden können.
Einige oder alle der folgenden Unterverzeichnisse können unter /dev/disk
existieren:
by-label
: Die meisten Dateisysteme verfügen über einen Beschriftungsmechanismus, der die Zuweisung beliebiger benutzerdefinierter Namen für eine Festplatte oder Partition ermöglicht. Dieses Verzeichnis besteht aus Links, die nach diesen vom Benutzer bereitgestellten Bezeichnungen benannt sind.by-uuid
: UUIDs oder universell eindeutige Bezeichner sind eine lange, eindeutige Zeichenfolge aus Buchstaben und Zahlen, die als ID für eine Speicherressource verwendet werden können. Diese sind im Allgemeinen nicht sehr menschenlesbar, sind aber fast immer eindeutig, auch über Systeme hinweg. Daher ist es möglicherweise eine gute Idee, UUIDs zu verwenden, um auf Speicher zuzugreifen, der zwischen Systemen migrieren kann, da Namenskollisionen weniger wahrscheinlich sind.by-partlabel
undby-partuuid
: GPT-Tabellen bieten ihre eigenen Satz von Bezeichnungen und UUIDs, die auch zur Identifizierung verwendet werden können. Dies funktioniert ähnlich wie bei den beiden vorherigen Verzeichnissen, verwendet jedoch spezifische GPT-Identifier.by-id
: Dieses Verzeichnis enthält Links, die anhand der Seriennummern der Hardware und der damit verbundenen Hardware generiert wurden. Dies ist nicht vollständig beständig, da die Art und Weise, wie das Gerät mit dem System verbunden ist, seinenby-id
-Namen ändern kann.by-path
: Ähnlich wieby-id
verlässt sich dieses Verzeichnis auf die Verbindung eines Speichergeräts mit dem System selbst. Die Links hier werden mithilfe der Interpretation des Systems über die Hardware erstellt, die zum Zugriff auf das Gerät verwendet wird. Dies hat die gleichen Nachteile wieby-id
, da das Anschließen eines Geräts an einen anderen Anschluss diesen Wert verändern kann.
Normalerweise sind by-label
oder by-uuid
die besten Optionen für die beständige Identifizierung spezifischer Geräte.
Hinweis: DigitalOcean-Blockspeichervolumen steuern die von dem Betriebssystem gemeldeten Seriennummern der Geräte. Dies ermöglicht eine zuverlässig beständige Kategorisierung nach by-id
auf dieser Plattform. Dies ist die bevorzugte Methode zur Bezugnahme auf DigitalOcean-Volumina, da sie sowohl beim ersten Start beständig als auch vorhersehbar ist.
Einbinden von Blockgeräten
Im Linux und anderen Unix-ähnlichen Betriebssystemen wird das gesamte System, unabhängig von der Anzahl der physischen Geräte, durch einen einzigen vereinheitlichten Dateibaum repräsentiert. Wenn ein Dateisystem auf einem Laufwerk oder einer Partition verwendet werden soll, muss es in den bestehenden Baum eingebunden werden. Der Einbindungsprozess besteht darin, eine formatierte Partition oder ein Laufwerk mit einem Verzeichnis im Linux-Dateisystem zu verknüpfen. Der Inhalt des Laufwerks kann dann von diesem Verzeichnis aus abgerufen werden.
Laufwerke werden fast immer in dedizierte leere Verzeichnisse eingebunden – das Einbinden in ein nicht leeres Verzeichnis bedeutet, dass der übliche Inhalt des Verzeichnisses nicht zugänglich ist, bis das Laufwerk ausgehängt ist. Es gibt viele verschiedene Einbindungsoptionen, die festgelegt werden können, um das Verhalten eines eingebundenen Geräts zu ändern. Zum Beispiel kann das Laufwerk im Nur-Lese-Modus eingebunden werden, um sicherzustellen, dass sein Inhalt nicht verändert wird.
Der Dateisystem-Hierarchiestandard empfiehlt die Verwendung von /mnt
oder einem Unterverzeichnis darunter für temporär eingebundene Dateisysteme. Er macht keine Empfehlungen, wo dauerhafterer Speicher eingebunden werden soll, daher können Sie das Schema Ihrer Wahl auswählen. In vielen Fällen werden /mnt
oder Unterverzeichnisse von /mnt
ebenfalls für dauerhafteren Speicher verwendet.
Herstellen von dauerhaften Einbindungen mit /etc/fstab
Linux-Systeme verwenden eine Datei namens /etc/fstab
(Dateisystemtabelle), um festzulegen, welche Dateisysteme während des Bootvorgangs eingehängt werden sollen. Dateisysteme, die keinen Eintrag in dieser Datei haben, werden nicht automatisch eingehängt, es sei denn, sie werden von einer anderen Software skriptgesteuert.
Jede Zeile der Datei /etc/fstab
stellt ein anderes Dateisystem dar, das eingehängt werden soll. Diese Zeile gibt das Blockgerät, den Einhängepunkt, das Format des Laufwerks und die Einhängeoptionen sowie einige andere Informationen an.
Komplexere Speicherverwaltung
Obwohl viele Anwendungsfälle durch diese Kernfunktionen abgedeckt werden, gibt es komplexere Verwaltungsmuster, um mehrere Laufwerke zusammenzufügen, insbesondere RAID.
Was ist RAID?
RAID steht für redundante array von individuellen datenträgern. RAID ist eine Speicherverwaltungs- und Virtualisierungstechnologie, die es ermöglicht, Laufwerke zu gruppieren und sie als eine einzige Einheit mit zusätzlichen Funktionen zu verwalten.
Die Merkmale eines RAID-Arrays hängen von seiner RAID-Stufe ab, die festlegt, wie die Festplatten im Array zueinander stehen. Einige der häufigsten Stufen sind:
- RAID 0: Diese Stufe zeigt das sogenannte Striping an. Das bedeutet, dass beim Schreiben von Daten in das Array diese aufgespalten und linear über die Festplatten im Set verteilt werden. Dies bietet eine Leistungssteigerung, da mehrere Festplatten gleichzeitig beschrieben oder gelesen werden können. Der Nachteil ist, dass ein einziger Festplattenausfall alle Daten im gesamten Array verlieren kann, da keine einzelne Festplatte ausreichend Informationen über den Inhalt zum Neuaufbau enthält. RAID 0 wird normalerweise aus diesem Grund niemals in der Produktion verwendet, kann jedoch als Vergleichspunkt nützlich sein.
- RAID 1: RAID 1 zeigt das sogenannte Mirroring an. Alles, was auf ein RAID 1-Array geschrieben wird, wird auf mehreren Festplatten geschrieben. Der Hauptvorteil besteht in der Datenredundanz, die es ermöglicht, Datenverlust durch den Ausfall einer Festplatte auf einer Seite des Spiegels zu überstehen. Da mehrere Laufwerke die exakt gleichen Daten enthalten, wird die nutzbare Kapazität um mindestens die Hälfte reduziert.
- RAID 5: RAID 5 streift Daten über mehrere Laufwerke, ähnlich wie RAID 0. Diese Stufe implementiert jedoch auch eine verteilte Parität über die Laufwerke. Das bedeutet, dass bei einem Laufwerksausfall die verbleibenden Laufwerke das Array mithilfe der Paritätsinformationen zwischen ihnen neu aufbauen können. Normalerweise reicht dies aus, um eine Festplatte neu aufzubauen, sodass das Array jeden Verlust einer Festplatte überstehen kann. RAID 5 reduziert den verfügbaren Platz in einem Array um die Kapazität einer Festplatte.
- RAID 6: RAID 6 hat die gleichen Eigenschaften wie RAID 5, bietet jedoch eine doppelte Parität. Das bedeutet, dass RAID 6-Arrays den Ausfall von bis zu 2 Laufwerken verkraften können. Die Kapazität des Arrays wird erneut durch die Paritätsmenge beeinflusst, was bedeutet, dass die nutzbare Kapazität um den Platz von zwei Laufwerken reduziert wird.
- RAID 10: RAID 10 ist eine Kombination aus den Ebenen 1 und 0. Zuerst werden zwei Sätze von gespiegelten Arrays erstellt. Dann wird die Daten über sie gestreift. Dies ergibt ein Array, das einige Redundanzeigenschaften aufweist und gleichzeitig eine gute Leistung bietet. Dies erfordert jedoch ziemlich viele Laufwerke, und die Gesamtkapazität ist immer noch weniger als die Hälfte des kombinierten Festplattenspeichers.
Wo geht es als nächstes hin?
Wenn Sie ein neues Speichergerät haben, das Sie in Ihrem Linux-System verwenden möchten, führt Sie dieser Artikel durch den Prozess der Partitionierung, Formatierung und Einbindung Ihres neuen Dateisystems. Dies sollte für die meisten Anwendungsfälle ausreichen, bei denen Sie hauptsächlich zusätzliche Kapazität hinzufügen möchten. Um zu lernen, wie Sie Speicherverwaltungsaufgaben durchführen, sehen Sie sich Wie führt man grundlegende Verwaltungsaufgaben für Speichergeräte in Linux durch an.