zfs in raid1 umwandeln

rakso

Well-Known Member
hallo!

ich habe nach anleitung freebsd 8.2-STABLE auf ZFS installiert.
nun habe ich eine zweite platte (ad10) eingebaut und möchte ein raid1 draus machen, damit bei ausfall einer platte kein datenverlust passiert.


Code:
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          ad10p2    ONLINE       0     0     0


Code:
tank/root on / (zfs, local)
devfs on /dev (devfs, local, multilabel)
tank/root/tmp on /tmp (zfs, local)
tank/root/var on /var (zfs, local)
/usr/data on /data (nullfs, local)

Code:
>zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
tank           59.7G   625G    19K  none
tank/root      59.7G   625G  59.6G  /
tank/root/tmp  28.5K   625G  28.5K  /tmp
tank/root/var   143M   625G   143M  /var

ad6: 715404MB <WDC WD7500AALX-009BA0 15.01H15> at ata3-master UDMA100 SATA 3Gb/s
ad10: 715404MB <WDC WD7500AAKS-00RBA0 30.04G30> at ata5-master UDMA100 SATA 3Gb/s



Wie muss ich vorgehen?
Grüße
rakso
 
zpool attach tank platte1 platte2

Was mich verwirrt, warum du ein ad10p2 (also p2...eine Partition) hast, anstatt einfach nur das blanke Device ad10.
Nach welcher Anleitung bist du vorgegangen?
 
hi,
zfs attach gibt einen mirror.
raidz (raid1) geht erst ab drei Platten.
Sieht so aus als gabe es eine boot-Partition, keinen swap und freebsd-zfs, richtig ?
 
ich glaube das könnte das hier gewesen sein:
http://www.chruetertee.ch/blog/archive/2007/11/17/freebsd-auf-zfs-installieren.html

aber auch nicht 1:1... hatte ja lange zeit probleme.. weiss leider nichtmehr wie genau ich es dann noch geschafft habe.

oopps ja du hast recht, bei "top" steht nach Swap: nichts ... shice... wie kann man das fixen?

welches howto, auch zur einführung, ist zu empfehlen?
aber wichtig wäre mir jetzt erst, swap zu haben,... ich denke der ist wichtig, sollten mal das 1G RAM nicht ausrichend sein.

und dann zfs mirror. wieso heisst das nicht raid1? raid1 war doch (früher.. ?) bestehend aus zwei platten


greetz
 
"metro" hat sich verlesen. Er hat wohl "RaidZ1" gelesen anstatt "Raid1"

Raid-1 ist immer noch das gleiche: ein Mirror.
RaidZ1 ist vergleichbar einem Raid-5

Es gibt zahlreiche How-Tows...das von dir verlinkte ist von 2007 schon etwas "alt".
Ich habe das noch nicht ausprobiert, deshalb kann ich jetzt kein bestimmtes empfehlen, aber das hier schaut doch ganz gut aus:
http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/Mirror
 
Was mich verwirrt, warum du ein ad10p2 (also p2...eine Partition) hast, anstatt einfach nur das blanke Device ad10.

keine ahnung... /etc/fstab gibts auch nicht.
manche anleitungen fahren ja zweigleisig... zusätzlich noch gmirror.. das scheine ich aber nicht zu haben.


"metro" hat sich verlesen. Er hat wohl "RaidZ1" gelesen anstatt "Raid1"

Raid-1 ist immer noch das gleiche: ein Mirror.
RaidZ1 ist vergleichbar einem Raid-5

Es gibt zahlreiche How-Tows...das von dir verlinkte ist von 2007 schon etwas "alt".
Ich habe das noch nicht ausprobiert, deshalb kann ich jetzt kein bestimmtes empfehlen, aber das hier schaut doch ganz gut aus:
http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/Mirror
oh dann bin ich aber froh :)
naja ein installationshowto bringt mir jetzt nix.. nun will ich das zfs aus admin-sicht verstehen :)
 
Klar...mit "nur" ad6 und ad10 geht es bei dir nicht, da du eben keine ganzen Disks vorliegen hast, sondern das irgendwie in Partitionen drin hast.

