Inhaltsverzeichnis

Debian GNU/kFreeBSD (kernel 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:

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)

# 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)

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:

# 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

Ein weiterer Blick auf die Pools mithilfe zpool zeigt den verfügbaren Speicherplatz:

# zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
pool0  6,00T   146K  6,00T     0%  ONLINE  -

Der Mountpoint des Pools wird der Übersicht halber nun noch geändert, aktuell befindet er sich direkt auf Root-Ebene:

# 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

Samba-Freigabe

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
[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

Testparm verrät jetzt noch, ob der Syntax der Datei korrekt ist:

# 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
...

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:

# 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.

Rudimentäre Administration

Pool löschen

# zpool destroy pool0
# zpool list
no pools available

Pool erstellen

# zpool destroy pool0
# zpool list
no pools available

Pool erstellen

Striping (RAID-0)

# 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

Mirroring (RAID-1)

# 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  -

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)

# 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  -

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.

# 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  -

Internet-Verweise