Wie sind wir auf das (hierarchische) Dateisystem als grundlegende Datenstruktur gekommen?

19

Ich bin Autodidakt und habe keinen CS-Abschluss. Je mehr ich über die Datenstruktur gelernt habe, desto mehr frage ich mich, wie wir heute noch das Dateisystem mit Verzeichnissen und Dateien als grundlegende Datenspeicherungsstruktur auf dem Betriebssystem haben.

Ich verstehe die Einfachheit, aber es scheint heutzutage, dass es von Haus aus mehr Optionen geben könnte. Soweit mir bekannt ist, war das einzige Projekt, mit dem die Grundfunktionalität des Dateisystems verbessert werden konnte, ReiserFS, bei dem festgestellt werden konnte, welche Zeile einer Datei von wem und wann geändert wurde.

Wenn ich zum Beispiel systemeigene Tags für Dateien einrichten könnte, in denen ich Bilder, Diagramme, Textverarbeitungsdokumente und ein gesamtes Code-Repository als Teil eines einzelnen Projekts markieren könnte, wäre das für mich sehr hilfreich. Da ich im Dateisystem-Paradigma festgefahren bin, weiß ich, dass ich all diese Dateien in einem einzigen Ordner / Verzeichnis ablegen kann. Was ist jedoch, wenn sie bereits in unterschiedlichen Verzeichnissen vorhanden sind und dort bleiben müssen? Ich weiß, dass es Programme gibt, die das können, aber warum befinden sie sich nicht im Dateisystem?

Etwas, das schön wäre, ist eine Art relationales Feature im Dateisystem, wie Sie es mit RDBMSes bekommen. Ich verstehe, dass das Teil von Vista / 7 sein sollte, aber das fiel auch von der Featureliste.

Sicher, jedes Programm kann eine Binärdatei speichern und jede gewünschte Datenstruktur haben. Warum kann das Betriebssystem keine komplexeren Möglichkeiten zum Speichern von Daten anbieten, die über die einfache Hierarchie des Dateisystems hinausgehen?

user1936
quelle
2
Der Kern sollte einfach sein. Das optionale Aufblähen, das Sie erwähnen, sollte über einen einfachen Kern gehen. Warten Sie alternativ zwei Jahrzehnte, und jemand wird den Begriff des Dateisystems neu erfinden.
Job
3
"Was ist, wenn sie bereits in unterschiedlichen Verzeichnissen existieren und dort bleiben müssen?" Manchmal können Sie Hard-Links verwenden, um dieses Problem zu lösen ...
FrustratedWithFormsDesigner
1
Außerdem einige interessante Lektüre zum Thema: c2.com/cgi/wiki?FileSystemAlternatives
FrustratedWithFormsDesigner
3
Nicht wirklich eine Lösung in Windows 7, aber die neuen Bibliotheken können Ihnen einige der Funktionen bieten, an denen Sie interessiert zu sein scheinen: lifehacker.com/#!5464350/…
DKnight
1
Wenn ich eine Datei in zwei verschiedenen Ordnern gleichzeitig ablegen möchte, füge ich eine Verknüpfung zu dieser Datei in einen Ordner ein. Der Nachteil ist, dass die Verknüpfung ungültig wird, wenn Sie diesen Ordner / diese Datei verschieben.
Mateen Ulhaq

Antworten:

17

Beginnen Sie damit: http://en.wikipedia.org/wiki/Unix_File_System

Lesen Sie dies: http://www.unix.org/what_is_unix/history_timeline.html

Lesen Sie dann Folgendes: http://www.amazon.com/UNIX-Filesystems-Evolution-Design-Implementation/dp/0471164836

Es gibt eine einfache Antwort auf die Frage, warum das Betriebssystem keine komplexeren Möglichkeiten zum Speichern von Daten bietet, die über die einfache Hierarchie des Dateisystems hinausgehen.

Weil es für das Betriebssystem zu viel ist.

Dafür gibt es Bibliotheken und Anwendungspakete.

Oracle verkauft Ihnen beispielsweise eine Reihe von Funktionen, die dem Dateisystem ähneln und die Sie mit dem Oracle-Toolset verwalten.

Python verwendet die DBM-Bibliothek, um sehr komplexe Speicherstrukturen auf der Festplatte zu erstellen.

CouchDB und Mongo (und andere) sind sehr ausgefeilte Speicherstrukturen, die einige datenbankähnliche Funktionen bieten.

Der Punkt ist, dass das Betriebssystem das Minimum tun sollte und alles ein Add-On ist.

S.Lott
quelle
4
Stimme zu. Tatsächlich ist viel von dem, wonach OP gefragt hat, in dem entweder toten oder sterbenden WinFS-Projekt vorhanden: en.wikipedia.org/wiki/WinFS . So viel wie der Aussenseiter sagt: "Ordentlich!" Der erfahrene Benutzer und Softwareentwickler in mir sagt: "Ich versuche es viel zu sehr!"
Adam Crossland
6
"Der Punkt ist, dass das Betriebssystem das Minimum tun sollte und alles ein Add-On ist." Eine kühne Aussage in einer Zeit, in der einige Betriebssysteme ein integriertes Fenstersystem, einen Dateiindexdienst, einen Media Player, einen Remotedesktop, eine Firewall oder Netris enthalten.
Biziclop
1
@biziclop: Einverstanden. Windows ist vom Linux-Standpunkt abgewichen. Nichts überraschendes dort.
S.Lott
1
@ S.Lott Versteh mich nicht falsch, ich stimme deinem Ansatz zu, aber Windows ist sowieso mit so viel nutzlosem Müll übersät, dass eine zusätzliche Funktion keinen Unterschied macht. :)
biziclop
4
Das ist die Unix-Philosophie. Es ist nicht unbedingt richtig. Es macht es (und einen C-konformen) Unix einfach, auf Hardware zu portieren. Es macht es den Leuten auch einfach genug, Unix in die Aromen von -ix zu klonen, wie wir sie heute finden. Wenn eine Funktion nützlich ist und alle Programme sie benötigen, z. B. Eingabefelder mit Rechtschreibprüfung, ist es sinnvoll, sie von der Laufzeitumgebung bereitstellen zu lassen. Wir brauchen keine 400 unabhängigen Versionen einer Multifunktionsleiste.
Tim Williscroft
8

Die kurze Antwort lautet: Jeder versteht das Dateisystem. Es erinnert sie an ein Archiv. Denken Sie an Webseiten und sogar an Fat Apps. Warum sind sie Ihrer Meinung Tabsnach so beliebt? Die Menschen können sich mit ihnen identifizieren und sie schnell verstehen.

Imaging versucht, Oma das Durchsuchen einer Datenbank nach Dateien anhand von Eigenschafts-Tags beizubringen. Mit dem Dateisystem weiß Oma, dass sich die Datei einfach dort befindet, wo sie sie abgelegt hat .

Selbst mit WinFS glaube ich nicht, dass MS das Aussehen und Verhalten des Dateisystems verlieren würde.

Idioten
quelle
9
Ich muss dem nicht zustimmen. Die meisten Leute, die nicht gezwungen sind, im Dateisystem zu navigieren, tun dies nicht. Sie öffnen ein Textverarbeitungsprogramm und klicken auf ihr aktuelles Dokument oder suchen im Startmenü von Windows 7 usw. Und viele Leute verlieren den Überblick darüber, wo sie ihre Dateien ablegen. Es wäre für Oma viel einfacher, nach "Keksrezepten" oder "Enkelfotos" zu suchen oder was auch immer, als eine Ordnerhierarchie beizubehalten.
Matthew Read
16
Dies könnte einen Schock für Sie bedeuten: Alltägliche Leute verstehen das Dateisystem nicht. Sie haben nicht die geringste Ahnung. Und ich meine nicht einen FS im Unix-Stil mit seinen Mount-Punkten, Symlinks und Hardlinks, sondern eine miese Standard-Verzeichnisstruktur mit darin enthaltenen Dateien.
Biziclop
2
@Morons, meine Großmutter weiß nie, wo sie Sachen hinlegt. Google Mail hat mein gewünschtes Paradigma bereits auf ein Tag-System umgestellt, insbesondere mit Filtern, um Dinge automatisch zu markieren. Ich denke, das Dateisystem-Paradigma wurde hauptsächlich aufgrund der Einfachheit der Programmierung von Baumstrukturen implementiert. Dies erleichtert auch die Adressierung aus Programmiersicht. Wie würden Sie den Speicherort eines Dokuments in einem tagbasierten System angeben? Ich sage nicht, dass das nicht geht, aber die Details müssen ausgebügelt werden.
zzzzBov
3
Kaufen Sie Ihre Aktenschränke mit Tausenden von Ordnern und Dokumenten, die für den Betrieb des Schrankes selbst erforderlich sind und durch die Sie navigieren müssen, die Sie jedoch nicht berühren dürfen? Scheint sich Ihr Aktenschrank jedes Mal, wenn Sie die Schublade herausziehen, zu einem anderen Ort zu öffnen? Etc. Ich stimme Matthew und biziclop zu - "Alltägliche" Leute verstehen das nicht .
Nicole
2
Ich habe einen CS-Abschluss. Aber ich weiß nicht, in welchen Ordnern Windows welche Dateien ablegt. Insbesondere Desktop, StartMenu, QuickLaunch und alle anderen benutzer- / systemspezifischen Standardordner. (Dieses M $ -Help-System erklärt mir nicht, wie man einen Knopf drückt.) Ich muss CygWin installieren, um nach meinen eigenen Dateien suchen zu können, da neuere M $ -Suchfunktionen einfach vorhandene Dateien nicht mehr finden können auf win2k. Durch Deaktivieren von Fehlfunktionen wie Systemdateien ausblenden oder Dateierweiterungen ausblenden lassen sich die meisten Probleme nicht mehr lösen. Ich habe Windows aufgegeben, als ich gezwungen war, an dem (brandneuen) winXP zu arbeiten.
Comonad
6

In jeder Antwort steckt ein bisschen Wahrheit, aber ich glaube nicht, dass es die ganze Wahrheit ist.

Was Sie auflisten, sind meist Funktionen, die Benutzer und Entwickler jeden Tag sehr vermissen.

Die Leute verstehen das baumbasierte Dateisystem genauso wenig wie ein DAG-basiertes.

Und es gibt absolut keine Entschuldigung für die pathetischen Anhänge von Dateinamen, die als Erweiterungen bezeichnet werden. Sie sind nicht nur völlig ungeeignet für ihren Zweck (Identifizierung des Dateityps), sondern auch eine endlose Quelle der Belästigung für Benutzer.

Der Grund, warum wir sie immer noch verwenden, ist eine Mischung aus einer Einstellung, die "das wird", und der tatsächlichen Notwendigkeit, die Kompatibilität mit älterem Code aufrechtzuerhalten. Ein neuer Ansatz zum Speichern von Dateien würde eine radikale Änderung der grundlegenden Datei-E / A-API bedeuten und den meisten vorhandenen Code unbrauchbar machen. Entweder das, oder Sie müssen auf Zehenspitzen um sie herumgehen und die alte API beibehalten. Erinnern Sie sich an PROGRA ~ 1.

Ich denke aus den oben genannten Gründen, dass die Zukunft zwar spezialisiertere Dateisysteme für spezielle Anwendungen beinhalten könnte, aber während die gegenwärtigen Desktop- und Laptop-PC-Architekturen überleben, bleiben wir beim weitgehend baumbasierten Dateisystem mit seinen fehlenden Metadaten und seine schrecklichen kleinen Erweiterungen.


Jetzt werde ich die Seite wechseln.

Weil es überall um uns herum ist, wissen wir nie wirklich zu schätzen, wie überwältigend mächtig die Baummetapher ist. Auf meiner Festplatte befinden sich mehrere hunderttausend Dateien. Wenn ich eine finden muss, dauert es selten länger als eine Minute, auch wenn ich sehr wenig über die Datei weiß. Stellen Sie sich nun dieselbe Aufgabe ohne Struktur vor, nur eine flache Liste von Namen, die endlos blättert.

Trotzdem sind alle Operationen unkompliziert, es gibt keine gruseligen Aktionen in einiger Entfernung, nichts, was mich dazu bringen würde, wach zu werden.

Eigentlich habe ich einmal einen Dokumentenspeicher mit umfangreichen Metadaten und einer DAG-basierten Hierarchie implementiert. (Es handelte sich nicht einmal um eine Freiform-DAG, es handelte sich ausschließlich um eine zweistufige Metastruktur und die Dokumente, bei denen es sich entweder um untergeordnete Elemente einer Sammlung der Stufe 1 oder einer Sammlung der Stufe 2 handeln könnte. Es ist also wirklich einfach.)

