Da ich zwar überhaupt keine Ahnung von ZFS habe, aber neugierig bin, möchte ich mal was fragen:
Heisst das, dass die Kompression gar nicht stattfindet, weil das File gar nicht geschrieben, sondern lediglich der Platz allokiert wird?
Claus
nicht ganz, es ist sozusagen die "ueber" kompression, es werden in diesem fall in der tat keine user daten blocks
allokiert und geschrieben um komprimierte 0en zu schreiben, wozu auch. jeder block wurde komprimiert mit dem
ergebniss das er keinen platz braucht, ergo wird nur die ondisk dnode fuer die datei allokiert und geschrieben
und die vermeintliche groesse der datei in der ondisk dnode gespeichert, jedoch ohne weitere user daten
bloecke zu belegen. es ist eine datei voller 0en, ein sparse file, lesen davon liefert wiederum nur nullen.
ich wuerde also sagen das topic dieses threads: 'Kompression funktioniert nicht (richtig)'
ist nicht ganz korrekt..in der tat funktioniert sie excellent.
ich hab das mal mit einem zdb output anschaulich gemacht, 'zdb -dddddd' auf den pool der
die besispiel datei enthaelt _mit_ kompression an:
-- snip --
Object lvl iblk dblk lsize asize type
4 3 16K 128K 128K 0 ZFS plain file (K=inherit) (Z=inherit)
264 bonus ZFS znode
path /testfile
atime Wed Feb 4 10:31:32 2009
mtime Wed Feb 4 10:31:44 2009
ctime Wed Feb 4 10:31:44 2009
crtime Wed Feb 4 10:31:32 2009
gen 30850
mode 100644
size 1073741824
parent 3
links 1
xattr 0
rdev 0x0000000000000000
Indirect blocks:
-- snip --
keine indirekten bloecke allokiert, und 'asize' ist 0
im gegensatz dazu das gleiche beispiel auf mit ausgeschalteter kompression (1MB datei),
'asize' (physisch fuer daten & metadaten belegte bloecke) == 1MB
Object lvl iblk dblk lsize asize type
5 2 16K 128K 1M 1.00M ZFS plain file (K=inherit) (Z=inherit)
264 bonus ZFS znode
path /testfile1
atime Wed Feb 4 10:36:25 2009
mtime Wed Feb 4 10:36:25 2009
ctime Wed Feb 4 10:36:25 2009
crtime Wed Feb 4 10:36:25 2009
gen 31155
mode 100644
size 1048576
parent 3
links 1
xattr 0
rdev 0x0000000000000000
Indirect blocks:
0 L1 1:e0400:400 0:100400:400 4000L/400P F=8 B=31155
0 L0 0:2cc0000:20000 20000L/20000P F=1 B=31155
20000 L0 0:c0000:20000 20000L/20000P F=1 B=31155
40000 L0 0:a0000:20000 20000L/20000P F=1 B=31155
60000 L0 0:80000:20000 20000L/20000P F=1 B=31155
80000 L0 1:80000:20000 20000L/20000P F=1 B=31155
a0000 L0 0:e0000:20000 20000L/20000P F=1 B=31155
c0000 L0 1:a0000:20000 20000L/20000P F=1 B=31155
e0000 L0 1:c0000:20000 20000L/20000P F=1 B=31155
-- snip --
frankB