Wie viel Speicherplatz verbrauchen Verzeichnisse?


13

Wie viel Platz nehmen leere Verzeichnisse ein?

Im Windows- und NTFS-Dateisystem wird "0 Bytes" angezeigt, was unmöglich ist.

Wie viel nimmt ein Verzeichnis wirklich ein? Kommt es auf das Dateisystem oder Betriebssystem an?


1
Technisch gesehen zeigt Ihnen das Eigenschaftenfenster den Inhalt des Ordners, der, wenn er leer ist, 0 Bytes auf einer Festplatte belegt. Ihre Frage befasst, was Raum der Ordner - Struktur einnimmt , auf einem Dateisystem. Es ist offensichtlich abhängig vom Dateisystem. Auf FAT32 müssen Sie nur einige Flags (versteckt, archiviert) sowie den Namen und den Pfad speichern. In NTFS müssen Sie auch Berechtigungen und einige weitere Dinge speichern. Alles in allem ist dieser Raum nahezu vernachlässigbar.
Doktoro Reichard

Also, auf dem NTFS, wie viel Platz braucht ein leeres Verzeichnis? zB wenn ich 1 Milliarde Verzeichnisse mache, wie viel Platz ist das?
ShadowHero

Wie gesagt, kommt auf den Namen und den Ordnerpfad an. Angenommen, Sie verwenden alle 26 Zeichen. Mit 1 Milliarde eindeutigen Namen können Sie Ordnernamen mit einer Länge von ca. 7 Zeichen erstellen. 7 Bytes * 1.000.000.000 entsprechen also ungefähr 7 GB Speicherplatz. Dies ist ein Minimum, würde ich annehmen. Ich glaube, ich habe ungefähr 1 Million Ordner in all meinen Laufwerken, sodass dieser Wert in der Realität nicht einmal erreicht wird. Vergessen Sie nicht, dass dies eine sehr grobe Schätzung ist.
Doktoro Reichard

Cool, ich verstehe ... wie Berechtigungen gespeichert werden?
ShadowHero

1
@AthomSfere Hmm ... das würde bedeuten, dass Ordner keine unbegrenzten Benutzerberechtigungen speichern können, es sei denn, es können mehrere MFT-Datensätze zugewiesen werden. Ich werde versuchen, es nachzuschlagen.
Doktoro Reichard

Antworten:


16

Technisch gesehen zeigt Ihnen das Eigenschaftenfenster den Inhalt des Ordners, der, wenn er leer ist, 0 Bytes auf einer Festplatte belegt.

Ihre Frage befaßt, was Raum der Ordner - Struktur einnimmt , auf einem Dateisystem, das auf sie offensichtlich abhängig ist. Auf FAT32 müssen Sie nur einige Flags (versteckt, archiviert) sowie den Namen und den Pfad speichern. In NTFS müssen Sie auch Berechtigungen und einige weitere Dinge speichern. Alles in allem ist dieser Raum nahezu vernachlässigbar.

Der Raum eine leere Verzeichnis - Struktur hängt von dem Namen und dem Ordnerpfad einnimmt. Angenommen, Sie platzieren alle Ordner auf einem Stammlaufwerk (sagen Sie C :) und verwenden alle 26 alphabetischen Zeichen. Mit 1 Milliarde eindeutigen Namen können Sie log_26 (1.000.000.000) = ungefähr 7 (6.3065) Zeichen Länge Ordnernamen haben. 7 Bytes * 1.000.000.000 entsprechen also ungefähr 7 GB Speicherplatz.

Dies ist ein Minimum, das nur auf der Menge der Leerzeichen basiert, die Namen für eine Struktur benötigen. Wie gezeigt wird, speichern Dateisysteme in ihrer Dateistruktur viel mehr Informationen als Dateinamen.

Ich glaube, ich habe ungefähr 1 Million Ordner und Dateien auf all meinen Laufwerken, sodass dieser Wert in der Realität nicht einmal erreicht wird. Vergessen Sie nicht, dass dies eine sehr grobe Schätzung ist.


