Hallo, ich erstelle regelmaessig große Dateien, die ueber ein Loop-Device mit einem Dateisystem versehen und gemountet werden. Ich lege diese Dateien etwa so an: dd if=/dev/zero of=file bs=1M count=1000 Aber eigentlich ist es unnoetig, das ganze Gigabyte Daten mit Nullen zu fuellen. Mir wuerde es reichen, einfach 1GB an Bloecken zu allozieren. Gibt es eine Moeglichkeit, dies zu erreichen und so die Container schneller zu erstellen und meine Platten zu schonen? Gruss, Terje ______________________________________________________ Få den nye Yahoo! Messenger på http://no.messenger.yahoo.com/ Nye ikoner og bakgrunner, webkamera med superkvalitet og dobbelt så morsom
Terje Fåberg schrieb:
ich erstelle regelmaessig große Dateien, die ueber ein Loop-Device mit einem Dateisystem versehen und gemountet werden.
Ich lege diese Dateien etwa so an:
dd if=/dev/zero of=file bs=1M count=1000
Aber eigentlich ist es unnoetig, das ganze Gigabyte Daten mit Nullen zu fuellen. Mir wuerde es reichen, einfach 1GB an Bloecken zu allozieren. Gibt es eine Moeglichkeit, dies zu erreichen und so die Container schneller zu erstellen und meine Platten zu schonen?
Vielleicht geht's ja damit: dd if=/dev/null of=thefile bs=1M count=1 seek=1023 -- Gruß, Alex
Alexander Veit skrev:
Vielleicht geht's ja damit:
dd if=/dev/null of=thefile bs=1M count=1 seek=1023
Das Ergebnis ist durchaus interessant: Die Datei wird erstellt, hat die gewünschte Größe, aber nimmt keinen Platz auf der Platte ein: phoenix:/home # l total 8 drwxr-xr-x 2 root root 4096 Sep 23 20:02 ./ drwxr-xr-x 19 root root 4096 Dec 30 10:33 ../ phoenix:/home # dd if=/dev/zero of=terje.img bs=1M count=1 seek=1000 1+0 records in 1+0 records out phoenix:/home # l -h total 1.1M drwxr-xr-x 2 root root 4.0K Dec 30 18:17 ./ drwxr-xr-x 19 root root 4.0K Dec 30 10:33 ../ -rw-r--r-- 1 root root 1001M Dec 30 18:17 terje.img phoenix:/home # du -h 1.1M . ______________________________________________________ Få den nye Yahoo! Messenger på http://no.messenger.yahoo.com/ Nye ikoner og bakgrunner, webkamera med superkvalitet og dobbelt så morsom
Terje Fåberg schrieb:
Alexander Veit
skrev:
Vielleicht geht's ja damit:
dd if=/dev/null of=thefile bs=1M count=1 seek=1023
Das Ergebnis ist durchaus interessant: Die Datei wird erstellt, hat die gewünschte Größe, aber nimmt keinen Platz auf der Platte ein:
phoenix:/home # l total 8 drwxr-xr-x 2 root root 4096 Sep 23 20:02 ./ drwxr-xr-x 19 root root 4096 Dec 30 10:33 ../ phoenix:/home # dd if=/dev/zero of=terje.img bs=1M count=1 seek=1000 1+0 records in 1+0 records out phoenix:/home # l -h total 1.1M drwxr-xr-x 2 root root 4.0K Dec 30 18:17 ./ drwxr-xr-x 19 root root 4.0K Dec 30 10:33 ../ -rw-r--r-- 1 root root 1001M Dec 30 18:17 terje.img phoenix:/home # du -h 1.1M .
Ja, das ist ein sparse file (Datei mit Löchern drin). Geht nicht mit jedem Dateisystem. -- Gruß, Alex
On Tuesday 30 December 2003 06:22 pm, Terje Fåberg wrote:
Das Ergebnis ist durchaus interessant: Die Datei wird erstellt, hat die gewünschte Größe, aber nimmt keinen Platz auf der Platte ein:
Das nennt man eine dünn besetzte Datei (sparse file). Die Blöcke werden beim Lesen als Blöcke gelesen, die mit Nullbytes gefüllt sind, und belegen beim ersten Schreiben Platz auf der Platte (auch dann, wenn sie als Blöcke mit Nullbytes geschrieben werden). Das ist ein dokumentiertes und garantiertes Feature von Unix-Dateisystemen (und eines, das beim Backup mächtig Ärger machen kann). Kristian -- http://www.amazon.de/exec/obidos/wishlist/18E5SVQ5HJZXG
Kristian Köhntopp skrev:
Das nennt man eine dünn besetzte Datei (sparse file). Die Blöcke werden beim Lesen als Blöcke gelesen, die mit Nullbytes gefüllt sind, und belegen beim ersten Schreiben Platz auf der Platte (auch dann, wenn sie als Blöcke mit Nullbytes geschrieben werden).
Das ist ein dokumentiertes und garantiertes Feature von Unix-Dateisystemen (und eines, das beim Backup mächtig Ärger machen kann).
Danke fuer die Erklaerung. Mit "kleinen" Sparse Files funktioniert alles recht gut, so wie ueblich. Wenn ich auf diesen Sparse files ein Datei system anlege, wachsen sie nach und nach. Aber was wuerde geschehen, als meine Sparse files groesser werden wie das Dateisystem das diese enthaelt? Kann das innere Dateisystem darauf sauber reagieren? Da sind mir zu viel offene Fragen, als dass ich dies an- wenden wuerde, glaube ich. Ausserdem: Grosse Sparse files koennen meinen Rechner mit SuSE 9.0 reproduzierbar zu einem Absturz bringen. Ist dies ein Bug, das man an SuSE melden soll? ----snip---- phoenix:/home # dd if=/dev/zero of=terje.img bs=1M count=1 seek=1000000 1+0 records in 1+0 records out phoenix:/home # l -h total 193M drwxr-xr-x 2 root root 4.0K Dec 30 20:31 ./ drwxr-xr-x 19 root root 4.0K Dec 30 10:33 ../ -rw-r--r-- 1 root root 977G Dec 30 20:35 terje.img phoenix:/home # losetup /dev/loop0 terje.img phoenix:/home # mkfs.ext3 /dev/loop0 mke2fs 1.34 (25-Jul-2003) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 128008192 inodes, 256000256 blocks 12800012 blocks (5.00%) reserved for the super user First data block=0 7813 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Writing inode tables: 285/7813 ----snip---- Anschließend hilft nurnoch ein Druck auf den Resetknopf. Der Recher bleibt immer haengen, wenn ich ein Dateisystem auf diesem grossen Loop-Device erstelle. Reiserfs, ext2/3, xfs ist egal. Gruss, Terje ______________________________________________________ Få den nye Yahoo! Messenger på http://no.messenger.yahoo.com/ Nye ikoner og bakgrunner, webkamera med superkvalitet og dobbelt så morsom
Terje Fåberg schrieb:
Wenn ich auf diesen Sparse files ein Datei system anlege, wachsen sie nach und nach. Aber was wuerde geschehen, als meine Sparse files groesser werden wie das Dateisystem das diese enthaelt? Kann das innere Dateisystem darauf sauber reagieren? Da sind
Das Dateisystem wurde für eine 'Partition' von 1GB angelegt. Deshalb können auch nicht mehr Daten darauf gepeichert werden.
mir zu viel offene Fragen, als dass ich dies an- wenden wuerde, glaube ich.
Ausserdem: Grosse Sparse files koennen meinen Rechner mit SuSE 9.0 reproduzierbar zu einem Absturz bringen. Ist dies ein Bug, das man an SuSE melden soll?
----snip---- phoenix:/home # dd if=/dev/zero of=terje.img bs=1M count=1 seek=1000000
Das ergibt ein fast ein Terabyte großes sparse file (deswegen das ter-Präfix :-)! Wahrscheinlich stürzt die Kiste deswegen ab. -- Gruß, Alex
On Tuesday 30 December 2003 20:52, Terje Fåberg wrote:
Wenn ich auf diesen Sparse files ein Datei system anlege, wachsen sie nach und nach. Aber was wuerde geschehen, als meine Sparse files groesser werden wie das Dateisystem das diese enthaelt?
Bumm. Die genaue Klangfarbe kann ich Dir nicht nennen, aber der loop-Treiber wird dann versuchen Blöcke zu allozieren, die ihm das physikalische Dateisystem nicht mehr geben kann. Das muß knallen.
phoenix:/home # dd if=/dev/zero of=terje.img bs=1M count=1 seek=1000000 1+0 records in 1+0 records out
Das ergibt ein Dateisystem von einer Million Megabytes, also 10E12 Bytes. (1E3 = Kilo, 1E6 = Mega, 1E9 = Giga, 1E12 = Tera). Das ist ein Terabyte-Dateisystem. Wenn das physikalische Dateisystem drunter kleiner ist, kann das nicht funktionieren. Das sollte loop sauber abfangen. Bleibt stattdessen die Kiste stehen, ist das Kernelbug, der auf die Kernelmailingliste und an Suse gemeldet werden sollte, allerdings kein kritischer Fehler. Kristian
Moin, Am Di, den 30.12.2003 schrieb Terje Fåberg um 17:21:
Aber eigentlich ist es unnoetig, das ganze Gigabyte Daten mit Nullen zu fuellen. Mir wuerde es reichen, einfach 1GB an Bloecken zu allozieren. Gibt es eine Moeglichkeit, dies zu erreichen und so die Container schneller zu erstellen und meine Platten zu schonen?
Weiss nicht - selber probieren. Folgendes bringt dich wohl weiter: #!/usr/bin/perl -w use warnings; use strict; open SPARSE,">testfile"; seek SPARSE, 1024*1024*1024, 0; print SPARSE "\n"; close SPARSE; ...legt in etwa 2 Sekunden eine Datei an, die: ratti@ratti:~$ ls -lh testfile -rw-r--r-- 1 ratti ratti 1,1G 2003-12-30 18:17 testfile ...angeblich über 1 Gigabyte groß ist. Erst ein "du" bringt die dreckige Lüge ans Licht: ratti@ratti:~$ du -h testfile 4,0K testfile Sowas nennt sich Sparsefile und verlangt ein Dateisystem, das "leere Blöcke" auch beherrscht. Meines Wissens ist das bei ext2/3, reiser und so der Fall, nicht aber bei ollen Kamellen wie ISO9660 (DOS). Ob deine Denke an sich stimmt (sprich: Daß das beim mounten, fs anlegen und beschreiben wirklich was bringt) weiss ich nicht. Es wäre daher schön, wenn du deine Resultate postest. Gruß, Ratti -- -o) fontlinge | Font management for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/
participants (4)
-
Alexander Veit
-
Joerg Rossdeutscher
-
Kristian Köhntopp
-
Terje Fåberg