Frage zu zfs und Plattenwechsel

bsd4me

Well-Known Member
Hallo,

in einem meiner Supermicro Server läuft ein mpr Controller (Avago Technologies (LSI) SAS3008), an dem 8 x 6TB SATA Platen geschlossen sind. Jetzt ist eine Platte ausgefallen und ich würde die gerne ersetzen. Auf jeden fall habe ich beobachtet, dass unter hoher Last das ganze nicht immer sauber läuft. Wie dem auch sei, ich habe eine Frage zum Plattenechsel, und zwar sind alle 8 Platten (da0..da7) gleich partitioniert:

[root@server:gpt] # ll /dev/da0*
crw-r----- 1 root operator 0x6b Nov 22 17:01 /dev/da0
crw-r----- 1 root operator 0x74 Nov 22 17:01 /dev/da0p1
crw-r----- 1 root operator 0x75 Nov 22 17:01 /dev/da0p2
crw-r----- 1 root operator 0x76 Nov 22 17:01 /dev/da0p3

wobei da0p1 die bootpartition ist, da0p2 swap und da0p3 die eigentliche Datenpartition. die Partitionen da0p3..da7p3 habe ich zusammengefasst zum pool zroot, der dann so aussieht:

[root@server:~] # zpool status
pool: zroot
state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
repaired.
scan: resilvered 524G in 19h53m with 0 errors on Tue Nov 22 08:15:48 2016
config:

NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
gpt/rda0 FAULTED 132 774 0 too many errors
gpt/rda1 ONLINE 0 0 0
gpt/rda2 ONLINE 0 0 0
gpt/rda3 ONLINE 0 0 0
gpt/rda4 ONLINE 0 0 0
gpt/rda5 ONLINE 0 0 0
gpt/rda6 ONLINE 0 0 0
gpt/rda7 ONLINE 0 0 0

ich wollte rda0 wieder aktivieren und schauen, wie es sich resilverd (weil ich meine es ist nicht wirklich kaputt, sondern der Controller hatte Probleme) mit einem "zpool clear zroot" und bekomme, fast das gleiche Ergebnis, allerdings mit der Zeile:

gpt/rda0 FAULTED 3 0 0 too many errors

nun - ich habe eine Ersatzdisk, aber die Frage ist, wenn ich sie tausche, bootet dann der Server wieder? Da ich ja jede Platte in 3 Partitionen aufgetailt habe, ist mir das nicht 100% klar. kann mir da jemand helfen? Oder fehlen infos?

Vielelicht als Zusatzinfos, ich habe die Platten folgendermassen partitioniert:

DISKS="da0 da1 da2 da3 da4 da5 da6 da7"
SWAPSIZE=8
for DISK in $DISKS; do
gpart destroy -F $DISK
dd if=/dev/zero of=/dev/$DISK bs=512 count=1
gpart create -s gpt $DISK
gpart add -t freebsd-boot -l b$DISK -b 40 -s 512K $DISK
gpart add -a 4k -t freebsd-swap -l s$DISK -s ${SWAPSIZE}G $DISK
gpart add -a 4k -t freebsd-zfs -l r$DISK $DISK
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $DISK
done

VG Norbert
 
Ohne jetzt auf Deine Frage zu antworten, denn die verstehe ich nicht - da Du ja die BootPartition 8 mal ... also nach dem Tausch noch 7 mal hast ....

aber wozu braucht man 8 mal 8 GB swap ?
 
mhmm... 8x8GB swap, weil der Server 32GB RAM hat - ich nehme immer etwa das doppelte an swap drauf. Im übrigen haben die Platten alle 6TB Kapazität, also genügend...

die Frage die ich habe ist: wenn ich für da0 einfach eine neue Platte reintue und neu boote, startet der rechner (ich weiss, dass da noch 7 andere mit bootpartition sind), findet er denn eine andere bootpartition als die von da0? Und: ich muss ja dann die neue Platte entsprechend formatieren, um dann da0p3 wieder in den zroot pool aufnehmen zu können, oder?
 