Die derzeit am häufigsten verwendeten Dateisysteme können (wohl) als FAT (File Allocation Table) und NTFS (New Technology File System) bezeichnet werden. FAT, wie wir es kennen, wird seit 1996 verwendet, als Windows 95 mit FAT32 veröffentlicht wurde. Obwohl es durch andere, ausfallsicherere Dateisysteme wie NFTS (Windows), HFS + (OSX) oder ext3 (Linux) ersetzt wird, ist es in Handheld-Geräten, Speicherkarten oder Flash-Laufwerken nach wie vor weit verbreitet, da es von den meisten Betriebssystemen gut unterstützt wird und vor allem ist es einfach.

Nun, worauf es ankommt. Dateien und Verzeichnisse in einer FAT-Partition haben, auch wenn sie nichts enthalten, einen Namen, einen Speicherort, bestimmte Attribute usw., die in einer Zone namens Verzeichnistabelle gespeichert sind .

Die Verzeichnistabelle ist eine spezielle Datei (dh sie ist vor der normalen Verwendung verborgen, sodass nur das Betriebssystem und bestimmte Anwendungen direkt darauf zugreifen können). Es repräsentiert ein Verzeichnis (auch Ordner genannt) und jede Datei oder jeder Ordner, der darin gespeichert ist, hat einen 32-Byte-Eintrag in der Tabelle. Da die Verzeichnistabelle eine Datei ist, belegt sie einen oder mehrere Cluster (dh Felder mit einer voreingestellten Größe auf einer Festplatte, in die nur eine einzelne Datei (oder ein Teil von einer) passt).

So hat jeder Ordner oder jedes Verzeichnis auf einem modernen Laufwerk (> 512 MB) mindestens einen Overhead von 4 KB, um die Tabelle (Quelle) zu speichern . Dies bedeutet jedoch, dass Sie 128 verschiedene Dateien (4 * 1024 B / 32 B = 128) im selben Ordner speichern können und der Overhead beim Speichern der Datensätze immer noch die gleichen 4 KB wie zuvor beträgt.

Beim ersten Beispiel würde dies bedeuten, dass die Milliarden Ordner einen Overhead von 32 GB haben, anstatt der ungefähr geschätzten 7 GB, die ich berechnet habe. Diese 32 GB speichern nicht nur den Kurznamen (8 ASCII-Zeichen), sondern auch die Attribute, Flags, Zugriffs-, Erstellungs- und Änderungsdaten und andere Legacy-Attribute.

Angenommen, Sie lesen das alles, dann könnte sich eine Frage ergeben: "Nun, das ist alles in Ordnung und gut, aber wie werden lange Namen wie Wabbajack oder sogar Hashy-Namen wie e4d909c290d0fb1ca068ffaddf22cbd0 gespeichert?"

Microsoft in Windows 95 hat beschlossen, diese Funktion hinzuzufügen, um die Benutzerfreundlichkeit zu verbessern. Um zu vermeiden, dass ein "Near-Standard" -System kaputt geht, verwendeten sie eine ordentliche Umgehung namens VFAT (Virtual FAT). Um den langen Dateinamen in die Datei einzufügen, wurden vor dem eigentlichen Dateidatensatz zusätzliche Datensätze geschrieben (mit einigen besonderen Attributen, die in früheren Systemen nicht zu sehen waren). Das System mit langen Dateinamen erlaubt eine maximale Länge von 255 UTF-16-Zeichen (Unicode) (Quelle) (Quelle) .

Wenn Sie das erste Beispiel so ändern, dass jeder Ordner 9 Zeichen enthält, verdoppelt sich der Overhead von 32 GB auf 64 GB, da ein weiterer Datensatz zum Speichern des Langnamens geschrieben werden muss.


Gemäß dem Wikipedia- Artikel über NTFS werden alle Berechtigungen in der Master File Table gespeichert. Es ist Raum kann offenbar durch die Defragmentierung zu sehen ist , wie gezeigt , auf hier .