Aus dem Grund bin ich mir jetzt grad auch nicht ganz sicher wie man jetzt da noch nen Mirror draus macht...
Andererseits...in den meisten Anleitungen wird mit Partitionierung gearbeitet...muss wohl doch so :-)

Ich hab ZFS bisher nur für Datenpools im Einsatz...booten tu ich immer noch von nem UFS2.
 
Code:
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h2m, 1.80% done, 1h56m to go
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad10p2  ONLINE       0     0     0
            ad6     ONLINE       0     0     0  1.08G resilvered
das sieht gut aus.

# zpool attach tank ad10p2 ad6
Please be sure to invoke installgrub(1M) to make 'ad6' bootable.

installgrub: Command not found.

was muss ich noch machen?
und ich versteh nicht genau, was das nun mit der partition bei ad10p2 bedeutet... kannst du mir das erklären?
(und ob ich das evtl wieder ins "Reine" kriegen kann, wenn man dann von ad6 bootet und ad10 platt macht und dann ad10 als 2. hd hinzufügt)
 
Poste mal ein "gpart list", damit man mal weiß wie die Partitionsstruktur bei dir im Moment aussieht.
 
Code:
Geom name: ad10
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 1465149134
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: ad10p1
   Mediasize: 65536 (64K)
   Sectorsize: 512
   Mode: r0w0e0
   rawuuid: cc49931c-04ce-11e0-a8ff-0011d88fa266
   rawtype: 83bd6b9d-7f41-11dc-be0b-001560b84f0f
   label: (null)
   length: 65536
   offset: 17408
   type: freebsd-boot
   index: 1
   end: 161
   start: 34
2. Name: ad10p2
   Mediasize: 750156274176 (699G)
   Sectorsize: 512
   Mode: r1w1e1
   rawuuid: cc4f0f50-04ce-11e0-a8ff-0011d88fa266
   rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
   label: (null)
   length: 750156274176
   offset: 82944
   type: freebsd-zfs
   index: 2
   end: 1465149134
   start: 162
Consumers:
1. Name: ad10
   Mediasize: 750156374016 (699G)
   Sectorsize: 512
   Mode: r1w1e2

eine freebsd-swap partition ist nicht drunter :(
und swap auf zfs ist wohl keine gute idee (lt. wiki, wegen dem rambedarf)
wie bekomm ich jetzt noch eine swap unter? dazu müsste man ja also mit gpart das zfs verkleinern.
edit2: hab jetzt swap per zfs wie folgt

Code:
 zfs create -V 4G tank/swap
zfs set org.freebsd:swap=on tank/swap
zfs set checksum=off tank/swap
swapon /dev/zvol/tank/swap

PS Frage: Warum sieht man in /dev/zvol/tank/ nur swap und nicht die anderen?
warum steht bei der swap-zeile 625G avail??

Code:
>zfs list -rt all tank
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank                  63.8G   621G    19K  none
tank/root             59.8G   621G  59.6G  /
tank/root@testabbild  84.8M      -  59.7G  -
tank/root/tmp          644K   621G   644K  /tmp
tank/root/var          143M   621G   143M  /var
tank/swap                4G   625G    16K  -
 
Zuletzt bearbeitet:
@cla: danke für die Korrektur (sorry);

Laut Gurus@stable ist ein System ohne swap, unabhängig von der Größe des ram, falsch.

Was du grundsätzlich machen könntest, ist die zweite, neue Platte frisch zu partitionieren, dann deinen Mirror sich resilvern lassen, den wieder zu trennen, dann die alten Platte genau wie die neue aufzusetzen, und dann den Mirror wieder sich 'rückwärts' aufbauen lassen.
Funktioniert ( inclusive Zittern und Schweißausbrüchen ;) )

-->SEHR GUTE BACKUPS<-- immer vorausgesetzt :ugly:

Mutig ?
 
Zuletzt bearbeitet:
Code:
warum steht bei der swap-zeile  625G avail??[/QUOTE]

Weil du die Checksummen für deinen Swap ausgeschaltet hast (zfs set checksum=off tank/swap). Die müssen dann natürlich keinen Speicherplatz belegen und somit steht mehr zur Verfügung.

