Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
computer:zfs-storage_unter_debian_squeeze [2011/03/01 17:09] christian |
— (aktuell) | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Debian GNU/kFreeBSD (//**k**ernel of FreeBSD//) stellt ein Debian-Derivat mit FreeBSD-Kernel dar. Das erste Release erschien vor kurzem mit Debian Squeeze, verfügt über den Kernel von FreeBSD 8.1 und unterstützt daher ZFS in der Pool-Version v14. | ||
- | ======Kurzübersicht über ZFS====== | ||
- | Gegenüber bestehenden Software-RAID- und LVM-Systemen stellt ZFS einen sehr interessanten und professionellen Lösungsansatz dar. ZFS ist ein 128-bit Dateisystem, kann theoretisch bis zu 16 Exabyte adressieren und vereint im Wesentlichen logische Partitions- und Volumenverwaltung sowie ein RAID-Subsystem. Zur Auswahl stehen: | ||
- | |||
- | * RAID 0 - Striping | ||
- | * RAID 1 - Mirroring | ||
- | * RAID Z-1 - 1x Parität (//RAID-5//) | ||
- | * RAID Z-2 - 2x Parität (//RAID-6//) | ||
- | * RAID Z-3 - 3x Parität | ||
- | |||
- | ZFS ist sehr leicht zu administrieren und somit ideal für sämtliche Einsatzgebiete. Nicht nur im Rechenzentrum erfreut sich ZFS großer Beliebtheit - auch im Heimbereich (//Eigenbau-NAS//) ist es einsetzbar. Interessant sind auch professionelle Funktionen, wie beispielsweise Deduplizierung, die dafür sorgt, dass mehrfach abgelegte Dateien nur einmal Platz in Anspruch nehmen. Differenzen zwischen den "nach Außen hin" gesicherten Dateien werden in Form von inkrementellen Snapshots gesichert. | ||
- | |||
- | |||
- | ======Idee====== | ||
- | Als plausibles Beispiel dient hier ein Eigenbau-NAS. Es soll Nutzdaten in einem RAID-5 Verbund sichern und mittels Samba dem Heimnetzwerk zur Verfügung stellen. | ||
- | |||
- | |||
- | ======Konfiguration====== | ||
- | Die Installation von Debian GNU/kFreeBSD ist relativ simple, wie vorherige Debian-Installationen. Dieser Vorgang ist nicht Bestandteil dieses Artikels. Nach der Installation und dem daraus resultierenden Reboot befindet man sich auf der ersten Konsole des brandneuen Debian-Systems mit FreeBSD-Unterbau. | ||
- | |||
- | Zuerst ist wichtig, dass alle Festplatten erkannt wurden (//hier 6 virtuelle Festplatten//) | ||
- | |||
- | <code> | ||
- | # dmesg | ||
- | ... | ||
- | da0 at mpt0 bus 0 scbus0 target 0 lun 0 | ||
- | da0: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device | ||
- | da0: 320.000MB/s transfers (160.000MHz DT, offset 127, 16bit) | ||
- | da0: Command Queueing enabled | ||
- | da0: 1048576MB (2147483648 512 byte sectors: 255H 63S/T 133674C) | ||
- | da1 at mpt0 bus 0 scbus0 target 1 lun 0 | ||
- | da1: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device | ||
- | da1: 320.000MB/s transfers (160.000MHz DT, offset 127, 16bit) | ||
- | da1: Command Queueing enabled | ||
- | da1: 1048576MB (2147483648 512 byte sectors: 255H 63S/T 133674C) | ||
- | da2 at mpt0 bus 0 scbus0 target 2 lun 0 | ||
- | da2: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device | ||
- | da2: 320.000MB/s transfers (160.000MHz DT, offset 127, 16bit) | ||
- | da2: Command Queueing enabled | ||
- | da2: 1048576MB (2147483648 512 byte sectors: 255H 63S/T 133674C) | ||
- | da3 at mpt0 bus 0 scbus0 target 3 lun 0 | ||
- | da3: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device | ||
- | da3: 320.000MB/s transfers (160.000MHz DT, offset 127, 16bit) | ||
- | da3: Command Queueing enabled | ||
- | da3: 1048576MB (2147483648 512 byte sectors: 255H 63S/T 133674C) | ||
- | da4 at mpt0 bus 0 scbus0 target 4 lun 0 | ||
- | da4: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device | ||
- | da4: 320.000MB/s transfers (160.000MHz DT, offset 127, 16bit) | ||
- | da4: Command Queueing enabled | ||
- | da4: 1048576MB (2147483648 512 byte sectors: 255H 63S/T 133674C) | ||
- | da5 at mpt0 bus 0 scbus0 target 5 lun 0 | ||
- | da5: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device | ||
- | da5: 320.000MB/s transfers (160.000MHz DT, offset 127, 16bit) | ||
- | da5: Command Queueing enabled | ||
- | da5: 1048576MB (2147483648 512 byte sectors: 255H 63S/T 133674C) | ||
- | </code> | ||
- | |||
- | Die Erstellung des Pools ist kinderleicht! Mit einem Befehl werden alle Festplatten zu neuen Pool namens "//pool0//" hinzugefügt: | ||
- | |||
- | # zpool create pool0 raidz /dev/da{0,1,2,3,4,5}</code> | ||
- | |||
- | Ein kleiner Blick in den Pool mit **zpool** zeigt, dass alle Festplatten eingebunden wurden: | ||
- | <code> | ||
- | # zpool status pool0 | ||
- | pool: pool0 | ||
- | state: ONLINE | ||
- | scrub: none requested | ||
- | config: | ||
- | |||
- | NAME STATE READ WRITE CKSUM | ||
- | pool0 ONLINE 0 0 0 | ||
- | raidz1 ONLINE 0 0 0 | ||
- | da0 ONLINE 0 0 0 | ||
- | da1 ONLINE 0 0 0 | ||
- | da2 ONLINE 0 0 0 | ||
- | da3 ONLINE 0 0 0 | ||
- | da4 ONLINE 0 0 0 | ||
- | da5 ONLINE 0 0 0 | ||
- | |||
- | errors: No known data errors | ||
- | </code> | ||
- | |||
- | Ein weiterer Blick auf die Pools mithilfe **zpool** zeigt den verfügbaren Speicherplatz: | ||
- | |||
- | <code> | ||
- | # zpool list | ||
- | NAME SIZE USED AVAIL CAP HEALTH ALTROOT | ||
- | pool0 6,00T 146K 6,00T 0% ONLINE - | ||
- | </code> | ||
- | |||
- | Der Mountpoint des Pools wird der Übersicht halber nun noch geändert, aktuell befindet er sich direkt auf Root-Ebene: | ||
- | |||
- | <code> | ||
- | # zfs get mountpoint pool0 | ||
- | NAME PROPERTY VALUE SOURCE | ||
- | pool0 mountpoint /pool0 default | ||
- | root@vm-debsqueeze:~# mkdir /mnt/storage | ||
- | root@vm-debsqueeze:~# zfs set mountpoint=/mnt/storage pool0 | ||
- | root@vm-debsqueeze:~# zfs get mountpoint pool0 | ||
- | NAME PROPERTY VALUE SOURCE | ||
- | pool0 mountpoint /mnt/storage local | ||
- | </code> | ||
- | |||
- | |||
- | =====Samba-Freigabe===== | ||
- | <code> | ||
- | Paketlisten werden gelesen... Fertig | ||
- | Abhängigkeitsbaum wird aufgebaut | ||
- | Statusinformationen werden eingelesen... Fertig | ||
- | Die folgenden zusätzlichen Pakete werden installiert: | ||
- | ... | ||
- | Möchten Sie fortfahren [J/n]? j | ||
- | ... | ||
- | |||
- | # mv /etc/samba/smb.conf /etc/samba/smb.conf.old | ||
- | # nano /etc/samba/smb.conf | ||
- | </code> | ||
- | |||
- | <code> | ||
- | [global] | ||
- | workgroup = TEST | ||
- | server string = Test-NAS | ||
- | obey pam restrictions = Yes | ||
- | passdb backend = tdbsam | ||
- | pam password change = Yes | ||
- | passwd program = /usr/bin/passwd %u | ||
- | passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . | ||
- | unix password sync = Yes | ||
- | syslog = 0 | ||
- | log file = /var/log/samba/log.%m | ||
- | max log size = 1000 | ||
- | dns proxy = No | ||
- | panic action = /usr/share/samba/panic-action %d | ||
- | |||
- | [homes] | ||
- | comment = Home Directories | ||
- | valid users = %S | ||
- | create mask = 0700 | ||
- | directory mask = 0700 | ||
- | browseable = No | ||
- | |||
- | [storage] | ||
- | comment = Storage | ||
- | path = /mnt/storage | ||
- | read only = No | ||
- | locking = No | ||
- | </code> | ||
- | |||
- | **Testparm** verrät jetzt noch, ob der Syntax der Datei korrekt ist: | ||
- | |||
- | <code> | ||
- | # testparm | ||
- | Load smb config files from /etc/samba/smb.conf | ||
- | Processing section "[homes]" | ||
- | Processing section "[storage]" | ||
- | Loaded services file OK. | ||
- | Server role: ROLE_STANDALONE | ||
- | Press enter to see a dump of your service definitions | ||
- | ... | ||
- | </code> | ||
- | |||
- | Der Übersichtlichkeit halber werden die Dateirechte für einen Benutzer gesetzt - er erhält auch ein Samba-Passwort, um auf die Netzwerkfreigabe zugreifen zu können. Anschließend wird der Samba-Daemon neugestartet, um die Änderungen zu übernehmen: | ||
- | |||
- | <code> | ||
- | # smbpasswd -a christian | ||
- | New SMB password: | ||
- | Retype new SMB password: | ||
- | # chown christian /mnt/storage | ||
- | # chgrp christian /mnt/storage | ||
- | # chown christian /mnt/storage/* -Rf | ||
- | # chgrp christian /mnt/storage/* -Rf | ||
- | # chmod 775 /mnt/storage/* -Rf | ||
- | # /etc/init.d/samba restart | ||
- | Stopping Samba daemons: nmbd smbd. | ||
- | Starting Samba daemons: nmbd smbd. | ||
- | </code> | ||
- | |||
- | |||
- | ======Rudimentäre Administration====== | ||
- | =====Pool löschen====== | ||
- | <code> | ||
- | # zpool destroy pool0 | ||
- | # zpool list | ||
- | no pools available | ||
- | </code> | ||
- | |||
- | =====Pool erstellen===== | ||
- | <code> | ||
- | # zpool destroy pool0 | ||
- | # zpool list | ||
- | no pools available | ||
- | </code> | ||
- | |||
- | |||
- | |||
- | =====Pool erstellen===== | ||
- | ====Striping (RAID-0)==== | ||
- | <code># zpool create pool0 /dev/da{0,1,2,3,4,5} | ||
- | # zpool status pool0 | ||
- | pool: pool0 | ||
- | state: ONLINE | ||
- | scrub: none requested | ||
- | config: | ||
- | |||
- | NAME STATE READ WRITE CKSUM | ||
- | pool0 ONLINE 0 0 0 | ||
- | da0 ONLINE 0 0 0 | ||
- | da1 ONLINE 0 0 0 | ||
- | da2 ONLINE 0 0 0 | ||
- | da3 ONLINE 0 0 0 | ||
- | da4 ONLINE 0 0 0 | ||
- | da5 ONLINE 0 0 0 | ||
- | |||
- | errors: No known data errors</code> | ||
- | |||
- | |||
- | |||
- | ====Mirroring (RAID-1)==== | ||
- | <code># zpool create pool0 mirror /dev/da0 /dev/da1 | ||
- | # zpool status pool0 | ||
- | pool: pool0 | ||
- | state: ONLINE | ||
- | scrub: none requested | ||
- | config: | ||
- | |||
- | NAME STATE READ WRITE CKSUM | ||
- | pool0 ONLINE 0 0 0 | ||
- | mirror ONLINE 0 0 0 | ||
- | da0 ONLINE 0 0 0 | ||
- | da1 ONLINE 0 0 0 | ||
- | |||
- | errors: No known data errors | ||
- | # zpool list | ||
- | NAME SIZE USED AVAIL CAP HEALTH ALTROOT | ||
- | pool0 1022G 79,5K 1022G 0% ONLINE -</code> | ||
- | |||
- | |||
- | |||
- | ====RAID-Z1 (~RAID-5)==== | ||
- | # zpool create pool0 raidz /dev/da{0,1,2,3,4,5} | ||
- | # zpool status pool0 | ||
- | pool: pool0 | ||
- | state: ONLINE | ||
- | scrub: none requested | ||
- | config: | ||
- | |||
- | NAME STATE READ WRITE CKSUM | ||
- | pool0 ONLINE 0 0 0 | ||
- | raidz1 ONLINE 0 0 0 | ||
- | da0 ONLINE 0 0 0 | ||
- | da1 ONLINE 0 0 0 | ||
- | da2 ONLINE 0 0 0 | ||
- | da3 ONLINE 0 0 0 | ||
- | da4 ONLINE 0 0 0 | ||
- | da5 ONLINE 0 0 0 | ||
- | |||
- | errors: No known data errors | ||
- | # zpool list | ||
- | NAME SIZE USED AVAIL CAP HEALTH ALTROOT | ||
- | pool0 6,00T 141K 6,00T 0% ONLINE -</code> | ||
- | |||
- | |||
- | |||
- | ====RAID-Z2 (~RAID-6)==== | ||
- | <code># zpool create pool0 raidz2 /dev/da{0,1,2,3,4,5} | ||
- | # zpool status pool0 | ||
- | pool: pool0 | ||
- | state: ONLINE | ||
- | scrub: none requested | ||
- | config: | ||
- | |||
- | NAME STATE READ WRITE CKSUM | ||
- | pool0 ONLINE 0 0 0 | ||
- | raidz2 ONLINE 0 0 0 | ||
- | da0 ONLINE 0 0 0 | ||
- | da1 ONLINE 0 0 0 | ||
- | da2 ONLINE 0 0 0 | ||
- | da3 ONLINE 0 0 0 | ||
- | da4 ONLINE 0 0 0 | ||
- | da5 ONLINE 0 0 0 | ||
- | |||
- | errors: No known data errors | ||
- | # zpool list | ||
- | NAME SIZE USED AVAIL CAP HEALTH ALTROOT | ||
- | pool0 6,00T 207K 6,00T 0% ONLINE -</code> | ||
- | |||
- | |||
- | |||
- | =====Spare hinzufügen====== | ||
- | Spares sind Festplatten, die dann verwendet werden, wenn eine der Festplatten aus dem Verbund ausfallen. Ein plausibles Beispiel wäre ein RAID-5-Verbund, bestehend aus 5 Festplatten, mit einer Festplatte als Spare, die im Fehlerfall einspringt. | ||
- | |||
- | <code> | ||
- | # zpool create pool0 raidz /dev/da{0,1,2,3,4} | ||
- | # zpool add pool0 spare /dev/da5 | ||
- | # zpool status pool0 | ||
- | pool: pool0 | ||
- | state: ONLINE | ||
- | scrub: none requested | ||
- | config: | ||
- | |||
- | NAME STATE READ WRITE CKSUM | ||
- | pool0 ONLINE 0 0 0 | ||
- | raidz1 ONLINE 0 0 0 | ||
- | da0 ONLINE 0 0 0 | ||
- | da1 ONLINE 0 0 0 | ||
- | da2 ONLINE 0 0 0 | ||
- | da3 ONLINE 0 0 0 | ||
- | da4 ONLINE 0 0 0 | ||
- | spares | ||
- | da5 AVAIL | ||
- | |||
- | errors: No known data errors | ||
- | # zpool list | ||
- | NAME SIZE USED AVAIL CAP HEALTH ALTROOT | ||
- | pool0 5,00T 150K 5,00T 0% ONLINE - | ||
- | </code> | ||
- | |||
- | |||
- | |||
- | ======Internet-Verweise====== | ||
- | * Projektseite von Debian GNU/kFreeBSD: http://wiki.debian.org/Debian_GNU/kFreeBSD | ||
- | * Wikipedia-Artikel über ZFS: http://de.wikipedia.org/wiki/ZFS_%28Dateisystem%29 | ||
- | * OpenSolaris-Artikel über ZFS: http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome |