ZFS Stripe - Weshalb werden die Platte nicht vollständig verwendet?

tony blue

Well-Known Member
Dec 26, 2017
79
2
48
52
Hallo,

ich verstehe gerade den verwendbaren freien Platz bei zwei ZFS-Pools nicht.

Rechner A:

Code:
zpool status
...

 pool: rpoolhdd
 state: ONLINE

config:
        NAME                                      STATE     READ WRITE CKSUM
        rpoolhdd                                  ONLINE       0     0     0
          ata-ST4000VN000-1H4168_Z300Z4E4-part3   ONLINE       0     0     0
          ata-ST8000NM0055-1RM112_ZA1GEWK2-part3  ONLINE       0     0     0

errors: No known data errors

-> Ein ZFS Stripe aus zwei HDDs mit 4 und 8 TB. Meine Erwartung wäre, dass als freier Platz etwas weniger als die Summe der Beiden also knapp 12 TB angezeigt werden. Tatsächlich sind aber nur verwendbar 7,25 MB


zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
...
rpoolhdd 7.25T 4.70T 2.55T - - 11% 64% 1.00x ONLINE -


Rechner B:

Code:
rpool status
...
pool: backupvideo

 state: ONLINE
  scan: scrub repaired 0B in 07:44:24 with 0 errors on Sun Jul  9 08:08:30 2023

config:

        NAME                                      STATE     READ WRITE CKSUM
        backupvideo                               ONLINE       0     0     0
          ata-ST8000NM000A-2KE101_WSD5R05Z-part1  ONLINE       0     0     0

-> Ein ZFS System auf einer HDD mit 8 TB. Hier wird ebenfalls der gleiche freie Speicherplatz angezeigt, obwohl hier nur eine 8 TB Platte arbeitet.


zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
...
backupvideo 7.25T 4.68T 2.57T - - 0% 64% 1.00x ONLINE -




Weshalb wird als freier Speicherplatz bei Rechner A nur 7,25 TB verwendet, obwohl eine 8 TB und eine 4 TB als ZFS Raid eingebaut sind?

Vielen Dank!


Tony
 
Du hast ja nicht ganze Disks benutzt sondern nur einzelne partitionen. Wie sind denn die disks partitioniert? (fdisk -l /dev/disk/by-id/ata-ST4000VN000-1H4168_Z300Z4E4 && fdisk -l /dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2) Was sagt zpool list -v?
 
Last edited:
Vielen Dank für die super schnelle Rückmeldung.

Wenn ich das richtig sehe, ist auch auf der 8 TB-Platte nur eine 3,6 TB Partition erstellt worden.

Kann ich diese irgendwie vergrößern? Ich bräuchte den Stripe nur vorübergehend, da ich ihn zum Umzug auf neue Platten verwende.

Vielen Dank!

Tony

Code:
 fdisk -l /dev/disk/by-id/ata-ST4000VN000-1H4168_Z300Z4E4 && fdisk -l /dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2
Disk /dev/disk/by-id/ata-ST4000VN000-1H4168_Z300Z4E4: 3,64 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: ST4000VN000-1H41
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 816F6959-9A0E-4F06-9294-49F62CE0C96C

Device                                                  Start        End    Sectors  Size Type
/dev/disk/by-id/ata-ST4000VN000-1H4168_Z300Z4E4-part1      34       2047       2014 1007K BIOS boot
/dev/disk/by-id/ata-ST4000VN000-1H4168_Z300Z4E4-part2    2048    2099199    2097152    1G EFI System
/dev/disk/by-id/ata-ST4000VN000-1H4168_Z300Z4E4-part3 2099200 7813988352 7811889153  3,6T Solaris /usr & Apple ZFS

Partition 1 does not start on physical sector boundary.
Disk /dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2: 7,28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: ST8000NM0055-1RM
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 15C6865A-454B-4236-A57F-3AE40082775F

Device                                                   Start        End    Sectors  Size Type
/dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2-part1      34       2047       2014 1007K BIOS boot
/dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2-part2    2048    2099199    2097152    1G EFI System
/dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2-part3 2099200 7813988352 7811889153  3,6T Solaris /usr & Apple ZFS

Partition 1 does not start on physical sector boundary.

Code:
zpool list -v
NAME                                                  SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
...
rpoolhdd                                             7.25T  4.70T  2.55T        -         -    11%    64%  1.00x    ONLINE  -
  ata-ST4000VN000-1H4168_Z300Z4E4-part3              3.64T  1.63T  2.00T        -         -    11%  44.8%      -    ONLINE
  ata-ST8000NM0055-1RM112_ZA1GEWK2-part3             3.64T  3.08T   562G        -         -    11%  84.9%      -    ONLINE
 
