Wie ich verstanden habe, bedeutet "spärliche Datei", dass die Datei "Lücken" aufweisen kann, sodass die tatsächlich verwendeten Daten möglicherweise kleiner als die logische Dateigröße sind.
Wie speichern Linux-Dateisysteme Dateien auf der Festplatte? Ich interessiere mich hauptsächlich für ext4. Aber:
- Kann eine Datei nicht nacheinander auf der Festplatte gespeichert werden? Damit meine ich, dass sich ein Teil der Datei an der physischen Adresse X und der nächste Teil an der physischen Adresse Y befindet, die nicht in der Nähe von X + Offset liegt.
- Kann ich irgendwie die Dateisequenz steuern?
Ich möchte eine Datei von 10 GB zuweisen. Ich möchte, dass es sequentiell auf der Festplatte abläuft und nicht zwischen verschiedenen Offsets aufgeteilt wird. - Funktioniert es zwischen den verschiedenen Typen unterschiedlich?
linux
filesystems
hard-disk
io
hudac
quelle
quelle
dmsetup
Programm sein, eine Schnittstelle zum Geräte-Mapper. Dies ist möglicherweise eine gute Wahl, wenn Sie einen datenbankähnlichen Speicher planen.iso9660
undromfs
sind dazu nicht in der Lage und erfordern eine kontinuierliche Speicherung (von diesen kann ich off-head auflisten).Antworten:
Ja; Dies wird als Dateifragmentierung bezeichnet und ist insbesondere bei größeren Dateien keine Seltenheit. Die meisten Dateisysteme weisen Speicherplatz nach Bedarf zu, mehr oder weniger nacheinander. Sie können jedoch kein zukünftiges Verhalten erraten. Wenn Sie also 200 MB in eine Datei schreiben und dann weitere 100 MB hinzufügen, ist die Wahrscheinlichkeit nicht null, dass beide Datensätze dies tun in verschiedenen Bereichen der Festplatte gespeichert werden (grundsätzlich kann jeder andere Schreibvorgang, der nach dem ersten und vor dem zweiten Schreibvorgang mehr Speicherplatz auf der Festplatte benötigt, zwischen den beiden erfolgen). Wenn ein Dateisystem fast voll ist, ist die Situation in der Regel noch schlimmer: Möglicherweise gibt es keinen zusammenhängenden Bereich mit freiem Speicherplatz, der groß genug ist, um eine neue Datei aufzunehmen, sodass diese fragmentiert werden muss.
Sie können dem Dateisystem die Zielgröße Ihrer Datei mitteilen, wenn diese erstellt wird. Dies hilft dem Dateisystem, es optimal zu speichern. Viele moderne Dateisysteme verwenden eine als verzögerte Zuordnung bekannte Technik, bei der das Layout einer neuen Datei auf der Festplatte so spät wie möglich berechnet wird, um die bei der Berechnung verfügbaren Informationen zu maximieren. Sie können diesen Vorgang unterstützen, indem Sie mit der
posix_fallocate(3)
Funktion dem Dateisystem mitteilen, wie viel Speicherplatz insgesamt zugewiesen werden soll. Moderne Dateisysteme werden versuchen, diese Zuordnung nacheinander vorzunehmen.Verschiedene Dateisysteme verhalten sich unterschiedlich, ja. Protokollbasierte Dateisysteme wie NILFS2 weisen Speicher nicht auf die gleiche Weise zu wie extensionsbasierte Dateisysteme wie Ext4, und das ist nur ein Beispiel für eine Variation.
quelle
fallocate(3)
die Reihenfolge der Dateien sicher? oder wird nur auf das Dateisystem hingewiesen? Ich kann es nicht vollständig aus den Manpages verstehen.Mit dem Befehl
filefrag
erfahren Sie, wie Ihre Datei physisch auf Ihrem Gerät gespeichert ist:Wenn Sie Ihre Datei in einem Durchgang schreiben, kann ich davon ausgehen, dass Ihre Datei nicht fragmentiert wird.
Die Manpage von
fallocate
(1) ist ziemlich klar:Ist es sequentiell? Das System versucht zunächst, die Blöcke der Reihe nach zuzuweisen. Wenn dies nicht möglich ist, werden Sie nicht gewarnt.
quelle
ext4
.filefrag
ist versteckt in/usr/sbin
. Aber es scheint für normale Benutzer zu funktionieren (zumindest für ext4). Es kann fürstrace
den Betrieb lehrreich sein, zu sehen, wie Sie die Fragmentierung selbst messen können, wenn das Fehlen einer Warnung Sie behindert.Sie erwähnen spärliche Dateien, und keine der anderen Antworten hat sie erwähnt.
Die meisten Dateien sind nicht dünn. Am häufigsten erstellen Sie eine Datei, indem Sie sie von Anfang bis Ende auf einmal schreiben. Keine Löcher da.
Sie dürfen jedoch sagen: "Gehen Sie auf Position 1.000.000.000.000 und schreiben Sie dort ein Byte." Dadurch wird eine Datei erstellt, die aussieht, als wäre sie ein Etabyte groß, verwendet jedoch (wahrscheinlich) nur 4 KB auf der Festplatte. Dies ist eine spärliche Datei.
Sie können dies viele Male für dieselbe Datei tun, wobei kleine Datenmengen über die große Leere verstreut bleiben.
Dies kann zwar nützlich sein, hat aber zwei Nachteile.
Das erste ist, dass die Datei fragmentiert wird, worüber Sie sich Sorgen gemacht haben.
Der zweite Grund ist, dass nicht alle Programme mit diesen Dateien gut umgehen. Beispielsweise versucht eine Sicherungssoftware, die Leere zu sichern und erstellt dadurch eine Sicherung, die viel größer als erforderlich ist und möglicherweise zu groß für das Sicherungsmedium ist.
quelle
Es gibt mindestens ein paar Möglichkeiten, dies zu erreichen.
Verwenden Sie ein Dateisystem mit viel freiem Speicherplatz und weisen Sie den Speicherplatz vorab zu (z. B. verwenden Sie einen anwendungsspezifischen Datenende-Marker und hängen Sie zufällige Daten an, bis die Dateigröße 10 GB erreicht). Es ist nicht garantiert, dass dies zu unfragmentierten Daten führt.
Verwenden Sie ein rohes (ungekochtes) Dateisystem anstelle von ext4 usw. DBMS tun dies manchmal aus Leistungsgründen. Der Kompromiss besteht darin, dass Sie bei Bedarf Ihr eigenes Caching / Journalling / Recovery usw. durchführen müssen.
Fälle, in denen Sie viel davon haben, sind relativ selten - ich würde mich zuerst umsehen, um die Leistung zu optimieren.
Siehe auch
Stimmt es, dass Datenbankverwaltungssysteme normalerweise Dateisysteme umgehen?
quelle
Wenn dies nur eine einmalige Angelegenheit ist und es nicht wichtig ist, wie die Datei ursprünglich gespeichert wurde, ist nur das Ergebnis von Bedeutung, dann können Sie die Datei einfach normal speichern und dann den Defragmentierer Ihres Betriebssystems ausführen. Dann können Sie mit dieser Antwort überprüfen , ob Ihre Datei aus einem Stück besteht. Wenn nicht, wiederholen Sie diese. Dies ist die einfachste Methode, ohne Befehle oder externe Programme zu verwenden, aber sicherlich nicht die schnellste, da die gesamte Festplatte defragmentiert wird.
quelle
aptitude search ~ddefrag
warddrescueview
und dienids
TCP-Segment-Wiederzusammensetzungsbibliothek. Ihre Antwort ist nicht sehr hilfreich, wenn Sie nicht angeben, wie das Programm aufgerufen wird oder welche Argumente übergeben werden müssen.