Du tauschst doch die Platte im laufenden Betrieb?! Wenn nicht, wird die Kiste trotzdem booten, sofern sie nicht versucht den Bootloader ausgerechnet von der einen Platte zu laden, die du gerade getauscht hast. Dann musste halt im BIOS die Reihenfolge ändern.
 
Hallo
Kannst du bitte versuchen, Code-Tags [1] zu verwenden?
aber die Frage ist, wenn ich sie tausche, bootet dann der Server wieder?
Nein, da dein Server vermutlich von der HDD rda0 booten möchte und diese ja kaputt ist bzw. leer.
8x8GB swap, weil der Server 32GB RAM hat - ich nehme immer etwa das doppelte an swap drauf
Das ist zu viel aber sollte kein Problem sein. Kannst du mal die Ausgabe von swapinfo zeigen? Hast du dort auch ein RAID eingerichtet für die 8 SWAP Partitions? Weil sonst ist das dann irgendwie sinnlos.

Zeig doch auch bitte noch die Ausgabe von gpart show -lp

Der Vorgang sollte grundsätzlich so laufen:
Code:
zpool offline zroot /dev/gpt/<device>
Das kann ein paar Minuten dauern, bis der Befehl sich zurück meldet. Danach die HDD tauschen und mit gpart diese wieder einrichten.
Code:
zpool replace zroot <ID> /dev/gpt/<device>
Das <device> ist bei dir hier jeweils die ZFS Partition auf der HDD und die <ID> ist die Nummer, welche jetzt anstelle der Partiton dortstehen sollte.

Man kann die Geschwindigkeit beim wiederherstellen erhöhen, indem man die Priorität erhöht:
Code:
sysctl vfs.zfs.resilver_delay = 0
sysctl vfs.zfs.scrub_delay = 0
Diese Werte müssen danach wieder angepasst werden!!! Daher zuerst auslesen und die Werte aufschreiben.

Zusätzlich muss man den Bootcode auf die Boot-Partition schreiben. Da du diese Partition auf allen HDD's hast, musst du diesen auch auf alle HDD's schreiben. Auch wenn du mal einen ZPOOL upgradest, musst du das machen! Machst du das nicht, so bootet den Server nur von HDD 1 und sonst von keiner.

Gruss

[1] https://www.bsdforen.de/help/bb-codes
 
danke für die Antwort...

Kannst du bitte versuchen, Code-Tags [1] zu verwenden?
oha - klaro... :)

und zum swap:

Code:
[root@server:~] # gpart show -lp
=>  34  11721045101  da0  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da0p1  bda0  (512K)
  1064  12582912  da0p2  sda0  (6.0G)
  12583976  11708461152  da0p3  rda0  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da1  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da1p1  bda1  (512K)
  1064  12582912  da1p2  sda1  (6.0G)
  12583976  11708461152  da1p3  rda1  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da2  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da2p1  bda2  (512K)
  1064  12582912  da2p2  sda2  (6.0G)
  12583976  11708461152  da2p3  rda2  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da3  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da3p1  bda3  (512K)
  1064  12582912  da3p2  sda3  (6.0G)
  12583976  11708461152  da3p3  rda3  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da4  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da4p1  bda4  (512K)
  1064  12582912  da4p2  sda4  (6.0G)
  12583976  11708461152  da4p3  rda4  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da5  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da5p1  bda5  (512K)
  1064  12582912  da5p2  sda5  (6.0G)
  12583976  11708461152  da5p3  rda5  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da6  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da6p1  bda6  (512K)
  1064  12582912  da6p2  sda6  (6.0G)
  12583976  11708461152  da6p3  rda6  (5.5T)
  11721045128  7  - free -  (3.5K)

=>  34  11721045101  da7  GPT  (5.5T)
  34  6  - free -  (3.0K)
  40  1024  da7p1  bda7  (512K)
  1064  12582912  da7p2  sda7  (6.0G)
  12583976  11708461152  da7p3  rda7  (5.5T)
  11721045128  7  - free -  (3.5K)

da habe ich doch nur 8x6GB swap angelegt... :)

bzw. mit swapinfo:

Code:
[root@server:~] # swapinfo
Device  1K-blocks  Used  Avail Capacity
/dev/gpt/sda0  6291456  0  6291456  0%
/dev/gpt/sda1  6291456  0  6291456  0%
/dev/gpt/sda2  6291456  0  6291456  0%
/dev/gpt/sda3  6291456  0  6291456  0%
/dev/gpt/sda4  6291456  0  6291456  0%
/dev/gpt/sda5  6291456  0  6291456  0%
/dev/gpt/sda6  6291456  0  6291456  0%
/dev/gpt/sda7  6291456  0  6291456  0%
Total  50331648  0 50331648  0%
 
Joahr, so viel Swap ist sicherlich nicht nötig, tut aber auch nicht weh. Ob der der Speicher auf den Platten nun unbenutzt ist, oder als Swap größtenteils ungenutzt...

Bei mir werden auch nur immer mal ein paar KB bis ein paar hundert MB Swap benutzt, je nachdem was gerade auf dem Server los war.
 
Ob der der Speicher auf den Platten nun unbenutzt ist, oder als Swap größtenteils ungenutzt...
Jo das Problem hier ist aber noch ein anderes. Programm X lagert SWAP auf Device /dev/gpt/sd6 aus. Was passiert, wenn genau diese Platte dann aussteigt? Der SWAP hier ist nicht redundant. Möglich wäre hier aber eine Lösung mit gmirror.

Gruss
 
Jo das Problem hier ist aber noch ein anderes. Programm X lagert SWAP auf Device /dev/gpt/sd6 aus. Was passiert, wenn genau diese Platte dann aussteigt? Der SWAP hier ist nicht redundant. Möglich wäre hier aber eine Lösung mit gmirror.

Ja, das wäre zu empfehlen. Ich glaube bsdinstall hat dafür sogar eine Option die man setzen kann.
 
Jo das Problem hier ist aber noch ein anderes. Programm X lagert SWAP auf Device /dev/gpt/sd6 aus. Was passiert, wenn genau diese Platte dann aussteigt? Der SWAP hier ist nicht redundant. Möglich wäre hier aber eine Lösung mit gmirror.

Gruss

Was spricht eigentlich gegen ein:
zfs create -V xG -o org.freebsd:swap=on -o checksum=off -o compression=off -o dedup=off -o sync=disabled -o primarycache=none zpoolname/swap
?

Gruss walter
 
Was spricht eigentlich gegen ein: zfs create -V xG -o org.freebsd:swap=on -o checksum=off -o compression=off -o dedup=off -o sync=disabled -o primarycache=none zpoolname/swap?
Aktuell kann ich dir das nicht sagen. Früher (FreeBSD 8 evtl. 9) war es so, dass sich ZFS (ARC) und SWAP gegenseitig zu tote geschaukelt haben.
 
Was spricht eigentlich gegen ein:
zfs create -V xG -o org.freebsd:swap=on -o checksum=off -o compression=off -o dedup=off -o sync=disabled -o primarycache=none zpoolname/swap
?

Im Regelfall spricht nichts dagegen. Eher die Randfälle sind das Problem. Neben dem, dass diese Variante vermutlich nicht großartig viele Nutzer hat und entsprechend wenig getestet ist, ist es fraglich wie sich das System verhält wenn jetzt ZFS der Speicher ausgehen sollte. Eine Swap ist in der Regel eigentlich ein direkt zugänglicher Speicher für den Kernel, auf den er ohne große Roundtrips zugreifen kann. Das ist, wenn es auch ZFS nutzt, nun nicht gerade der Fall.

Kann sich jetzt natürlich über die Jahre gebessert haben... aber selbst bsdinstall nutzt dieses Feature nicht, soweit ich weiß.

Swap wird bei mir auch eher nur genutzt, wenn pourdiere mal wieder 4 fette Pakete parallel baut, weniger weil es in sich selbst zu wenig Speicher hat.
 
@foxit & @Nuke

ich hatte auch deshalb gefragt, weil Swap im ZFS-Pool bei Solaris wohl eher Standard ist -
und man bei FreeBSD immer liest, dass das nicht so toll sein soll.

Aber vielleicht sind ja die von Foxit angesprochenen Probleme bei den
neueren FreeBSD-Versionen >= 10 nicht mehr 'virulent'.