Du hast also genau 2 Partitonen: Eine winzige mit deinem Boot-Code und eine Riesige mit allem anderen.
Diese Große hast du jetzt auf die GESAMTE andere Platte gespiegelt...somit hast du immer noch "nur" den Bootcode auf der ersten Platte ohne Redundanz, den großen Pool jedoch nun redundant.
Wenn du vorher die zweite Platte identisch partitioniert hättest und dann deine einzelnen Partitionen gespiegelt, hättest du alles redundant gehabt.
Ich vermute aber, das auch das noch nicht die 100% Lösung ist...schließlich muss auch noch der MBR/Bootcode irgendwie dupliziert werden...Das hat aber weniger mit ZFS zu tun...

Zum Swap hab ich jetzt momentan (neben den schon genannten) auch keine weitere Idee mehr.
 
@cla: danke für die Korrektur (sorry);
Was du grundsätzlich machen könntest, ist die zweite, neue Platte frisch zu partitionieren, dann deinen Mirror sich resilvern lassen, den wieder zu trennen, dann die alten Platte genau wie die neue aufzusetzen, und dann den Mirror wieder sich 'rückwärts' aufbauen lassen.


> Mutig ?
jo:)

haba auch nicht soviel zu verlieren, der rootserver liegt noch (wo)anders gesichert.


Du hast also genau 2 Partitonen: Eine winzige mit deinem Boot-Code und eine Riesige mit allem anderen.
Diese Große hast du jetzt auf die GESAMTE andere Platte gespiegelt...somit hast du immer noch "nur" den Bootcode auf der ersten Platte ohne Redundanz, den großen Pool jedoch nun redundant.
Wenn du vorher die zweite Platte identisch partitioniert hättest und dann deine einzelnen Partitionen gespiegelt, hättest du alles redundant gehabt.
Ich vermute aber, das auch das noch nicht die 100% Lösung ist...schließlich muss auch noch der MBR/Bootcode irgendwie dupliziert werden...Das hat aber weniger mit ZFS zu tun...

okay dann muss ich das natürlich machen... wie geht das?
also ad10 neu partitionieren. kann man sicher auch irgendwie von ad6 kopieren? aber ich wills ja endlich mal lernen.
und das ist dann "the way to go" - anders gehts nicht mit zfs boot?

noch eine frage: wie verschlüsselt man nun das ganze? geht das inzwischen auch mit zfs ( http://www.bsdforen.de/showpost.php?p=211587&postcount=2 ) oder müsste ich dann wieder ganz von vorne was anderes machen?

Danke & Schönen Sonntag

edit:
das kliingt ja einfach, wenn das auch unter freebsd möglich ist?
http://download.oracle.com/docs/cd/E19963-01/html/821-1448/gkkih.html
 
Zuletzt bearbeitet:
Ok. :)
Sorry für fogenden Riesenpost.

@rakso: Eigentlich wollte ich ähnlich der folgenden Anleitung deinen speziellen Aufbau berücksichtigen und neueplatte partitionieren --> spiegeln -> alteplatte partitionieren -> zurückspiegeln und gut.
Da die Anleitung, nach der dein System gebaut ist, aber schon *etwas* älter ist, d.h. in weiten Teilen nicht mehr aktuell, läßt sich ehrlich gesagt das für mich nicht vorhersehbar umsetzen, da damals noch andere 'Spielregeln' geherrscht haben.
Bootest du da irgendwie von ufs ?

Daher empfehle ich, zugegebenermassen etwas feige, einen Neuaufbau nach *modernerem* Kenntnisstand, und die eigentlichen Daten, wenn nötig aus Backups wieder einzuspielen.

Das Folgende gibt ein komplettes ZFS-System. Weils so schön ist, mit verschlüsseltem und gespiegeltem Swap, aufgebaut mit GPT Partitionen, nach dem blogpost von pjd, und der sollte es ja nun wirklich wissen ;)
http://blogs.freebsdish.org/pjd/2010/08/06/from-sysinstall-to-zfs-only-configuration/

Weils so schön ist, mit verschlüsseltem und gespiegeltem Swap, aufgebaut mit GPT Partitionen,

Der Eintrag dort in /boot/loader.conf :
--> vm.kmem_size="6G" # This should be 150% of your RAM. <-- ist *NICHT* mehr notwendig und eher schädlich
--> vfs.zfs.arc_max="3G" # This should be a little less than the amount of your RAM. <-- der aber schon !!

---
geom_label_load="YES"
geom_part_gpt_load="YES"
----
können beide nach dem ersten booten (aufholzklopf) entfernt/auskommentiert werden, da der Kernel sich diese sowieso holt.
Der Rechner hat hier 6GB RAM, sehr viel weniger sollte das auch nicht sein, OS ist
8.2-STABLE auf amd64.
So sollte es am Ende aussehen:
Code:
--- Partitionen
chi<~>500*gpart show
=>       34  488397101  ad18  GPT  (232G)
         34        128     1  freebsd-boot  (64k)
        162   12582912     2  freebsd-swap  (6.0G)
   12583074  475814061     3  freebsd-zfs  (226G)

=>       34  488397101  ad20  GPT  (232G)
         34        128     1  freebsd-boot  (64k)
        162   12582912     2  freebsd-swap  (6.0G)
   12583074  475814061     3  freebsd-zfs  (226G)

----  Swap
chi<~>502*swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/mirror/swap.eli   6291452        0  6291452     0%

chi<~>504*gmirror status
       Name    Status  Components
mirror/swap  COMPLETE  gpt/swap0
                       gpt/swap1

--- Pool
chi<~>501*zpool status

  pool: system
 state: ONLINE
 scrub: none requested
config:

        NAME             STATE     READ WRITE CKSUM
        system           ONLINE       0     0     0
          mirror         ONLINE       0     0     0
            gpt/asystem  ONLINE       0     0     0
            gpt/bsystem  ONLINE       0     0     0

errors: No known data errors

--- ZFS Version
chi<~>505*zfs-stats -p
------------------------------------------------------------------------
ZFS Subsystem Report                            Sun May  8 17:07:54 2011
------------------------------------------------------------------------
ZFS pool information:
        Storage pool Version (spa):             15
        Filesystem Version (zpl):               4
------------------------------------------------------------------------

Viel Erfolg

hth
 
Bitte spiegelt nicht die kompletten Platten, sondern Partitionen darauf, entweder nach dem alten MS-DOS-Schema (MBR) oder dem modernen GPT.

Manche BIOSe booten nicht, wenn ihr sie im DDD-Modus (dangerously dedicated disk) benutzt und das wird euch äußerst "traurig" machen, wenn euch mal was kaputt geht und es mit der ursprünglichen Hardware gelaufen ist.

Außerdem gibt es immer wieder Berichte von Problemen. Partitionierungstools (allgemein: Disk-Tools) je nachdem wie schlecht sie programmiert sind, können dann Schaden anrichten, wenn sie die Platte nicht erkennen.

Korrekt ist also: ada0s1 oder ada0p1 zu spiegeln und nicht ada0 direkt. Richtet auf jeden Fall irgendein Partitionenschema ein. Die paar kB sollten es euch wert sein.
 
Korrekt ist also: ada0s1 oder ada0p1 zu spiegeln und nicht ada0 direkt. Richtet auf jeden Fall irgendein Partitionenschema ein. Die paar kB sollten es euch wert sein.
Fast ;).
Wobei diese '*s1 ode *p1' Partitionenn bei einer, wie gewünscht korrekt partitionierten Platte genau die Boot-Partitionen sind. Diese sollten meinen Wissens nach separat erstellt werden. Auch eine '*p2 oder *s2' Swap Partition hat bei ZFS Spiegel keinen Sinn, pjd nimmt einen geom-mirror.
Die jeweilige ZFS Partition (siehe fruheren Post, hier '*p3' oder '*s3'), je nachdem, ist die richtige.
Erkennen kann man die Art der Partition mit 'gpart show', falls so erstellt.
 
Zuletzt bearbeitet:
Verschlüsselung ist in FreeBSD ZFS noch nicht integriert und wird auch noch nicht so schnell kommen.
Du müsstest dich mit anderen Lösungen behelfen (z.B. geom/geli) unter ZFS als Zwischenlayer.

Das kann überhaupt erst kommen, wenn die nächste Oracle Solaris Version erschienen ist, da der Source-Code bis dann unter Verschluss steht.
 
ok dann hol ich mir nun einen HP N36L.
da kann man "nur" 4 platten einbauen, wie bekomme ich die größte kapazität mit ausfallsicherheit? vermutlich 2x 2TB im ZFS-mirror.. ist größer als 4x 2TB im raidZ?

