Wie Sie unten sehen können, gibt es einen großen Unterschied zwischen den Feldern Größe und Größe auf der Festplatte in meinem Ordner. Warum ist das so?
Ich weiß, dass die Größe auf der Festplatte aufgrund der Zuordnungseinheiten in Windows etwas größer sein sollte als die Größe , aber warum ist das ein großer Unterschied? Könnte es an der großen Anzahl von Dateien liegen?
Übrigens, dieser Ordner befindet sich auf der SD-Karte meines Android-Telefons. Darin speichert meine Karten-App die zwischengespeicherten Karten und die App bezieht ihre Karte von Google Maps.
filesystems
vfsoraki
quelle
quelle
Antworten:
Ich gehe davon aus, dass Sie hier das FAT / FAT32-Dateisystem verwenden, da Sie erwähnen, dass es sich um eine SD-Karte handelt. NTFS und exFAT verhalten sich in Bezug auf Zuordnungseinheiten ähnlich. Andere Dateisysteme sind möglicherweise anders, werden jedoch unter Windows sowieso nicht unterstützt.
Wenn Sie viele kleine Dateien haben, ist dies sicherlich möglich. Bedenken Sie:
50.000 Dateien.
32 kB Clustergröße (Zuordnungseinheiten), die für FAT32 maximal ist
Ok, jetzt beträgt der Mindestspeicherplatz 50.000 * 32.000 = 1,6 GB (zur Vereinfachung der Mathematik werden SI-Präfixe verwendet, keine Binärdateien). Der Speicherplatz, den jede Datei auf der Festplatte beansprucht, ist immer ein Vielfaches der Größe der Zuordnungseinheit - und hier gehen wir davon aus, dass jede Datei tatsächlich klein genug ist, um in eine einzelne Einheit zu passen, wobei etwas (verschwendeter) Speicherplatz übrig bleibt.
Wenn jede Datei durchschnittlich 2 KB groß ist, erhalten Sie insgesamt etwa 100 MB - aber Sie verschwenden auch durchschnittlich das 15-fache (30 KB pro Datei) aufgrund der Größe der Zuordnungseinheit.
Ausführliche Erklärung
Warum passiert das? Nun, das FAT32-Dateisystem muss nachverfolgen, wo jede Datei gespeichert ist. Wenn eine Liste mit jedem einzelnen Byte erstellt würde, würde die Tabelle (wie ein Adressbuch) mit der gleichen Geschwindigkeit wachsen wie die Daten - und viel Platz verschwenden. Sie verwenden also "Zuordnungseinheiten", die auch als "Clustergröße" bezeichnet werden. Das Volume ist in diese Zuordnungseinheiten unterteilt, und was das Dateisystem betrifft, können sie nicht unterteilt werden - dies sind die kleinsten Blöcke, die es adressieren kann. Ähnlich wie Sie eine Hausnummer haben, aber Ihrem Postboten ist es egal, wie viele Schlafzimmer Sie haben oder wer in ihnen wohnt.
Was passiert also, wenn Sie eine sehr kleine Datei haben? Nun, es ist dem Dateisystem egal, ob die Datei 0 kB, 2 kB oder sogar 15 kB groß ist. Im obigen Beispiel sind das 32 kB. Ihre Datei belegt nur einen kleinen Teil dieses Speicherplatzes, und der Rest wird im Grunde verschwendet, gehört aber immer noch zur Datei - ähnlich wie ein Schlafzimmer, das Sie unbewohnt lassen.
Warum gibt es unterschiedliche Zuordnungseinheitengrößen? Nun, es wird ein Kompromiss zwischen einem größeren Tisch (Adressbuch, z. B. John besitzt ein Haus in der 123 Fake Street, 124 Fake Street, 666 Satan Lane usw.) oder mehr verschwendetem Platz in jeder Einheit (Haus). Wenn Sie größere Dateien haben, ist es sinnvoller, größere Zuordnungseinheiten zu verwenden, da eine Datei erst dann eine neue Einheit (Haus) erhält, wenn alle anderen gefüllt sind. Wenn Sie viele kleine Dateien haben, haben Sie ohnehin einen großen Tisch (Adressbuch), also können Sie ihnen auch kleine Einheiten (Häuser) geben.
Große Zuordnungseinheiten verschwenden in der Regel viel Platz, wenn Sie viele kleine Dateien haben. Normalerweise gibt es keinen guten Grund, für den allgemeinen Gebrauch über 4 kB zu gehen.
Zersplitterung?
Fragmentierung sollte auf diese Weise keinen Platz verschwenden. Große Dateien können fragmentiert, dh in mehrere Zuordnungseinheiten aufgeteilt werden, aber jede Einheit sollte gefüllt werden, bevor die nächste gestartet wird. Durch die Defragmentierung wird möglicherweise ein wenig Platz in den Zuordnungstabellen gespart, dies ist jedoch nicht Ihr spezielles Problem.
Mögliche Lösungen
Wie Gladiator2345 angedeutet hat , besteht Ihre einzige echte Option derzeit darin, damit zu leben oder mit kleineren Zuordnungseinheiten neu zu formatieren.
Ihre Karte ist möglicherweise in FAT16 formatiert, das eine geringere Beschränkung der Tabellengröße aufweist und daher viel größere Zuordnungseinheiten erfordert, um ein größeres Volumen zu adressieren (mit einer Obergrenze von 2 GB bei 32-kB-Zuordnungseinheiten). Quelle mit freundlicher Genehmigung von Braiam . Wenn dies der Fall ist, sollten Sie trotzdem sicher als FAT32 formatieren können.
quelle
Dies ist eine der Situationen, in denen das Komprimieren / Archivieren in eine einzelne Datei hilfreich sein kann. Was Bob in seiner Antwort sagte, ist wahr, aber die Lösung könnte einfacher sein, als die Festplatte zu reformieren, wie andere Antworten nahelegen. Wenn Sie das Verzeichnis komprimieren oder archivieren (mit zip, tar oder einer anderen Methode), sieht das Dateisystem, dass Sie eine einzige große Datei anstelle mehrerer kleinerer Dateien haben. Auch ohne Komprimierung erhalten Sie fast 1,4 GB Speicherplatz zurück, da all diese "kleinen Dateien" als eine einzige große Datei gezählt werden.
Vielleicht sollten Sie mit dem Entwickler besprechen, ob Sie ein Archiv oder eine Datenbank anstelle mehrerer Dateien verwenden möchten. Dies wird wahrscheinlich auch dazu beitragen, dass die Festplatte weniger fragmentiert ist, und wird sicherlich Platz sparen, insbesondere wenn es sich um ein NAND-Flash-Laufwerk handelt. Wenn Sie die lächerliche Situation erklären, in der aus 100 MB Nutzlast / Nutzdaten 1,4 GB werden, stimmt etwas nicht mit der Speicherung der Daten, und die Entwickler sollten eine bessere Lösung finden.
quelle
Für den Fall, dass jemand mit diesem Problem konfrontiert wird, könnte es nützlich sein zu wissen, dass ein weiterer Grund für große Unterschiede in Dateigröße / Speicherplatz auf der Festplatte die Verwendung alternativer Datenströme (ADS) ist.
Dies gilt meines Wissens nur für NTFS. ADS sind sowohl für legitime als auch für nicht legitime Verwendungen bekannt:
ADS einfach: Jede NTFS-Datei kann mehrere Datenströme enthalten (verstehen Sie "Unterdateien"). Einer davon ist der Hauptstream, der von Windows Explorer und anderen Windows-Tools verwendet wird. Er enthält den üblichen Inhalt einer Datei. Alternative Datenströme enthalten möglicherweise andere Informationen, genau wie der Hauptstrom, können jedoch nicht direkt von Windows-Tools verarbeitet werden (insbesondere im Explorer wird die Dateigröße unabhängig von der Größe des ADS mit der Größe des Hauptstroms gleichgesetzt). Sie müssen spezielle Tools oder Code verwenden, um ADS zu schreiben, zu lesen und zu lokalisieren.
Der wichtigste Punkt ist, dass Sie bei einem großen Unterschied in der Dateigröße die Möglichkeit von ADS und versteckter Malware nicht übersehen.
Ein weiterer Link .
Versuchen Sie dies auf DOS / CMD-Ebene, um sicher mit ADS zu experimentieren ...
Erstellen und zeigen Sie den Inhalt einer Datei im Stammverzeichnis von C an:
Ergebnis:
Fügen Sie nun mit der gleichen Methode einen ADS hinzu. Geben Sie lediglich den ADS-Namen und den Dateinamen an:
Sie haben gerade die geheime Nachricht in der Datei versteckt. Beachten Sie, dass sich die Dateigröße im Explorer nicht geändert hat, obwohl wir dem ADS "secret" Bytes hinzugefügt haben.
Versuchen Sie, den ADS-Inhalt anzuzeigen:
Ergebnis:
CMD
type
kann den Inhalt des ADS nicht anzeigen. Wir werden stattdessen Notepad verwenden:Im Editor können wir den Inhalt des ADS sehen:
Sie können eine vollständige ausführbare Datei auch in einem ADS einer unschuldigen Textdatei verbergen und jederzeit ausführen. Reichtum schadet Hackern nicht :-)
quelle
Das Problem liegt möglicherweise an der Clustergröße.
Laut Microsoft :
Versuchen Sie, Ihr Laufwerk mit einer kleineren Clustergröße zu formatieren.
quelle
Ich sehe viele Leute, die empfehlen, Ihr Laufwerk mit einer kleineren Clustergröße neu zu formatieren. Da dies eine SD - Karte ist zu beachten , dass viele Anbieter Vorformatierungsinformation die Karte auf die Größe empfohlen Cluster die Größe des NAND des Clustergröße anzupassen (beide synchron zu halten ist sehr wichtig für eine optimale Lese- / Schreibleistung und reduziert den Verschleiß-out)
Sie können die Clustergröße des NAND nicht ändern (dies ist ein physikalisches Attribut der Hardware Ihrer SD-Karte).
Führen Sie zuerst scandisk / chkdsk auf Ihrer SD-Karte aus, um sicherzustellen, dass das Problem mit dem Größenbericht nicht in einem beschädigten Dateisystem liegt.
Zweitens würde ich vorschlagen, dass Sie den Fehler Google Map-Entwicklern melden, die hier die Schuld tragen. Sie sollten eine überlegene Speichermethode verwenden. Das Beheben dieses Problems sollte auch dazu führen, dass die App auf vielen Geräten schneller ausgeführt wird, da weniger E / A- und Dateisystemtreiber aktiv sind.
quelle
Dies ist ein allgemeines Problem bei vielen Dateisystemen. Hierbei spielen zwei Faktoren eine Rolle: Die maximale Anzahl von "Blöcken", die ein Dateisystem pro logischem Volume verarbeiten kann, und die physischen Einschränkungen des Speichermediums. Jedem Block kann nur 1 Datei zugewiesen werden (Dateien nehmen im Allgemeinen so viele Blöcke auf, wie sie benötigen). So kann eine Textdatei mit 64 Bytes abhängig von der Blockgröße des Dateisystems, in dem sie sich befindet, häufig 4 KB bis 32 KB umfassen.
Eine Möglichkeit, dies zu betrachten, besteht darin, sich jeden Block im Dateisystem als Box und das Dateisystem als Raum vorzustellen. Alle Ihre Boxen haben die gleiche Größe und Sie versuchen, so viele wie möglich in einen Raum zu passen. Wenn Sie alle mit mehr Platz ausstatten, müssen Sie größere Kisten besorgen, damit der Raum vollständig mit Kisten gefüllt ist.
Eine der Regeln für das Einfügen von Dingen in Kisten ist, dass Sie nicht zwei unabhängige Dinge in eine Kiste einfügen können. Sie müssen Teil desselben Dokuments sein. Wenn ich also eine Textseite eintippen würde, hätte sie eine eigene Box. Wenn mein eingegebener Text so viele Seiten hätte, dass ich nicht alle in ein Feld passen könnte, würde ich einfach ein anderes Feld finden und stattdessen weiter Seiten darin einfügen und wiederholen, bis ich alle meine Seiten abgelegt hätte. Ich hätte auch die Kästchen aufgeschrieben, die ich für dieses Dokument verwendet hatte, und die Reihenfolge der Kästchen, in der sie nacheinander gelesen wurden.
Abhängig davon, wie ich die Boxen organisieren würde, habe ich in meinem Manifest möglicherweise nur genügend Platz für eine bestimmte Anzahl von Boxen. Wenn ich also einen großen Raum zu füllen hätte, aber nur eine kleine Anzahl von Kisten, müsste ich sehr große Kisten verwenden, um die Raumkapazität zu erreichen.
In diesem Fall würde mein einseitiges Dokument immer noch eine einzelne Box belegen, ohne dass etwas anderes es freigibt.
Die gleichen Situationen treten bei verschiedenen Speicherlösungen auf. FAT32 kann nur eine geringe Anzahl von "Boxen" auf den heutigen großen Festplatten verwalten, sodass es sehr große "Boxen" gibt, um dies auszugleichen.
quelle
Abgesehen von Clustergrößen kann es aufgrund der folgenden Bedingungen auch zu Abweichungen kommen:
quelle
Sie sollten einen Blick auf den Eintrag Block Suballocation in Wikipedia werfen. Genau das passiert mit dir. Die Verwendung eines Dateisystems mit Unterstützung für Tail Packaging ist eine Lösung auf Dateisystemebene für dieses Problem, neben der Änderung der Größe des Zuordnungsclusters.
Alle haben den Nachteil, die Festplatte neu formatieren zu müssen.
In einigen Fällen kann das Problem durch einfaches Speichern dieser Dateien in einem Archiv behoben werden (und die kleinen Dateien werden auch komprimiert, wenn am Ende der Dateien kein Speicherplatz mehr verfügbar ist). Dies hat den Nachteil, dass einige Zeit für die Dekompression aufgewendet werden muss.
Eine andere Option, wenn Sie aufgrund eines bestimmten anwendungsbezogenen Problems so viele kleine Dateien haben, ist das Speichern Ihrer Softwaredaten mit einer anderen Methode (möglicherweise in einer Datenbank). Aber natürlich ist es eine Lösung für Programmierer und nicht für Endbenutzer.
http://en.wikipedia.org/wiki/Tail_packing
quelle
Ich habe in Windows 10 große Unstimmigkeiten bei der Dateigröße einer einzelnen Datei festgestellt. Wenn ich mir jedoch die Eigenschaften der SAME-Datei vom selben Speicherort (einem Netzwerklaufwerk) wie in Windows XP ansehe, ist die große Unstimmigkeit nicht vorhanden. Nur ein kleiner Unterschied, den Sie erwarten würden. Ich denke, es gibt einen Fehler in Windows 10. Eine Datei mit 449 MB nimmt wahrscheinlich nicht 3,99 GB ein, was mir Windows 10 mitteilt.
quelle