ein stripe ist im prinzip ein raid0 und unterliegt ähnlichen einschränkungen.
der kleinste gemeinsame nenner gibt die partitionsgröße vor und das wäre hier die 4TB HDD.
theoretisch könntest du versuchen noch eine 3.6TB partition zu erstellen und als 3. stripe hinzuzufügen.
ich halte das allerdings für keine gute idee, genauso, wie ein stripe generell keine gute idee ist.
produzierte eine der platten fehler, ist alles weg.
keine redundanz in irgendeiner form.

zusätzlich dürften 2 stripes auf der selben platte auch dafür sorgen, dass das ganze unterirdisch performt, weil für alle daten die 8tb platte doppelt angesprochen werden muss.
 
Vielen Dank.

Ich hatte ZFS Stripe beim Lesen so verstanden, dass man unterschiedliche Festplatten "hintereinander hängen" kann und somit wie auf eine große Festplatte zugreifen kann.

Verstehe ich es richtig, dass dies aber nur insoweit stimmt, dass auf allen Platten nur eine Partition in der Größe der kleinsten beteiligten HDD angelegt wird?

Vielen Dank!
 
Soweit ich weiß kann man durchaus Disks verschiedenere Größen in einem Pool stripen. Ein ZFS Stripe ist ja weder ein Raid0 noch ein JBOD und ZFS entscheidet da selbst wann es wieviele Daten, in welcher Reihenfolge auf welches Vdev schreibt. Man muss nur gucken, dass man da kein Vdev (Mirror/Raidz1/2/3/Draid) aus unterschiedlich großen Disks bildet, wenn man die volle Kapazität nutzen will.

Müsstest du über das Partitionierungstool deiner Wahl Partition 3 vergrößern. Danach den Pool über zpool set autoexpand=on rpoolhdd und zpool online -e rpoolhdd /dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2-part3 vergrößern.
 
Last edited:
was du möchtest ist ein JBOD.
auf das würde das zutreffen.
zfs bietet so einen modus nicht.
stripe verteilt die daten gleichmäßig über alle datenträger (und supported nur gleichgroße partitionen).
macht nur sinn für caches oder wegwerfdaten.
 
Soweit ich weiß kann man durchaus Disks verschiedenere Größen in einem Pool stripen. Ein ZFS Stripe ist ja weger ein Raid0 noch ein JBOD. Man muss nur gucken, dass man da deinen Mirror/Raidz1/2/3/draid aus unterschiedlich großen Disks bildet, wenn man die volle Kapazität nutzen will.

Müsstest du über das Partitionierungstool deiner Wahl Partition 3 vergrößern. Danach den Pool über zpool set autoexpand=on rpoolhdd und zpool online -e rpoolhdd /dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2-part3 vergrößern.
du kannst in einem pool vdevs unterschiedlicher größe verwenden, aber innerhalb eines vdevs nur identische größen.
und sobald du mehrere data-vdevs verwendest, bist du automatisch im raid (mirror, z, z2, z3) und du verlierst kapazität für die entsprechende redundanz.
zumindest ist mir kein weg bekannt ein stripe über mehere stripes zu fahren (da würde man wieder in das kapazitätsproblem laufen, wenn es denn ginge).

edit: muss auch hier korrigieren. innerhalb des pools ist auch striping über mehrere vdevs möglich. hab mich da schlicht geirrt (siehe post unter diesem).
 
Last edited:
Last edited:
Not that I would recommend to use such layouts, but ZFS is quite flexible:

Code:
zpool create -f testpool sdf sdg raidz sdc sdd sde

root@TestPBS:~# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdc            8:32   0     1G  0 disk
├─sdc1         8:33   0  1014M  0 part
└─sdc9         8:41   0     8M  0 part
sdd            8:48   0     1G  0 disk
├─sdd1         8:49   0  1014M  0 part
└─sdd9         8:57   0     8M  0 part
sde            8:64   0     1G  0 disk
├─sde1         8:65   0  1014M  0 part
└─sde9         8:73   0     8M  0 part
sdf            8:80   0     1G  0 disk
├─sdf1         8:81   0  1014M  0 part
└─sdf9         8:89   0     8M  0 part
sdg            8:96   0     3G  0 disk
├─sdg1         8:97   0     3G  0 part
└─sdg9         8:105  0     8M  0 part

root@TestPBS:~# zpool list -v
NAME         SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
testpool    6.44G   153K  6.44G        -         -     0%     0%  1.00x    ONLINE  -
  sdf       1014M  41.5K   960M        -         -     0%  0.00%      -    ONLINE
  sdg       2.99G  42.5K  2.75G        -         -     0%  0.00%      -    ONLINE
  raidz1-2  2.75G    69K  2.75G        -         -     0%  0.00%      -    ONLINE
    sdc     1014M      -      -        -         -      -      -      -    ONLINE
    sdd     1014M      -      -        -         -      -      -      -    ONLINE
    sde     1014M      -      -        -         -      -      -      -    ONLINE
  