gibts einen anderen kleinen server der mehr als 4 HDDs packt? denn die plattenanzahl wird wohl der erste flaschenhals :(
 
Bitte spiegelt nicht die kompletten Platten, sondern Partitionen darauf, entweder nach dem alten MS-DOS-Schema (MBR) oder dem modernen GPT.

Manche BIOSe booten nicht, wenn ihr sie im DDD-Modus (dangerously dedicated disk) benutzt und das wird euch äußerst "traurig" machen, wenn euch mal was kaputt geht und es mit der ursprünglichen Hardware gelaufen ist.

Außerdem gibt es immer wieder Berichte von Problemen. Partitionierungstools (allgemein: Disk-Tools) je nachdem wie schlecht sie programmiert sind, können dann Schaden anrichten, wenn sie die Platte nicht erkennen.

Korrekt ist also: ada0s1 oder ada0p1 zu spiegeln und nicht ada0 direkt. Richtet auf jeden Fall irgendein Partitionenschema ein. Die paar kB sollten es euch wert sein.

Das ist im Fall von ZFS definitiv nicht korrekt.
Wenn Du ZFS mit Partitions kommt, schaltet ZFS automatisch das Caching ab, weil es davon ausgeht, das noch ein anderes FS die Platte betatscht.

ZFS ist wie die BORG und geht nach dem Prinzip, alles meins vor... bekommt es nicht das was es erwartet, bremst es sich selber aus.

Man kann über diese Automatismen fluchen, aber ZFS ist eben so.

Dem OP würde ich empfehlen die zweite Platte als
bsp tank2 aufsetzen

zfs snapshot von der ersten Platte machen und dann zfs send receive, funktioniert nach meinen Erfahrungen zuverlässig.

Am besten so...
Code:
zfs snapshot -r tank/@mai2011

Dan den Kram an den anderen Pool senden
Code:
zfs send -R tank/@mai2011 | zfs receive -d tank2/

Dann nach Abschluss den ersten Pool zerstoeren.

zpool destroy tank

die Platte als Spiegel Platte in den Pool einhaengen und resilvern
Code:
zpool attach -f /dev/ad§haumichblau
Danach den zpool exportieren!

dann importieren wir tank2 als tank
Code:
zpool import tank2 tank

Code:
zpool status -x und
Code:
zpool list
sollten das Ding jetzt als tank anzeigen.

Ach bitte mitdenken, bin schon recht müde, nicht blindes Copy and Paste machen.
Danke. :)
 
Zuletzt bearbeitet:
ok dann hol ich mir nun einen HP N36L.
da kann man "nur" 4 platten einbauen, wie bekomme ich die größte kapazität mit ausfallsicherheit? vermutlich 2x 2TB im ZFS-mirror.. ist größer als 4x 2TB im raidZ?

gibts einen anderen kleinen server der mehr als 4 HDDs packt? denn die plattenanzahl wird wohl der erste flaschenhals :(

Hi, kann darauf noch jemand was sagen?
 
Das ist im Fall von ZFS definitiv nicht korrekt.
Wenn Du ZFS mit Partitions kommt, schaltet ZFS automatisch das Caching ab, weil es davon ausgeht, das noch ein anderes FS die Platte betatscht.

Scheint bei mir nicht der Fall zu sein. Bei mir ist ZFS voll mit Cache ausgerüstet und ich habe alles partitioniert.

Außerdem wirst Du es bereuen, wenn Du einen Rechner mit einem kaputten BIOS bekommst und das BIOS hängt, weil auf einer Festplatte kein MBR gefunden worden ist. Davon gibt es genug im Umlauf.

Lies im Handbuch über DDD. Die Belehrung da ist deutlich genug, denke ich.
 
Das ist im Fall von ZFS definitiv nicht korrekt.
Wenn Du ZFS mit Partitions kommt, schaltet ZFS automatisch das Caching ab, weil es davon ausgeht, das noch ein anderes FS die Platte betatscht.

Das ist nur unter Solaris der Fall. FreeBSD hat dieses Problem nicht. Kann auch sein das Solaris das gefixt hat.
 
Zurück
Oben