Die Größe ein MFT - Datensatz sowohl aus einem Ordner oder eine Datei belegt, wird in beschrieben hier :

Datei- und Ordnerdatensätze haben jeweils 1 KB und werden in der MFT gespeichert, deren Attribute in den zugewiesenen Speicherplatz in der MFT geschrieben werden. Neben den Dateiattributen enthält jeder Dateidatensatz Informationen zur Position des Dateidatensatzes in der MFT.

Wenn die Attribute einer Datei in den MFT-Dateidatensatz für diese Datei passen, werden sie als residente Attribute bezeichnet. Attribute wie Dateiname und Zeitstempel sind immer resident. Wenn die Informationsmenge für eine Datei nicht in ihren MFT-Dateidatensatz passt , werden einige Dateiattribute nicht resident . Nicht residente Attribute erhalten einen oder mehrere Cluster von Speicherplatz . Ein Teil des nicht residenten Attributs verbleibt in der MFT und verweist auf die externen Cluster. NTFS erstellt das Attribut "Attributliste", um den Speicherort aller Attributdatensätze zu beschreiben. In der Tabelle NTFS-Dateiattributtypen sind die derzeit von NTFS definierten Dateiattribute aufgeführt.

In NTFS belegen Ordner mindestens 1 KB Speicherplatz, es sei denn, sie verfügen über sehr lange Argument- und Berechtigungslisten. Zu diesem Zeitpunkt belegt der MFT-Datensatz einen zusätzlichen Cluster in der Partition, dessen Größe von der Formatierung abhängt, obwohl Microsoft für mehr als 2 GB in diesem Beitrag 4-KB-Cluster empfiehlt.


1
Ich habe einige Informationen über die Länge von 1024 Byte gefunden, die ich bereits erwähnt habe: c-ad.bnl.gov/kinyip/windows/MFT.html. Es ist eine sehr gute Lektüre und könnte Ihrer Antwort zugute kommen, wenn Sie sie erweitern möchten .
Austin T Französisch

Ich würde gerne erweitern (um eine vollständigere Antwort zu geben, ohne dass dies zu technisch ist ...), obwohl ich dies für morgen aufgeben müsste. Trotzdem danke für diese Quelle.
Doktoro Reichard

Technische Korrektur: Es gibt keine Begrenzung auf 255 Pfade. Vielmehr gibt es die MAX_PATH-Grenze von 260 Zeichen für Standardpfade und dann den Pfad mit erweiterter Länge von 32.767 Zeichen (ja, über 32.000 Zeichen) für echte Unicode-Pfade (unter Verwendung des Indikators "\\?") einfacher Pfad mit erweiterter Länge oder als UNC-Pfad). Weitere Informationen hierzu finden Sie unter docs.microsoft.com/en-us/windows/win32/fileio/… .
Mike 'Pomax' Kamermans

3

Für ein Beispiel aus der Praxis habe ich nur meinen freien Speicherplatz aufgezeichnet, dann eine große Verzeichnisstruktur erstellt und den neuen freien Speicherplatz abgezogen, um festzustellen, wie viel Speicherplatz verwendet wurde. Ich habe Verzeichnisse 0-6 für jeden Wochentag erstellt, dann innerhalb der Verzeichnisse 0-23 für Stunden des Tages, dann 0-59 für Minuten der Stunde. Insgesamt seine 10.080 Verzeichnisse. Meine Disc-Nutzung hat sich um 6.926.336 Byte geändert. Das entspricht 687 Bytes pro Verzeichnis. Wenn es Sie interessiert, funktioniert das auch mit 0,0006% eines 1-TB-Laufwerks (wenn Sie 1 TB als 1024 ^ 4 berechnen).


3
Können Sie Ihrer Antwort das Dateisystem hinzufügen? Die Verzeichnisnamen waren alle kurz?
Fixer1234

0

Unter Windows 10 habe ich 1.000.000 leere Ordner erstellt und gemäß der Python- getsizeFunktion 200540160 Byte Speicherplatz belegt. Das sind durchschnittlich 200,54016 Bytes pro Ordner.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.