Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

ZFS unter Ubuntu-12.04.3

In Experimente mit ZFS unter Ubuntu-12.04 habe ich meine Experimente mit ZFS beschrieben. Hier beschreibe ich nun, wie ich’s dann schließlich umgesetzt habe.

DEBs installieren

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo apt-get install make build-essential dpkg-dev
sudo apt-get install -f
sudo dpkg -i zfs-dkms_0.6.2-1dp01~precise1_amd64.deb \
  spl-dkms_0.6.2-1dp01~precise1_all.deb              \
  dkms_2.2.0.3-2dp01~precise1_all.deb
sudo dpkg -i zfsutils_0.6.2-1dp01~precise1_amd64.deb \
  libnvpair1_0.6.2-1dp01~precise1_amd64.deb          \
  libuutil1_0.6.2-1dp01~precise1_amd64.deb           \
  libzfs1_0.6.2-1dp01~precise1_amd64.deb             \
  libzpool1_0.6.2-1dp01~precise1_amd64.deb
sudo dpkg -i ubuntu-zfs_7dp01~precise1_amd64.deb     \
  spl_0.6.2-1dp01~precise1_amd64.deb
sudo dpkg -i mountall_2.48-1dp01~precise1_amd64.deb

Platten-IDs ermitteln

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ ls /dev/disk/by-id/scsi-SATA_WDC*|grep -v part
/dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0755994
/dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511
/dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0771577
/dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0777780

$ ls /dev/disk/by-id/scsi-SATA_WDC*|grep -v part|xargs --verbose -n1 udevadm info -q path -n
udevadm info -q path -n /dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0755994
/devices/pci0000:00/0000:00:11.0/host3/target3:0:0/3:0:0:0/block/sdd
udevadm info -q path -n /dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511
/devices/pci0000:00/0000:00:11.0/host2/target2:0:0/2:0:0:0/block/sdc
udevadm info -q path -n /dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0771577
/devices/pci0000:00/0000:00:11.0/host0/target0:0:0/0:0:0:0/block/sda
udevadm info -q path -n /dev/disk/by-id/scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0777780
/devices/pci0000:00/0000:00:11.0/host1/target1:0:0/1:0:0:0/block/sdb

Aus den Ausgaben kann man diese Zuordnung erkennen:

  • sda – scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0771577
  • sdb – scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0777780
  • sdc – scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511
  • sdd – scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0755994

Die Platten-IDs sollten am besten auch auf den jeweiligen Einbaurahmen geschrieben werden, damit es zu keinen Verwechslungen kommen kann.

Einbaurahmen mit Platten-IDs beschriften

Die Einbaurahmen werden mit den Platten-IDs beschriftet, damit beim Ausfall einer Platte schnell der richtige Rahmen gefunden werden kann. Beim mir ist “sda” ganz links, “sdd” ganz rechts. Die Platten-IDs sind auch auf den Platten aufgedruckt, und zwar bspw. wie folgt:

S/N: WCC1T0770511

Der Aufdruck sollte als Quercheck für die Beschriftung dienen!

Zpool anlegen

Zpool anlegen
1
2
3
4
5
6
$ sudo zpool create -o ashift=12 -f zfsdata raidz \
        scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0771577 \
        scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0777780 \
        scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511 \
        scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0755994
$ sudo zfs set compression=lz4 zfsdata

Nach dem Anlegen sollte der Status kontrolliert werden:

Zpool kontrollieren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo zpool status
  pool: zfsdata
 state: ONLINE
  scan: none requested
config:

  NAME                                           STATE     READ WRITE CKSUM
  zfsdata                                        ONLINE       0     0     0
    raidz1-0                                     ONLINE       0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0771577  ONLINE       0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0777780  ONLINE       0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511  ONLINE       0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0755994  ONLINE       0     0     0

errors: No known data errors

Wichtig: Alles “ONLINE”, keine Fehler und “raidz1-0” muß angezeigt werden!

Plattenausfall

Einen Plattenausfall erkennt man mit “zpool status”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo zpool status
  pool: zfsdata
 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: scrub repaired 0 in 0h0m with 0 errors on Sun Oct  6 12:00:10 2013
config:

  NAME                                           STATE     READ WRITE CKSUM
  zfsdata                                        DEGRADED     0     0     0
    raidz1-0                                     DEGRADED     0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0771577  ONLINE       0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0777780  ONLINE       0     0     0
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511  UNAVAIL      0     0     0  corrupted data
      scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0755994  ONLINE       0     0     0

errors: No known data errors

Beim Ausfall sind diese Aktionen nötig:

  • Zugehörigen Plattenrahmen rausziehen
  • Platte tauschen
  • Rahmen neu beschriften
  • Server herunterfahren
  • Plattenrahmen mit neuer Platte einbauen
  • Server starten
  • Neue Platte einbinden: sudo zpool replace zfsdata {old} {new}
    Konkretes Beispiel:
    $ sudo zpool replace zfsdata \
       scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0770511 \
       scsi-SATA_WDC_WD30EFRX-68_WD-WCC1T0774712
    
  • Sichtung: Die neue Platte wird korrekt eingebunden und funktioniert: sudo zpool status

Comments