Ich werde bei der nächsten Installation das einfach 'mal so machen:eek:

Grüße walter
 
Hallo,

ich nutze immer Bootlaufwerk getrennt von den Datenlaufwerken. Das vermeidet Probleme beim Tausch der Laufwerke. swap sollte redundant sein. Ich habe 2 PCI-E SSDs im System, die stecken in 2 Slots mit passenden Adaptern, von denen kannst du das OS laden, swap einrichten und ZIL wenn nötig. Da reichen auch 100GB pro SSD.

Gruß ré
 
danke für die Bemerkungen...

ja, der swap... ist nun wirklich ganz selten genutzt. Die Idee der Separation zwischen Daten und boot/root Platten ist mir nicht neu. Ich wollte nur nicht zu viel Platz verschwenden und für die boot/root/swap Partitionen jeweils eine 6TB Platte (also gespiegelt) nehmen... Auf jeden fall lass ich mir die Anmerkungen durch den Kopf gehen...

VG Norbert
 
sooo... ich habe mich entschlossen, den Server doch erst zu rebooten... Denn es laufen noch Prozesse, die darauf arbeiten. Scheint sich wieder eingerengt zu haben:

Code:
# zpool status
  pool: zroot
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
  continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Mon Dec  5 16:22:24 2016
  101G scanned out of 16.8T at 119M/s, 40h48m to go
  12.3G resilvered, 0.58% done
config:

  NAME  STATE  READ WRITE CKSUM
  zroot  ONLINE  0  0  0
  raidz2-0  ONLINE  0  0  0
  gpt/rda0  ONLINE  0  0  0  (resilvering)
  gpt/rda1  ONLINE  0  0  0
  gpt/rda2  ONLINE  0  0  0
  gpt/rda3  ONLINE  0  0  0
  gpt/rda4  ONLINE  0  0  0
  gpt/rda5  ONLINE  0  0  0
  gpt/rda6  ONLINE  0  0  0
  gpt/rda7  ONLINE  0  0  0

errors: No known data errors

ich warte erstmal... Kann es sein, dass der Controllertyp:
Code:
mpr0: <Avago Technologies (LSI) SAS3008> port 0xc000-0xc0ff mem 0xfddf0000-0xfddfffff irq 44 at device 0.0 on pci1
immer mal wieder Probleme unter hoher Last macht?

Denn ich habe so ein Verhalten bisher nur auf einem ähnlichen Controller einer älteren Maschine beobachtet:
Code:
mpt0: <LSILogic SAS/SATA Adapter> port 0xb800-0xb8ff mem 0xdf7fc000-0xdf7fffff,0xdf7e0000-0xdf7effff irq 17 at device 0.0 on pci2

Grüße, Norbert
 
ich hatte auch deshalb gefragt, weil Swap im ZFS-Pool bei Solaris wohl eher Standard ist -
und man bei FreeBSD immer liest, dass das nicht so toll sein soll.

Aber vielleicht sind ja die von Foxit angesprochenen Probleme bei den
neueren FreeBSD-Versionen >= 10 nicht mehr 'virulent'.
ZFS allokiert im "Write Path" Speicher. Um Daten zu schreiben, benötigt ZFS also RAM. Swap auf ZFS kann daher zu einem Deadlock führen, wenn das System keine anderen Ressourcen mehr frei hat: Es muss Speicher freigeräumt werden, damit das System weiterlaufen kann. Daher will der Kernel einige Seiten in die Swap schreiben. Da die Swap auf ZFS liegt, verlangt ZFS im Rahmen des Schreiben nach Speicher. Der Speicherallkoation kann aber erst stattgegeben werden, wenn Seiten in die Swap geschrieben wurden... Pech gehabt.

Die Frage ist eher, wie wahrscheinlich dieses Szenario ist. Denn wenn das System so knapp an Speicher ist, dass Speicher freigeräumt werden muss, bevor es überhaupt irgendwie weitergehen kann, hat man meist ganz andere Probleme. Da dürfte man generell schon so tief in der Swap stecken, dass das System unendlich lahm ist und de facto gar nichts mehr geht.
 
Zurück
Oben