Einmal kurz getestet, jedes "Device" ist 200M groß. Beginnen wir mal mit dem Mirror:
Code:
% zpool status spiegel
pool: spiegel
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
spiegel ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
md0 ONLINE 0 0 0
md1 ONLINE 0 0 0
% zpool list spiegel
spiegel 195M 79K 195M 0% - 0% 1.00x ONLINE -
% zfs list | grep spiegel
spiegel 73K 163M 19K /mnt/mirror
Hier sieht man schon gut, dass ZFS gerade auf kleinen Devices einen relativ großen Metadaten-Overhead hat. Außerdem sind bereits seit einiger Zeit etwa 3,3% eines Pools reserviert, damit der Copy on Write Logik nicht der Speicher ausgeht. Was in älteren Versionen ja immer ein Problem war. So bleiben von 195M nur 163M nutzbar. Die "reale" Größe der Speichermedien von insgesamt ca. 400M taucht nirgends auf. Schreiben wir mal 50M Zufallsdaten:
Code:
% dd if=/dev/random of=data bs=1M count=50
% zpool list spiegel
NAME SIZE ALLOC FREE FRAG EXPANDSZ CAP DEDUP HEALTH ALTROOT
spiegel 195M 50,1M 145M 7% - 25% 1.00x ONLINE -
% zfs list | grep spiegel
spiegel 50,1M 113M 50,1M /mnt/mirror
die 50M belegen also 50.1M realen Speicher. Was nun nicht verwundern, denn die minimale Blockgröße sind 2^9B und ich habe nur eine große Datei geschrieben. Da ist Verschnitt fast auszuschließen. Nun zum Vergleich das Ganze noch mal über ein RAIDZ1 aus 5 "Platten":
Code:
% zpool status raid
pool: raid
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
raid ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
md3 ONLINE 0 0 0
md4 ONLINE 0 0 0
errors: No known data errors
% zpool list raid
NAME SIZE ALLOC FREE FRAG EXPANDSZ CAP DEDUP HEALTH ALTROOT
raid 976M 136K 976M 0% - 0% 1.00x ONLINE -
% zfs list | grep raid
raid 99,1K 748M 27,2K /mnt/raid
Die reale Größe sind 976M, davon sind erst einmal 748M nutzbar. Schreiben wir also wieder 50M Zufallsdaten:
Code:
% dd if=/dev/random of=data bs=1M count=50
% zpool list raid
NAME SIZE ALLOC FREE FRAG EXPANDSZ CAP DEDUP HEALTH ALTROOT
raid 976M 62,8M 913M 5% - 6% 1.00x ONLINE -
% zfs list | grep raid
raid 50,1M 698M 50,0M /mnt/raid
Und nun sieht man, dass ich oben im Thread Mist erzählt habe. Oder besser gesagt mich geirrt habe. Während 'zpool list' tatsächlich beim Mirror die Redundanz raus läst und beim RAIDZ1 mit einbezieht, tut 'zfs list' es nicht. Schalten wir also mal Kompression ein. Dieses mal schreibe ich 50M gut komprimierbare Daten. Zuerst der Mirror:
Code:
% zfs set compression=gzip spiegel
% cp /tmp/50M /mnt/mirror
% zfs list | grep spiegel
spiegel 6,11M 157M 6,03M /mnt/mirror
Und nun das RAIDZ1:
Code:
% zfs set compression=gzip raid
% cp /tmp/50M /mnt/raid
% zfs list | grep raid
raid 6,27M 741M 6,17M /mnt/raid
Hier hat das RAIDZ1 einen leicht größeren Overhead, aber die paar Kilobyte mögen auch nur Rauschen sein. Fazit: Klein-Yamagi zieht seine Erklärung in Sachen Einbeziehung der Redundanz zurück und weiß nicht so recht, was bei dir passiert. Außer vielleicht, dass die 3,3% und der Metadaten-Overhead den Unterschied erklären. Das wäre dann auch bei leerem Pool im 'zfs list' zu sehen. Vielleicht hat ja noch jemand anders eine Idee.
