Bei meinen Tests zur Performance eines SLOG Devices habe ich am Ende ziemlichen Mist gebaut. Die ersten Tests hatte ich mit SLOG Device gemacht, dann ohne und beim wieder hinzufügen habe ich beim Befehl das Wort "log" vergessen und hatte plötzlich ein einzelnes Device in meinem zpool. Mein erster Gedanke nach dem "Enter" war "Fuck"... Einzelne Devices lassen sich nämlich nicht einfach so entfernen. Und Daten die jetzt auf diesem Device landen, sind nicht mal gespiegelt weil es weder ein Mirror noch ein Raid-Z ist.
Richtig:
root@prox01:~# zpool add vol_raidz1 log /dev/disk/by-id/ata-Samsung_SSD_850_EVO_500GB_S2RBNXAH358685D-part1
Falsch, was ich gemacht habe:
root@prox01:~# zpool add vol_raidz1 /dev/disk/by-id/ata-Samsung_SSD_850_EVO_500GB_S2RBNXAH358685D-part1
root@prox01:~# zpool status
pool: vol_raidz1
state: ONLINE
scan: scrub repaired 0B in 0 days 16:16:30 with 0 errors on Sun Aug 11 16:40:32 2019
config:
NAME STATE READ WRITE CKSUM
vol_raidz1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
wwn-0x50014ee20d05dc08 ONLINE 0 0 0
wwn-0x50014ee2623066ec ONLINE 0 0 0
wwn-0x50014ee2b7b0c6c0 ONLINE 0 0 0
wwn-0x50014ee20cdb1ed3 ONLINE 0 0 0
wwn-0x5002538d40bd8507-part1 ONLINE 0 0 0
errors: No known data errors
Tja, was nun? Nach Rücksprache mit meinem Kollegen von kernel-error.de war die beste Möglichkeit aus der einzelnen SSD einen Mirror zu machen und ein neues SLOG Device hinzuzufügen. Gesagt getan, 3 SanDisk SSD PLUS 120GB SSDs gekauft und Stück für Stück ausgetauscht.
SSD hinzufügen:
root@prox01:~# zpool attach vol_raidz1 wwn-0x5002538d40bd8507-part1 ata-SanDisk_SSD_PLUS_120GB_191319802167
Den Scrap und das damit verbundene resilvering abwarten und anschließend die falsche SSD gegen eine neue Tauschen:
root@prox01:~# zpool status
pool: vol_raidz1
state: ONLINE
scan: resilvered 7.97G in 0 days 00:47:33 with 0 errors on Sun Sep 1 19:40:39 2019
config:
NAME STATE READ WRITE CKSUM
vol_raidz1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
wwn-0x50014ee20d05dc08 ONLINE 0 0 0
wwn-0x50014ee2623066ec ONLINE 0 0 0
wwn-0x50014ee2b7b0c6c0 ONLINE 0 0 0
wwn-0x50014ee20cdb1ed3 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
wwn-0x5002538d40bd8507-part1 ONLINE 0 0 0
ata-SanDisk_SSD_PLUS_120GB_191319802167 ONLINE 0 0 0
errors: No known data errors
root@prox01:~# zpool offline vol_raidz1 wwn-0x5002538d40bd8507-part1
root@prox01:~# zpool replace vol_raidz1 wwn-0x5002538d40bd8507-part1 ata-SanDisk_SSD_PLUS_120GB_191303802742
Wieder den resilver Prozess abwarten und anschließend das SLOG Device wieder hinzufügen, diesmal richtig:
root@prox01:~# zpool status
pool: vol_raidz1
state: ONLINE
scan: resilvered 7.92G in 0 days 00:49:28 with 0 errors on Sun Sep 1 21:01:20 2019
config:
NAME STATE READ WRITE CKSUM
vol_raidz1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
wwn-0x50014ee20d05dc08 ONLINE 0 0 0
wwn-0x50014ee2623066ec ONLINE 0 0 0
wwn-0x50014ee2b7b0c6c0 ONLINE 0 0 0
wwn-0x50014ee20cdb1ed3 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ata-SanDisk_SSD_PLUS_120GB_191303802742 ONLINE 0 0 0
ata-SanDisk_SSD_PLUS_120GB_191319802167 ONLINE 0 0 0
errors: No known data errors
root@prox01:~# zpool add vol_raidz1 log /dev/disk/by-id/ata-Samsung_SSD_850_EVO_500GB_S2RBNXAH358685D-part1
root@prox01:~# zpool status
pool: vol_raidz1
state: ONLINE
scan: resilvered 7.92G in 0 days 00:49:28 with 0 errors on Sun Sep 1 21:01:20 2019
config:
NAME STATE READ WRITE CKSUM
vol_raidz1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
wwn-0x50014ee20d05dc08 ONLINE 0 0 0
wwn-0x50014ee2623066ec ONLINE 0 0 0
wwn-0x50014ee2b7b0c6c0 ONLINE 0 0 0
wwn-0x50014ee20cdb1ed3 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ata-SanDisk_SSD_PLUS_120GB_191303802742 ONLINE 0 0 0
ata-SanDisk_SSD_PLUS_120GB_191319802167 ONLINE 0 0 0
logs
ata-Samsung_SSD_850_EVO_500GB_S2RBNXAH358685D-part1 ONLINE 0 0 0
errors: No known data errors
Weitere gelernte Dinge
Bei meinen eigenen Recherchen zu zu dem Problem bin ich auf andere Dinge gestoßen.
ZoL unterstützt smb und nfs Shares. Es ist dabei aber nur ein Wrapper und samba und nfs müssen vorinstalliert sein:
zfs set sharesmb=on vol_raidz1/video
zfs set sharenfs=on vol_raidz1/video
Alle ZFS Datasets mit Mountpoint und Sharesettings anzeigen lassen:
zfs list -r -o name,mountpoint,mounted,sharesmb
Das brauchte ich, weil bei meinen Versuchen am Anfang die ZFS Datasets nicht mehr automatisch gemounted wurden und der systemd Dienst zfs-share.service Fehler beim reboot brachte.
Grundsätzlich sollten zu einem zpool nur Platten mit der id hinzugefügt werden. Namen und Label sind vergänglich. Also immer unter /dev/disk/by-id/ nachsehen, wie die ID ist und diese nutzen!
Fazit
Das kann so erst mal weiter laufen und ist wieder Ausfallsicher. Sobald ZFS-on-Linux das Entfernen von Mirrors auf Root Ebene unterstützt, kommt das allerdings wieder weg. Die SSDs kann ich an anderer Stelle besser verwenden. Und schneller wird der zpool durch die Existenz von SSDs auch nicht weil sich die Geschwindigkeit an dem langsamsten Gerät orientiert. Vlt. mache ich daraus auch einen eigenen ZPOOL. Hab ja am Anfang geschrieben, dass ich drei von den SSDs gekauft habe und eine ist noch übrig 😉