Offensichtlich musste die Anforderung, dass Dokumentnamen innerhalb einer Sammlung eindeutig sein sollten, bestehen bleiben.

Und dann begannen die Probleme zu fließen. Was passiert, wenn Sie eine Sammlung öffnen und den Namen des Dokuments in etwas ändern, das in einer anderen Sammlung, zu der das Dokument gehört, nicht übereinstimmt? Wir haben eine Fehlermeldung angezeigt, aber die Benutzer waren völlig verblüfft. (Dies sind dieselben Benutzer, die nach dieser Anforderung gefragt haben.)

Sie haben versucht, ein Dokument zu löschen, haben es jedoch nur aus der Sammlung entfernt. Es tauchte also immer noch in den Suchergebnissen auf. Wir haben es auch umgekehrt versucht, aber dann haben sie sich beschwert, dass sie ein Dokument aus Sammlung A gelöscht haben und es auf magische Weise aus Sammlung B verschwunden ist. Wir brauchten also sowohl einen "Unlink" - als auch einen harten Löschvorgang.

Irgendwann haben wir die Niederlage eingeräumt, zum Glück noch rechtzeitig.

Die zusätzlichen Suchfacetten, die die Metadaten ermöglichten, erwiesen sich jedoch als absolute Wohltat.

biziclop
quelle
Erinnern Sie sich an CP / M auf einer 5-MB-Festplatte? Hunderte und Hunderte von Dateien rollen vorbei. FURCHTBAR!
quick_now
@quickly_now Ah, der gute alte CP / M. :)
biziclop
3

Um ehrlich zu sein, berühre ich kaum Metadaten meiner Dateien auf dem Mac. Ich denke, in den letzten 5 Jahren mit OSX (das Kommentare und so weiter unterstützt) habe ich Metadaten für vielleicht 2 Dateien verwendet. Nicht zu sagen, dass es eine schlechte Idee ist.

Ich bin mir nur nicht sicher, wie pragmatisch der Aufwand für das Markieren für mich ist.

Ich denke, die schönste Dateisystemfunktion, die ich kenne, wäre ein Dateisystem-Versionierungssystem, das partitionsübergreifend funktioniert. Es wurde auf VAXen in den 70er und frühen 80er Jahren gemacht, nicht sicher, warum es sich bei Unix und NTFS / Windows nicht durchsetzte.

Paul Nathan
quelle
Moderne Versionen von NTFS / Windows - do Angebote Versionierung. Es ist nicht genau in deinem Gesicht, aber es existiert. Ich kann allerdings nicht sagen, wie es mit VMS verglichen wird.
Shog9
2

Ich habe mit nicht hierarchischen Dateisystemen auf älteren Minis wie HP3000 und Encore / Gould gearbeitet. Sie hatten keine Verzeichnisse; Sie hatten eine Gruppe und ein Konto, und die Dateien wurden als " Gruppe . Konto . Datei " bezeichnet, z.

Nun, dies sind alte Systeme, bei denen die einzelnen Speicherplatzkontingente in den einzelnen Megabytes lagen. Es ist also nicht so, als ob Sie zu viele Ebenen zum Organisieren Ihrer Inhalte benötigen, aber aus der Sicht eines Benutzers und eines Programmierers sind hierarchische Systeme viel besser.

John Bode
quelle
1

Ich sehe nicht, wo (zumindest einige) aktuelle Dateisysteme wirklich viel tun müssen, um Tags zu unterstützen. Wenn bekommen Sie es nach unten, umbauten Mittel etwas mehr als einige zusätzliche Daten zugeordnet Unterstützung mit einer Datei, ist aber nicht in den Strom der geschriebenen Bytes für diese Datei.

NTFS (um ein Beispiel zu wählen, das weit verbreitet ist ) kann das in Ordnung bringen: Für NTFS ist eine Datei nicht unbedingt ein einzelner Datenstrom von Bytes. Unter NTFS können Sie einem einzelnen Dateinamen eine beliebige Anzahl von Datenströmen zuordnen. Jede Datei hat einen (möglicherweise leeren) "primären Stream", der keinen Namen hat. Es kann jedoch auch eine beliebige Anzahl anderer Streams vorhanden sein, von denen jeder einen Namen haben muss. Auf diese Weise wäre es wirklich trivial , einer vorhandenen Datei einen Stream mit dem Namen (nur zum Beispiel) "Tags" hinzuzufügen und (offensichtlich genug) Ihre Tags in diesen Stream zu schreiben.