root@TestPBS:~# zfs list -o space
NAME      AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
testpool  5.35G   130K        0B   25.7K             0B       104K
It will complain that it is not a good idea to stripe single disks with raidz but you can force it usingthe "-f" flag.

Edit:
edit: warum hab ich das jetzt in englisch geschrieben?
Hast du mich voll mit reingerissen ;)
 
Last edited:
Not that I would recommend to use such layouts, but ZFS is quite flexible:

Code:
zpool create -f testpool sdf sdg raidz sdc sdd sde

root@TestPBS:~# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdc            8:32   0     1G  0 disk
├─sdc1         8:33   0  1014M  0 part
└─sdc9         8:41   0     8M  0 part
sdd            8:48   0     1G  0 disk
├─sdd1         8:49   0  1014M  0 part
└─sdd9         8:57   0     8M  0 part
sde            8:64   0     1G  0 disk
├─sde1         8:65   0  1014M  0 part
└─sde9         8:73   0     8M  0 part
sdf            8:80   0     1G  0 disk
├─sdf1         8:81   0  1014M  0 part
└─sdf9         8:89   0     8M  0 part
sdg            8:96   0     3G  0 disk
├─sdg1         8:97   0     3G  0 part
└─sdg9         8:105  0     8M  0 part

root@TestPBS:~# zpool list -v
NAME         SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
testpool    6.44G   153K  6.44G        -         -     0%     0%  1.00x    ONLINE  -
  sdf       1014M  41.5K   960M        -         -     0%  0.00%      -    ONLINE
  sdg       2.99G  42.5K  2.75G        -         -     0%  0.00%      -    ONLINE
  raidz1-2  2.75G    69K  2.75G        -         -     0%  0.00%      -    ONLINE
    sdc     1014M      -      -        -         -      -      -      -    ONLINE
    sdd     1014M      -      -        -         -      -      -      -    ONLINE
    sde     1014M      -      -        -         -      -      -      -    ONLINE
 
root@TestPBS:~# zfs list -o space
NAME      AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
testpool  5.35G   130K        0B   25.7K             0B       104K

Edit:

Hast du mich voll mit reingerissen ;)
interessant. ich mein das wirklich.
ok. dann sollte das mit dem partition vergrössern tatsächlich problemlos klappen, da der stripe anscheinend die platten/partitionen jeweils als eigenständiges vdev ansieht.
da hatte ich ganz klar eine wissenslücke.
ich verwende zwar zfs auch schon ne weile, aber man lernt da tatsächlich dauernd was neues.

das von dir gebaute layout bereitet mir allerdings irgendwie kopfschmerzen.
russisch roulette mit daten kommt mir da in den sinn :D
 
da der stripe anscheinend die platten/partitionen jeweils als eigenständiges vdev ansieht.
Genau, einzelne Platten sind eigene Vdevs.
da hatte ich ganz klar eine wissenslücke.
ich verwende zwar zfs auch schon ne weile, aber man lernt da tatsächlich dauernd was neues.
Vermutlich weil man quasi nie ZFS für ein Raid0 missbraucht. Legt man keinen Wert auf seine Daten, dann greift man ja lieber gleich zu mdadm oder ähnliches mit weniger Overhead und besserer Performance. Dann fehlt einem da halt die Übung was Stripes betrifft... ;)

russisch roulette mit daten kommt mir da in den sinn
Genau. Nur weil man es mit ZFS kann, heißt es nicht, dass das überhaupt irgendeinen Sinn macht. :D
 
Last edited:
Das Problem, viele Leute verwechseln Stripe und Span. Stripe geht per Definition immer nur gleich groß und beim Span kannst du alles zusammen schrauben. Vorsicht, der Span ist dann immer so schnell wie eine Disk und der Stripe verdoppelt die bei 2 Disks.
 
Soweit ich weiß kann man durchaus Disks verschiedenere Größen in einem Pool stripen. Ein ZFS Stripe ist ja weder ein Raid0 noch ein JBOD und ZFS entscheidet da selbst wann es wieviele Daten, in welcher Reihenfolge auf welches Vdev schreibt. Man muss nur gucken, dass man da kein Vdev (Mirror/Raidz1/2/3/Draid) aus unterschiedlich großen Disks bildet, wenn man die volle Kapazität nutzen will.

Müsstest du über das Partitionierungstool deiner Wahl Partition 3 vergrößern. Danach den Pool über zpool set autoexpand=on rpoolhdd und zpool online -e rpoolhdd /dev/disk/by-id/ata-ST8000NM0055-1RM112_ZA1GEWK2-part3 vergrößern.
Meine Rückantwort hat etwas gedauert, da ich die Dinge zuerst nochmals weggesichert haben wollte, bevor ich an der Partition drehe.

Es hat funktioniert. Ich habe jetzt 10,9 T verfügbar.

Vielen Dank für alle Hinweise und Informationen.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!