[[:tux|{{ :linux.png?40|}}]] =====ZFS Mirror Pool erstellen und verwalten===== Im Gegensatz zu einem [[:tux:zfs_simple_pool|ZFS Simple Pool]] bietet ein >>ZFS Mirror Pool<< durch die Spiegelung Redundanz und somit Ausfallsicherheit. In einem klassischen Setup ist dieses Konzept mit einem >>RAID-1<< vergleichbar. Ein ZFS Mirror Pool ist im Prinzip genau so einfach zu erstellen, wie ein ZFS Simple Pool, jedoch sind dafür logischerweise mindestens zwei Platten erforderlich, es können aber auch drei oder mehr Platten sein. Die Entwickler von ZFS gehen sogar soweit, dass sie sagen, dass es sinnvoll ist die beiden Platten an jeweils einen Controller zu betreiben. Das hat den Hintergedanken, dass auch ein Ausfall eines Controllers den Betrieb der anderen Platte am anderen Controller und somit des ganzen Systems sicherstellt. Um einen Mirror Pool zu erstellen gehen Sie wie folgt vor: # zpool create -f tank mirror /dev/sdb /dev/sdc Danach steht Ihnen bereits ein einsatzbereiter Mirror Pool namens >>tank<< zur Verfügung: # zpool status tank pool: tank state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 errors: No known data errors **Note:** Bei der Auswahl der Platten ist zu beachten, dass idealerweise gleich große und gleich schnelle Platten verwendet werden. Dabei ist zu berücksichtigen, dass zB eine 500GB Platte eines Herstellers von der Größe her nicht zwingend mit einer 500GB Platte eines anderen Herstellers übereinstimmt. Ein fehlendes MB kann beim Auswechseln einer defekten Platte das Vorhaben zum Scheitern verurteilen. Erstellen wir uns für die weiteren Schritte mal eine 512MiB große Testdatei: # dd if=/dev/zero of=/tank/big_test_file.img bs=1M count=512 512+0 Datensätze ein 512+0 Datensätze aus 536870912 Bytes (537 MB) kopiert, 5,16102 s, 104 MB/s # ls -l /tank insgesamt 524365 -rw-r--r-- 1 root root 536870912 14. Okt 08:28 big_test_file.img # zfs list NAME USED AVAIL REFER MOUNTPOINT tank 513M 463M 512M /tank # zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 1008M 513M 495M 50% 1.00x ONLINE - Wir können eine Platte aus dem Mirror Pool entnehmen: # zpool detach tank /dev/sdc Und unser Mirror Pool hat sich selbst zu einem Simple Pool degradiert: # zpool status tank pool: tank state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 sdb ONLINE 0 0 0 errors: No known data errors Aber unsere Daten sind nach wie vor vorhanden: # ls -l /tank insgesamt 524366 -rw-r--r-- 1 root root 536870912 14. Okt 09:24 big_test_file.img Durch folgenden Befehl können Sie die Platte (oder jede andere) dann wieder hinzufügen: # zpool attach -f tank /dev/sdb /dev/sdc Durch das >>zpool attach<< Kommando wird die zweite Platte auch wieder automatisch als Spiegelplatte hinzugefügt. Der Hinweis in der scan-Zeile zeigt auch, dass der Mirror wieder hergestellt wurde. Oracle nennt das >>resilvered<<, was eine Anlehnung an den Silberbelag eines Spiegels ist und nichts anderes wie einen >>Rebuild<< bedeutet: # zpool status tank pool: tank state: ONLINE scan: resilvered 512M in 0h0m with 0 errors on Sun Oct 14 09:37:59 2012 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 errors: No known data errors Man kann diesem einfachen Mirror Pool jetzt einen weiteren Mirror Pool hinzufügen und erhält dadurch sozusagen ein RAID-10: # zpool add -f tank mirror /dev/sdd /dev/sde Dem ZFS Pool >>tank<< der bislang aus dem Mirror >>mirror-0<< bestand, wurde nun ein weiterer Mirror >>mirror-1<< hinzugefügt: # zpool status tank pool: tank state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 sdd ONLINE 0 0 0 sde ONLINE 0 0 0 errors: No known data errors Bei einem Fehler einer Platte würde sich der Status zB in etwa wie folgt verändern: # zpool status tank pool: tank state: **DEGRADED** status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: http://zfsonlinux.org/msg/ZFS-8000-4J scan: none requested config: NAME STATE READ WRITE CKSUM tank **DEGRADED** 0 0 0 mirror-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 mirror-1 **DEGRADED** 0 0 0 sdd **UNAVAIL** 0 0 0 sde ONLINE 0 0 0 errors: No known data errors An dieser Stelle ist die Platte >>/dev/sdd<< ausgefallen und wird nun mit dem >>zpool replace<< Kommando durch die >>/dev/sdf<< ersetzt: # zpool replace -f tank /dev/sdd /dev/sdf Der Rebuild wird automatisch veranlasst und der Status des Pools kehrt zu normalen Konditionen zurück: # zpool status tank pool: tank state: ONLINE scan: resilvered 256M in 0h0m with 0 errors on Sun Oct 14 11:53:27 2012 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 sdf ONLINE 0 0 0 sde ONLINE 0 0 0 errors: No known data errors --- //pronto 2012/10/16 10:23// **Verwandte Artikel:** [[:tux:zfs_install|-> ZFS Support auf Linux Debian installieren]] [[:tux:zfs_simple_pool|-> ZFS Simple Pool erstellen und verwalten]] {{keywords>zfs zfsonlinux zpool raid-1 raid-10 mirror rebuild replace}}