Danach kommt der etwas schwierigere Teil: Ihre Werkzeuge dazu zu bringen, die Tags zu verwenden, die Sie dort abgelegt haben. Idealerweise möchten Sie sie wahrscheinlich für eine schnelle Suche indizieren, damit Sie beispielsweise ein "virtuelles Verzeichnis" aller Dateien mit einem bestimmten Tag erstellen können.

Zumindest aus meiner Sicht hat das Dateisystem jedoch bereits das, was benötigt wird - es soll die Daten speichern und abrufen, und das kann es jetzt perfekt. Die Nutzung dieser Daten ist Aufgabe anderer Tools. Diese Tools sind derzeit nicht vorhanden, die Dateisysteminfrastruktur, die sie unterstützt, jedoch.

Wenn ich für einen Moment zynisch sein darf, würde ich sagen, dass es unvermeidlich war, dass diese Funktion von NTFS fast vollständig ignoriert und unbekannt bleibt. Schließlich ist es einfach zu bedienen und erfordert keine spezielle API oder etwas anderes. Sie können es sehr gut in vollständig portablem C, C ++ oder anderen Anwendungen verwenden, mit denen Sie einen beliebigen Dateinamen angeben können. Hier ist ein kurzer Code, der das Erstellen einer Datei mit einem AFS demonstriert:

#include <fstream>

int main() {
    std::ofstream out("test.txt");
    std::ofstream tag("test.txt:tags");

    out << "This is the output file";
    tag << "tag1 tag2";

    return 0;
}

Und hier ist ein Code zum Lesen und Anzeigen der Tags:

#include <fstream>
#include <iterator>
#include <iostream>
#include <string>

int main() { 
    std::ifstream tags("test.txt:tags");

    std::copy(std::istream_iterator<std::string>(tags),
          std::istream_iterator<std::string>(),
          std::ostream_iterator<std::string>(std::cout, " "));
    return 0;
}

Alles sehr einfach und unkompliziert. Beachten Sie, dass ich dort zwar nur ein triviales Datenpaket geschrieben habe, Sie ein AFS jedoch wie jede andere Datei behandeln können. In einer normalen Verzeichnisanzeige wird nur der primäre Stream angezeigt (z. B. entspricht die für die Datei angezeigte Größe der Größe des primären Streams). Wenn Sie sie jedoch anzeigen möchten, dir können Sie auch Informationen zu alternativen Streams anzeigen mit der /RFlagge. Beispielsweise sieht eine Auflistung für die oben erstellte Datei folgendermaßen aus:

03/16/2011  08:22 PM                23 test.txt
                                     9 test.txt:tags:$DATA
               1 File(s)             23 bytes
Jerry Sarg
quelle
1
DIR kann es möglicherweise anzeigen, aber das Sichern einer Datei mit alternativen Streams ist fürchterlich schwierig , insbesondere für ein anderes System. Beispielsweise verwenden die meisten NAS-Laufwerke heutzutage Linux, und die dortigen Dateisysteme verarbeiten überhaupt keine alternativen Streams. Kopieren Sie die Datei über ... und das gesamte Alt-Zeug verschwindet einfach.
quick_now
Ja, ich habe bemerkt, dass die meisten NAS-Systeme eher ... herausgefordert sind (und dies ist auch nicht der einzige Weg). Für die eigentliche Sicherung und Wiederherstellung ist dies jedoch kein Problem (zumindest, wenn die betreffende Software überhaupt kompetent geschrieben wurde): BackupReadSerialisiert alle Streams und erstellt BackupWritedie Datei (mit alternativen Streams) aus der serialisiertes Format.
Jerry Coffin
Hängt davon ab, ob die gesicherten Dateien direkt auf dem NAS lesbar sein sollen. Wenn Sie dies tun (und keine speziellen Wiederherstellungsprogramme benötigen), sind Sie mit einfachen alten Dateien konfrontiert.
quick_now