www.wikidata.de-de.nina.az
Eine Sparse Datei englisch sparse file sparse fur dunnbesetzt sparlich oder zerstreut bezeichnet eine Datei die in einem Dateisystem kompakt gespeichert werden kann da sie weniger Daten enthalt als die angegebene Dateigrosse sie enthalt also Abschnitte mit unbestimmtem Inhalt In einer Sparse Datei wechseln sich Bereiche in denen sich bereits gespeicherte Daten befinden mit Bereichen ab die noch nicht beschrieben wurden Fur diese unbeschriebenen Bereiche muss im Dateisystem kein Platz belegt werden Inhaltsverzeichnis 1 Grundlagen 2 Hole Punching 3 Probleme bei der Verwendung 4 NTFS Sparse 5 Behandlung von Sparse Dateien unter Unix und ahnlichen Systemen 5 1 Erzeugen von Sparse Dateien 5 2 Erkennen von Sparse Dateien 5 3 Anwendungsbeispiel 6 Behandlung von Sparse Dateien unter Microsoft Windows 6 1 Erzeugen von Sparse Dateien 6 2 Erkennen von Sparse Dateien 6 3 Erzeugen von Sparse Dateien mit MSSQL 7 Siehe auch 8 Literatur 9 Weblinks 10 EinzelnachweiseGrundlagen Bearbeiten nbsp Prinzip einer Sparse Datei Unbestimmte Bereiche der Datei brauchen nicht gespeichert zu werden stattdessen werden nur die Informationen uber deren Umfang in den Metadaten der Datei gespeichertEs handelt sich um eine platzsparende Speicherungsform fur Dateien die grosse Bereiche mit unbestimmtem Inhalt enthalten Diese Art der Speicherung kommt aus der Welt der inodebasierten Dateisysteme Im Allgemeinen ist vom Dateisystem vorgegeben dass diese unbestimmten Bereiche bei lesendem Zugriff als Folge von Nullzeichen wiedergegeben werden Moderne Dateisysteme unixahnlicher Betriebssysteme NTFS und APFS unterstutzen diese Moglichkeit Bei einer Sparse Datei werden nur die Teile im Hintergrundspeicher abgelegt in die auch tatsachlich Daten geschrieben worden sind Solche Dateien konnen entstehen wenn in die Datei Blocke an verschiedene Stellen innerhalb der Datei geschrieben werden sodass diese Blocke nicht aneinandergrenzen Dadurch entstehen dazwischen Bereiche innerhalb der Datei die keinen definierten Inhalt aufweisen So kann z B eine Datei mit einer nominellen Lange von 100 GiB effektiv nur einen logischen Block im Dateisystem umfassen wenn etwa nur an einer Stelle in der Datei Daten geschrieben wurden Nicht alle Datei und Betriebssysteme unterstutzen Sparse Dateien die am Ende einen undefinierten Bereich besitzen Eine solche Form der Speicherung kann sehr sinnvoll bei einigen Formen von Binardatenbanken sein sowie bei der Abbildung von Partitionen in eine Datei z B bei der Virtualisierung Hole Punching BearbeitenWar es anfangs nicht moglich einmal belegten Platz wieder zuruckzugewinnen so gibt es ab Linux Kernel 2 6 38 die Moglichkeit per fallocate Systemaufruf ein Loch englisch hole in eine Datei zu stanzen englisch punch ing 1 Auf unterstutzten Dateisystemen werden dabei grundsatzlich ganze Datenblocke im gestanzten Bereich auf dem Datentrager wieder freigegeben 2 Seit Kernel Version 3 2 werden die entsprechenden Datenblocke zusatzlich per TRIM Befehl auch auf dem Datenspeicher selbst freigegeben wenn dieser das unterstutzt das ist bei vielen Flash basierten Speichermedien etwa SSDs der Fall 3 Probleme bei der Verwendung BearbeitenSparse Dateien konnen beim Kopieren zu Problemen fuhren Beim Kopieren auf ein anderes Dateisystem das keine Sparse Dateien unterstutzt kann die Zieldatei nicht in kompakter Form erstellt werden Daher werden die undefinierten Bereiche der Quelldatei bei der Zieldatei als Nullzeichen geschrieben Dies liefert eine signifikant grossere Zieldatei Das Zieldateisystem muss uber ausreichend Kapazitat verfugen Daruber hinaus mussen sowohl Kopier bzw Backupprogramm als auch das Betriebssystem des Ziels Sparse Dateien unterstutzen und sie als solche erkennen konnen Zu speichernde Dateien werden im Allgemeinen vom Betriebssystem nicht automatisch als Sparse Dateien angelegt sondern die Datei erzeugende verwendende Anwendung muss gesonderte Betriebssystem Routinen dafur verwenden die meisten Betriebssysteme erzeugen nicht automatisch Sparse Dateien Auf klassischen direktadressierbaren Datenspeichern beispielsweise Festplatten fuhren Sparse Dateien aufgrund ihrer inharenten Fragmentierung zu Geschwindigkeitseinbussen beim linearen Lesezugriff Auf Flash basierte Speichermedien wie SSDs trifft dies jedoch nicht zu NTFS Sparse BearbeitenDas Windows Dateisystem NTFS verfugt im Gegensatz zu unixbasierten Dateisystemen ab Version 3 uber ein spezielles Dateiattribut welches das Eingabe Ausgabesubsystem des Windows Dateisystems veranlasst fur zusammenhangende Bereiche einer Datei die lediglich aus Nullwerten besteht keinen Speicher auf dem Datentrager zu belegen Sowohl normale als auch komprimierte Daten konnen von NTFS als Sparse Datei behandelt werden Unter Windows Server 2003 und Windows XP kann eine einmal als Sparse Datei deklarierte Datei von NTFS nicht mehr in eine normale Datei umgewandelt werden Bei spateren Windows Versionen ist dies nur moglich wenn keine Locher mehr vorhanden sind 4 Die fur unixbasierte Dateisysteme genannten Probleme bestehen im Prinzip in gleicher Weise bei NTFS wobei allerdings das Dateiattribut dafur sorgt dass zumindest nach den generellen Programmierrichtlinien geschriebene Programme Sparse Dateien transparent kopieren konnen ohne dass die Sparse Eigenschaft verloren geht Behandlung von Sparse Dateien unter Unix und ahnlichen Systemen BearbeitenErzeugen von Sparse Dateien Bearbeiten Sparse Dateien lassen sich beispielsweise mit dem Unix Kommando a href Dd Unix html title Dd Unix dd a erzeugen dd if dev zero of sparsefile bs 1 count 1 seek 9999999 Dieses exemplarische Kommando erzeugt eine 10 Megabyte grosse Sparse Datei indem es den Schreibzeiger mittels seek auf die Position 9999999 setzt und dann ein Byte schreibt Das Erzeugen von Sparse Dateien die in einem Loch enden ist bei manchen dd Implementierungen nur indirekt moglich Dazu muss zunachst eine Datei erzeugt werden die wie im obigen Beispiel auf geschriebenen Daten endet Danach kann der letzte Datenanteil der Datei mit Hilfe des Systemaufrufs truncate bzw ftruncate entfernt werden Dies gilt beispielsweise fur Solaris Fur Linux reicht es count 0 zu setzen um zu verhindern dass nach dem Loch noch Daten geschrieben werden Unter Linux wird wenn count 0 gesetzt wurde ohne Schreiboperation nur ein ftruncate ausgefuhrt was eine Sparsedatei ohne ein vom Null Byte verschiedenes Zeichen darin anlegt Mit dem GNU dd lasst sich eine identische Datei auch mit dem folgenden verkurzten Aufruf erzeugen dd of sparsefile bs 1 count 0 seek 10000000 Erkennen von Sparse Dateien Bearbeiten Bei Sparse Dateien unterscheidet sich die logische und physische Dateigrosse Wahrend die logische Dateigrosse auch die Null Bytes umfasst bezeichnet die physische Dateigrosse den Platz den die Datei tatsachlich im Dateisystem benotigt Die option s des Unix Kommandos a href Ls Unix html title Ls Unix ls a zeigt zusatzlich die physische Dateigrosse an allerdings in Blocks Mit k wird auch die logische Grosse in Blocks angezeigt mit h werden beide im lesbaren Format angezeigt ls lhs sparse file ls lks sparse file Alternativ kann mit dem Unix Kommando a href Du Unix html title Du Unix du a die logische Dateigrosse angezeigt werden allerdings zunachst auch in Blocks Die Option block size 1 zeigt die physische Grosse in Bytes an wahrend bytes die logische Grosse in Bytes anzeigt du block size 1 sparse file du bytes sparse file Anwendungsbeispiel Bearbeiten Im Folgenden wird eine 10 MB grosse Sparse Datei erzeugt Beim Vergleich mit einer 3 MB grossen Datei fallt erst durch einen einfachen du Aufruf auf dass es sich um eine Sparse Datei handelt welche nur 10 Blocke auf der Festplatte benotigt gt dd if dev zero of sparsefile bs 1 count 0 seek 10M 0 0 Datensatze ein 0 0 Datensatze aus 0 Bytes 0 B kopiert 2 9615e 05 s 0 0 kB s gt dd if dev urandom of normalfile bs 1M count 3 3 0 Datensatze ein 3 0 Datensatze aus 3145728 Bytes 3 1 MB kopiert 1 71034 s 1 8 MB s gt ls lh insgesamt 3 1M rw r r 1 sven users 3 0M 18 Mai 03 08 normalfile rw r r 1 sven users 10M 18 Mai 03 06 sparsefile gt du 3075 normalfile 10 sparsefileBehandlung von Sparse Dateien unter Microsoft Windows BearbeitenErzeugen von Sparse Dateien Bearbeiten Eine Datei lasst sich mit dem Windows Kommando fsutil als Sparse Datei kennzeichnen fsutil sparse setflag lt Dateiname gt Dadurch werden bei zukunftigen Schreiboperationen ungeschriebene Bereiche der Datei nicht auf dem Datentrager allokiert Um bereits vorhandene Bereiche einer als Sparse Datei markierten Datei freizugeben kann ebenfalls das Kommando verwendet werden fsutil sparse setrange lt Dateiname gt lt Position in Byte gt lt Lange in Byte gt Dadurch wird der angegebene Bereich deallokiert Zu beachten ist dabei dass nur vollstandige Blocke deren Lange ein Vielfaches von 64 KiB betragen und deren Startpositionen sich an Vielfachen von 64 KiB befinden freigegeben werden konnen Um diese Operationen programmgesteuert durchzufuhren kann die Kernel Funktion DeviceIoControl mit den Kontrollcodes FSCTL SET SPARSE und FSCTL SET ZERO DATA verwendet werden Letzterer Code funktioniert auch bei Dateien die keine Sparse Dateien sind jedoch werden die Datenbereiche nicht freigegeben sondern mit Null Bytes gefullt Erkennen von Sparse Dateien Bearbeiten Ob eine Datei eine Sparse Datei ist kann ebenfalls mit dem fsutil Kommando ermittelt werden fsutil sparse queryflag lt Dateiname gt Um die tatsachlich allozierten Bereiche aufzulisten wird das Kommando wie folgt aufgerufen fsutil sparse queryrange lt Dateiname gt Erzeugen von Sparse Dateien mit MSSQL Bearbeiten Das Erzeugen von Sparse Dateien durch MSSQL ab Version 2005 ist als Datenbank Snapshot moglich Die folgenden SQL Anweisungen erzeugen eine Sparse Datei der Grosse 2 Gigabyte unter dem Namen C UnCompressed Dummy Snap mdf CREATE DATABASE Dummy ON PRIMARY NAME N Dummy FILENAME N C UnCompressed Dummy mdf SIZE 2097152KB LOG ON NAME N Dummy log FILENAME N C UnCompressed Dummy log ldf GO CREATE DATABASE Dummy Snap ON PRIMARY NAME N Dummy FILENAME N C UnCompressed Dummy Snap mdf AS SNAPSHOT OF Dummy Siehe auch BearbeitenDunnbesetzte Matrix Mitwachsendes Image englisch sparse image unter Mac OS XLiteratur BearbeitenDominic Giampaolo Practical File System Design with the Be File System PDF 1 1 MB Morgan Kaufmann 1999 ISBN 1 55860 497 9 Weblinks BearbeitenSEEK HOLE or FIEMAP Fachartikel uber das Entdecken von Lochern in Sparse Dateien englisch Fsutil sparse Microsoft Developer Network Microsoft Windows Server Center Erlauterung von DOS Kommandos zum Erzeugen von Sparse Dateien unter Windows Grundlegendes zur Grosse von Dateien mit geringer Dichte in Datenbanksnapshots Microsoft Developer Network Fachartikel uber die Bedeutung von Sparse Dateien bei Datenbank Backups mkfile Sun Dokumentation Sparse Dateien unter Solaris erzeugen englisch Einzelnachweise Bearbeiten FALLOCATE 2 manipulate file space Manpage In Linux Programmer s Manual kernel org 19 November 2019 abgerufen am 23 Mai 2021 englisch Deallocating file space Specifying the FALLOC FL PUNCH HOLE flag available since Linux 2 6 38 in mode deallocates space i e creates a hole in the byte range starting at offset and continuing for len bytes Jonathan Corbet Punching holes in files In LWN net 17 November 2010 abgerufen am 23 Mai 2021 englisch Kees Cook discard hole punching and TRIM Blog In codeblog 15 Februar 2012 abgerufen am 23 Mai 2021 englisch FSCTL SET SPARSE control code Windows Microsoft abgerufen am 17 Januar 2013 englisch Abgerufen von https de wikipedia org w index php title Sparse Datei amp oldid 217056470