Sparse-Datei

Sparse-Datei

Eine Sparse-Datei (engl. sparse file; sparse für „dünnbesetzt“, „spärlich“ oder „zerstreut“) bezeichnet eine Datei, die in einem Dateisystem sehr kompakt gespeichert werden kann, wenn sie größtenteils aus Nullbytes besteht. In einer Sparse-Datei wechseln sich Bereiche in denen sich explizit aufgezeichnete Daten befinden mit Bereichen ab, die als Löcher bezeichnet werden und keinen Platz auf dem Speichermedium belegen.

Inhaltsverzeichnis

Grundlagen

Prinzip einer Sparse-Datei: Leere Nullbyte-Sequenzen brauchen nicht gespeichert zu werden, stattdessen werden nur die Informationen über deren Umfang in den Metadaten der Datei gespeichert

Es handelt sich um eine platzsparende Speicherungsform für Dateien, die viele aufeinanderfolgende Bytes mit dem Wert 0 enthalten, d. h. lange Datensequenzen mit Nullbytes. Diese Art der Speicherung kommt aus der Welt der inodebasierten Dateisysteme und ist heute vor allem typisch für alle modernen unixartigen Betriebssysteme.

Bei einer Sparse-Datei werden nur die Teile im Hintergrundspeicher abgelegt, die auch tatsächlich beschrieben worden sind. So kann eine Datei mit einer nominellen Länge von z. B. 100 GiB effektiv nur einen logischen Block im Dateisystem umfassen, wenn etwa nur an einer Stelle in der Datei Daten geschrieben wurden.

Eine solche Form der Speicherung kann sehr sinnvoll bei einigen Formen von Binärdatenbanken sein, sowie bei der Simulation von Festplatten über Dateien.

Nicht alle Betriebssysteme und Dateisysteme unterstützen Sparse-Dateien die in einem Loch enden.

Probleme bei der Verwendung

Sparse-Dateien können problematisch werden, wenn sie kopiert werden. Ein Problemfall dabei besteht dann, wenn das Dateisystem der Zielpartition nicht die Fähigkeit besitzt, Sparse-Dateien anzulegen, und außerdem nicht genügend freier Speicherplatz existiert, um die komplette Datei inklusive der dann explizit zu speichernden Nullbytes aufzunehmen. Ein solches Problem kann etwa beim Zurückspielen von Backups auftreten.

Ein ähnlich gelagertes Problem tritt dann auf, wenn ein Kopier- oder Backupprogramm nicht in der Lage ist, die Charakteristik der Datei überhaupt zu erkennen; Sparse-Dateien werden nämlich nicht automatisch erzeugt, sondern bedürfen einer bestimmten Zugriffstechnik.

Ein weiteres Problemfeld besteht in der automatischen Fragmentierung: Sparse-Dateien werden aufgrund ihrer Anlage sozusagen inhärent fragmentiert und sind damit natürlicherweise beim Plattenzugriff nicht optimal zu erreichen. Ein lineares Einlesen einer Sparse-Datei kann daher recht zeitintensiv werden, was bei Datenbanken durchaus von Bedeutung sein kann.

NTFS Sparse

Das Windows-Dateisystem NTFS verfügt im Gegensatz zu unixbasierten Dateisystemen seit Version 3 über ein spezielles Dateiattribut, welches das Eingabe-/Ausgabesubsystem des Windowsdateisystems veranlasst, für zusammenhängende Bereiche einer Datei, die lediglich aus Nullwerten besteht, keinen Speicher auf dem Datenträger zu belegen.

Sowohl normale als auch komprimierte Daten können von NTFS als Sparse-Datei behandelt werden. Eine einmal als Sparse-Datei deklarierte Datei kann von NTFS nicht mehr in eine normale Datei umgewandelt werden.

Die für unixbasierte Dateisysteme genannten Probleme bestehen im Prinzip in gleicher Weise bei NTFS, wobei allerdings das Dateiattribut dafür sorgt, dass zumindest nach den generellen Programmierrichtlinien geschriebene Programme Sparse-Dateien transparent kopieren können, ohne dass die Sparse-Eigenschaft verloren geht.

Behandlung von Sparse-Dateien unter unixartigen Betriebssystemen

Erzeugen von Sparse-Dateien

Sparse-Dateien lassen sich mit dem Unix-Kommando dd erzeugen:

dd if=/dev/zero of=sparsefile bs=1 count=1 seek=10000000

Dieses exemplarische Kommando erzeugt eine 10 Megabyte große Sparse-Datei, in dem es den Schreibzeiger mittels seek auf die Position 10000000 setzt, und dann ein Byte schreibt.

Das Erzeugen von Sparse-Dateien, die in einem „Loch“ enden, ist bei manchen dd-Implementierung nur indirekt möglich. Dazu muss zunächst 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 für Solaris. Für 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() ausgeführt, was eine Sparsedatei ohne ein vom Nullbyte verschiedenes Zeichen darin anlegt.

Erkennen von Sparse-Dateien

Bei Sparse-Dateien unterscheidet sich die logische und physische Dateigröße. Während die logische Dateigröße auch die Nullbytes umfasst, bezeichnet die physische Dateigröße den Platz, den die Datei tatsächlich im Dateisystem benötigt.

Die option -s des Unix-Kommandos ls zeigt zusätzlich die physische Dateigröße an, allerdings in Blocks. Mit -k wird auch die logische Größe 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 du die logische Dateigröße angezeigt werden, allerdings zunächst auch in Blocks. Die Option --block-size 1 zeigt die physische Größe in Bytes an, während --bytes die logische Größe in Bytes anzeigt:

 du --block-size 1 sparse-file
 du --bytes sparse-file

Anwendungsbeispiel

