


Möchten Sie herausfinden, wie das Linux-Dateisystem funktioniert?
Das Linux-Dateisystem ist eine Kernkomponente des Betriebssystems, und sein Betriebsmechanismus ist das, was wir Programmierer verstehen und beherrschen müssen. Die Festplatte stellt den grundlegendsten dauerhaften Speicher für das System bereit, und das Dateisystem stellt alle Dateien im System bereit Die Basis der Festplatte. Unter Linux ist alles eine Datei. Nicht nur gewöhnliche Dateien und Verzeichnisse, sondern auch Blockgeräte, Sockets, Pipes usw. müssen über ein einheitliches Dateisystem verwaltet werden. Heute sprechen wir gemeinsam über die Frage: Wie funktionieren Festplatten und Dateisysteme?
Indexknoten und Verzeichniseinträge
Im Linux-Dateisystem umfassen die Metadaten einer Datei: Verzeichniseinträge, Indexknoten und Datenblöcke.
- Verzeichniseintrag: Wird als Dentry bezeichnet und dient zum Aufzeichnen des Dateinamens, des Indexknotenzeigers und der Zuordnung zu anderen Verzeichniseinträgen. Mehrere zugehörige Verzeichniseinträge bilden die Verzeichnisstruktur des Dateisystems. Ein Verzeichniseintrag ist eine vom Kernel verwaltete Speicherdatenstruktur und wird daher häufig als Verzeichniseintragscache (Cache) bezeichnet.
- Indexknoten: Wird als Inode bezeichnet und dient zum Aufzeichnen der Metadaten der Datei, einschließlich Inode-Nummer, Dateigröße, Zugriffsberechtigungen, Änderungsdatum, Datenspeicherort, Anzahl der Links usw. Die Informationen zum Indexknoten werden auf der Festplatte gespeichert zur Speicherung, belegt den Speicherplatz.
- Datenblock: Wird als Block bezeichnet, in dem Dateidaten gespeichert werden. Die kleinste Speichereinheit einer Festplatte wird als Sektor bezeichnet. Jeder Sektor speichert 512 Byte, was 0,5 KB entspricht. Wenn das Betriebssystem die Festplatte liest, ist dies zu ineffizient liest mehrere Sektoren kontinuierlich gleichzeitig, dh liest jeweils einen „Block“. Dieser aus mehreren Sektoren bestehende „Block“ ist die kleinste Dateizugriffseinheit. „Block“-Größe, am häufigsten ist 4 KB (acht Sektoren).
Um den Dateizugriff zu beschleunigen, werden Indexknoten normalerweise in den Speicher geladen und die Festplatte beim Formatieren in drei Speicherbereiche unterteilt: Superblock, Indexknotenbereich und Datenblockbereich.
- Super Block wird zum Speichern detaillierter Informationen des Dateisystems verwendet, wie z. B. die Anzahl der Blöcke, die Blockgröße, freie Blöcke usw.
- Indexknotenbereich, der zum Speichern von Indexknoten verwendet wird.
- Datenblockbereich, der zum Speichern von Datei- oder Verzeichnisdaten verwendet wird.
Virtuelles Dateisystem
Das virtuelle Dateisystem (VFS, Virtual File System) des Linux-Systems ist eine wichtige Abstraktionsschicht, die Benutzern und Anwendungen eine einheitliche Dateisystemschnittstelle bietet und ihnen den einheitlichen Zugriff auf verschiedene Arten von Dateisystemen ermöglicht Sie müssen sich um die Implementierungsdetails des zugrunde liegenden Dateisystems kümmern.
Sowohl das Benutzerprogramm als auch die Glibc-Bibliothek gehören zum Benutzerbereich, und Dateioperationen werden durch Aufrufen von Funktionen der Systemaufrufschicht (SCI) abgeschlossen. Bei diesen Funktionen handelt es sich um vom Linux-Kernel bereitgestellte Schnittstellen, über die Benutzer Vorgänge vom System anfordern können. Beispielsweise ruft der Befehl cat im System die Funktion open() auf, um die Datei zu öffnen, ruft dann die Funktion read() auf, um den Dateiinhalt zu lesen, und ruft schließlich die Funktion write() auf, um den Dateiinhalt an die Konsole auszugeben . Gängige Dateisystemtypen können in mehrere große Kategorien unterteilt werden.
- Basierend auf der lokalen Festplatte: EXT3, EXT4, XFS, OverlayFS usw. Das Merkmal dieses Dateisystemtyps besteht darin, dass die Daten direkt auf der lokal auf dem Computer montierten Festplatte gespeichert werden, mit guter Leistung und ohne Netzwerk-E/A-Zugriffsverbrauch.
- Basierend auf Netzwerkdateisystemen: NFS, CIFS/SMB, CephFS, GlusterFS usw. Das Merkmal dieses Dateityps besteht darin, dass Benutzer über das Netzwerk auf Dateien zugreifen und diese verwalten können. Verteilung, Cross-Plattform, Flexibilität und Skalierbarkeit sind ihre größten Vorteile.
- Speicherbasierte Dateisysteme: tmpfs, ramfs, /proc usw. Diese speicherbasierten Dateisysteme werden normalerweise für bestimmte Zwecke verwendet, z. B. temporäre Dateispeicherung, Caching, schnellen Datenzugriff usw. Sie bieten eine leistungsstarke Lösung zum Lesen und Schreiben von Dateien im Speicher, müssen sich aber auch der Speicherbeschränkungen und der Datenvolatilität bewusst sein.
Datei-E/A
Wir partitionieren und formatieren die Festplatte, um verschiedene Arten von Dateisystemen zu erstellen, die in bestimmte Verzeichnisse im VFS von Linux gemountet werden müssen, bevor sie vom System verwendet werden können. Es gibt verschiedene E/A-Typen für Dateilese- und -schreibvorgänge, und das Anwendungsprogramm wählt je nach Bedarf die geeignete Methode aus.
Gepufferte vs. ungepufferte E/A
- Die sogenannte „Keine Pufferung“ bedeutet nicht, dass der Kernel keine Pufferung bereitstellt, sondern nur einfache Systemaufrufe, keine Funktionsbibliotheksaufrufe. Der Systemkernel stellt einen Blockpuffer zum Lesen und Schreiben auf die Festplatte bereit. Wenn die Schreibfunktion zum Schreiben von Daten verwendet wird, wird der Systemaufruf direkt aufgerufen, um die Daten in den Blockpuffer zu schreiben und in die Warteschlange zu stellen Bei einer bestimmten Menge werden die Daten in die Warteschlange gestellt. Daher bedeutet die sogenannte ungepufferte E/A, dass der Prozess keine Pufferfunktion bereitstellt. Bei jedem Aufruf der Schreib- oder Lesefunktion wird diese direkt vom System aufgerufen. (Vom Kernel gepuffert).
- Gepufferte E/A bedeutet, dass der Prozess die Eingabe- und Ausgabeströme verbessert und einen Stream-Puffer bereitstellt. Wenn Sie die Schreibfunktion zum Schreiben von Daten verwenden, werden die Daten zunächst in den Stream-Puffer geschrieben. Wenn bestimmte Bedingungen erreicht sind, z. B. wenn der Stream-Puffer voll ist, werden die Daten sofort an den vom Kernel bereitgestellten Blockpuffer gesendet dann über den Blockpuffer auf die Festplatte geschrieben. (doppelte Pufferung)
- Daher sind beim Schreiben der gleichen Datenmenge auf die Festplatte für gepufferte E/A weniger Systemaufrufe erforderlich als für ungepufferte E/A.
Direkte E/A und indirekte E/A
- Direkte E/A: Das Anwendungsprogramm greift direkt auf die Festplattendaten zu, ohne den Kernel-Puffer zu durchlaufen. Der Zweck besteht darin, die Datenkopie vom Kernel-Puffer in den Cache des Benutzerprogramms zu reduzieren.
- Indirekte E/A: Wenn Dateien gelesen oder geschrieben werden, müssen sie zuerst den Seitencache des Systems durchlaufen und dann vom Kernel oder zusätzlichen Systemaufrufen auf die Festplatte geschrieben werden.
- Wenn sich bei direkter E/A die Daten, auf die zugegriffen wird, nicht im Anwendungscache befinden, werden die Daten jedes Mal direkt von der Festplatte geladen, und die Effizienz dieses direkten Ladens ist langsamer. Für Anwendungen wie Datenbankverwaltungssysteme ist es jedoch wahrscheinlicher, dass sie ihren eigenen Caching-Mechanismus wählen, da Datenbankverwaltungssysteme die in der Datenbank gespeicherten Daten häufig besser kennen als das Betriebssystem und direkte E/A besser geeignet ist.
Blockierende E/A und nicht blockierende E/A
- Blockieren von E/A: Der Anwendungsprozess blockiert beim Aufrufen einer E/A-Operation erst, nachdem er darauf gewartet hat, dass die Daten vorbereitet und in den Puffer des Anwendungsprozesses kopiert werden. Die Merkmale sind: geringe Implementierungsschwierigkeiten, einfache Anwendungsentwicklung und geeignet für die Entwicklung von Netzwerkanwendungen mit geringer Parallelität.
- Nicht blockierende E/A: bedeutet, dass die Anwendung, nachdem sie einen E/A-Vorgang ausgeführt hat, den aktuellen Thread nicht blockiert und weiterhin andere Aufgaben ausführen und dann das Ergebnis des Aufrufs durch Abfrage oder Ereignisbenachrichtigung erhalten kann. Die Merkmale sind: relativ komplex. Geeignet für die Entwicklung von Netzwerkanwendungen, die ein geringes Maß an Parallelität aufweisen und keine zeitnahe Reaktion erfordern
Synchrone und asynchrone E/A
- Synchronisierte E/A: bedeutet, dass die Anwendung, nachdem sie eine E/A-Operation ausgeführt hat, warten muss, bis die gesamte E/A abgeschlossen ist, bevor sie die E/A-Antwort erhalten kann.
- Asynchrone E/A: bedeutet, dass die Anwendung, nachdem sie den E/A-Vorgang ausgeführt hat, nicht auf den Abschluss und die Antwort nach Abschluss warten muss, sondern mit der Ausführung fortfahren kann. Nachdem diese E/A abgeschlossen ist, wird die Antwort in Form einer Ereignisbenachrichtigung an die Anwendung übermittelt.
Einige allgemeine Kenntnisse über Dateien
Auf der Festplatte ist noch viel Speicherplatz frei und es ist nicht genügend Platz für neue Dateien und Verzeichnisse vorhanden.
- Ideen zur Fehlerbehebung: Es besteht eine hohe Wahrscheinlichkeit, dass zu viele kleine Dateien vorhanden sind und die Inodes aufgebraucht sind. Sie können df -i verwenden.
Die Statistiken zur Festplattennutzung zwischen du und df sind inkonsistent.
- du zählt die Größe jeder vom Dateisystem aufgezeichneten Datei und akkumuliert dann die Gesamtgröße, die über das Dateisystem ermittelt wird. df liest hauptsächlich Festplattennutzungsinformationen aus dem Superblock (Superblock). Was df erhält, ist die Nutzung von Festplattenblöcken. Diese Situation wird höchstwahrscheinlich dadurch verursacht, dass eine Datei gelöscht wird, sie jedoch von einem anderen Prozess verwendet wird (der das Handle besitzt), das über lsof grep gelöscht gefunden werden kann. Wenn der Prozess stoppt oder abgebrochen wird, werden diese Leerzeichen freigegeben.
Wenn wir die Festplattenkapazität abfragen, warum ist die Größe von „Verwendet+Verfügbar“ immer kleiner als die Gesamtkapazität (SIze)?
- Um Notfälle zu verhindern, reserviert das Linux ext-Dateisystem einen Teil des Festplattenspeichers. Der spezifische reservierte Wert kann über tune2fs -l [dev_name] | (dev_name) angezeigt werden , der hier reserviert ist, wird von df in den verwendeten Speicherplatz berechnet, was zu inkonsistenten Statistiken zwischen df und du führt. Wenn Sie die Größe des reservierten Speicherplatzes anpassen müssen, können wir tune2fs -m [size] [dev_name] verwenden, um Anpassungen vorzunehmen.
Das obige ist der detaillierte Inhalt vonMöchten Sie herausfinden, wie das Linux-Dateisystem funktioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

Um die Git -Repository -Adresse anzuzeigen, führen Sie die folgenden Schritte aus: 1. Öffnen Sie die Befehlszeile und navigieren Sie zum Repository -Verzeichnis; 2. Führen Sie den Befehl "git remote -v" aus; 3.. Zeigen Sie den Repository -Namen in der Ausgabe und der entsprechenden Adresse an.

Die fünf grundlegenden Komponenten des Linux -Systems sind: 1. Kernel, 2. Systembibliothek, 3. System Utilities, 4. Grafische Benutzeroberfläche, 5. Anwendungen. Der Kernel verwaltet Hardware -Ressourcen, die Systembibliothek bietet vorkompilierte Funktionen, Systemversorgungsunternehmen werden für die Systemverwaltung verwendet, die GUI bietet visuelle Interaktion und Anwendungen verwenden diese Komponenten, um Funktionen zu implementieren.