Im Folgenden wird ein 10MB große Sparse-File erzeugt. Beim Vergleich mit einer 3MB großen Datei fällt erst durch einen einfachen du-Aufruf auf, dass es sich um ein Sparse-File handelt, welches nur 10 Blöcke auf der Festplatte benötigt.

> dd if=/dev/zero of=sparsefile bs=1 count=0 seek=10M
0+0 Datensätze ein
0+0 Datensätze aus
0 Bytes (0 B) kopiert, 2,9615e-05 s, 0,0 kB/s
> dd if=/dev/urandom of=normalfile bs=1M count=3
3+0 Datensätze ein
3+0 Datensätze aus
3145728 Bytes (3,1 MB) kopiert, 1,71034 s, 1,8 MB/s
> 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
> du *
3075 normalfile
10 sparsefile

Behandlung von Sparse-Dateien unter Microsoft Windows

Erzeugen von Sparse-Dateien

Eine Datei lässt sich mit dem Windows-Kommando fsutil als Sparse-Datei kennzeichnen:

fsutil sparse setflag <Dateiname>

Dadurch werden bei zukünftigen Schreiboperationen ungeschriebene Bereiche der Datei nicht auf dem Datenträger alloziiert. Um bereits vorhandene Bereiche einer als Sparse-Datei markierten Datei freizugeben, kann ebenfalls das Kommando verwendet werden:

fsutil sparse setrange <Dateiname> <Position in Byte> <Länge in Byte>

Dadurch wird der angegebene Bereich de-alloziiert. Zu beachten ist dabei, dass nur vollständige Blöcke, deren Länge ein Vielfaches von 64 KiB betragen und deren Startpositionen sich an Vielfachen von 64 KiB befinden, freigegeben werden können.

Um diese Operationen programmgesteuert durchzuführen, 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 gefüllt.

Erkennen von Sparse-Dateien

Ob eine Datei eine Sparse-Datei ist, kann ebenfalls mit dem fsutil-Kommando ermittelt werden:

fsutil sparse queryflag <Dateiname>

Um die tatsächlich alloziierten Bereiche aufzulisten, wird das Kommando wie folgt aufgerufen:

fsutil sparse queryrange <Dateiname>

Erzeugen von Sparse-Dateien mit MsSQL

Das Erzeugen von Sparse-Dateien durch MSSQL ab Version 2005 ist als Datenbank-Snapshot möglich. Die folgenden SQL-Anweisungen erzeugen eine Sparse-Datei der Größe 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

Literatur

Einzelnachweise


Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Sparse — Eine Sparse Datei (engl. sparse file; sparse für „dünnbesetzt“, „spärlich“ oder „zerstreut“) bezeichnet eine Datei, die in einem Dateisystem sehr kompakt gespeichert werden kann, wenn sie größtenteils aus Nullbytes besteht. Inhaltsverzeichnis 1… …   Deutsch Wikipedia

  • Datei-System — Das Dateisystem ist die Ablageorganisation auf einem Datenträger eines Computers. Dateien müssen gelesen, gespeichert oder verschoben werden. Für den Menschen müssen Dateiname und computerinterne Dateiadressen in Einklang gebracht werden. Das… …   Deutsch Wikipedia

  • NTFS Sparse — Eine Sparse Datei (engl. sparse file; sparse für „dünnbesetzt“, „spärlich“ oder „zerstreut“) bezeichnet eine Datei, die in einem Dateisystem sehr kompakt gespeichert werden kann, wenn sie größtenteils aus Nullbytes besteht. Inhaltsverzeichnis 1… …   Deutsch Wikipedia

  • Disk-Image-Datei — Dieser Artikel wurde aufgrund von inhaltlichen Mängeln auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf… …   Deutsch Wikipedia

  • .dmg — Disk Image Dateien (Endung .dmg oder .sparseimage oder .sparsebundle) sind ein Speicherabbild Datenformat unter Mac OS X. Sie haben den MIME Typ application/octet stream. Es kann sowohl durch Passwort geschützt als auch komprimiert werden und… …   Deutsch Wikipedia

  • Disk Image (Apple) — Disk Image Dateien (Endung .dmg oder .sparseimage oder .sparsebundle) sind ein Speicherabbild Datenformat unter Mac OS X. Sie haben den MIME Typ application/octet stream. Es kann sowohl durch Passwort geschützt als auch komprimiert werden und… …   Deutsch Wikipedia

  • Master File Table — NTFS Hersteller Microsoft Vollständige Bezeichnung New Technology File System Erstveröffentlichung Juli 1993 (Windows NT 3.1) Partitionskennung 0x07 (MBR) EBD0A0A2 B9E5 4433 87C0 68B6B72699C7 (GPT) …   Deutsch Wikipedia

  • NTFS4DOS — NTFS Hersteller Microsoft Vollständige Bezeichnung New Technology File System Erstveröffentlichung Juli 1993 (Windows NT 3.1) Partitionskennung 0x07 (MBR) EBD0A0A2 B9E5 4433 87C0 68B6B72699C7 (GPT) …   Deutsch Wikipedia

  • NTFSDOS — NTFS Hersteller Microsoft Vollständige Bezeichnung New Technology File System Erstveröffentlichung Juli 1993 (Windows NT 3.1) Partitionskennung 0x07 (MBR) EBD0A0A2 B9E5 4433 87C0 68B6B72699C7 (GPT) …   Deutsch Wikipedia

  • New Technology File System — NTFS Hersteller Microsoft Vollständige Bezeichnung New Technology File System Erstveröffentlichung Juli 1993 (Windows NT 3.1) Partitionskennung 0x07 (MBR) EBD0A0A2 B9E5 4433 87C0 68B6B72699C7 (GPT) …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”