ZFS auf einem aktuellen Debian-Testing System zum Laufen zu bekommen, ist aktuell nicht ganz leicht. Dieser Artikel soll zeigen, wie es dennoch geht.

Normaler Weise installiert man ZFS unter Linux ganz einfach über die vom ZFS on Linux bereitgestellten Pakete. Allerdings werden hier nicht einfach Binär-Pakete installiert, wie man es unter Debian gewohnt ist. Stattdessen werden die benötigten Kernel-Treiber passend zum System kompiliert. Leider schlägt dies mit einem aktuellen Kernel fehl, im Log steht dann eine wenig aussagekräftige Fehlermeldung:

/var/lib/dkms/spl/0.6.2/build/include/linux/mmcompat.h:198:16: error: unknown field ‘shrink’ specified in initializer
static struct shrinker s = { \
^
/var/lib/dkms/spl/0.6.2/build/module/spl/../../module/spl/spl-kmem.c:842:1: note: in expansion of macro ‘SPL_SHRINKER_DECLARE’
SPL_SHRINKER_DECLARE(spl_kmem_cache_shrinker,
^
/var/lib/dkms/spl/0.6.2/build/include/linux/mm_compat.h:198:16: warning: initialization from incompatible pointer type [enabled by default]
static struct shrinker s = { \
^
/var/lib/dkms/spl/0.6.2/build/module/spl/../../module/spl/spl-kmem.c:842:1: note: in expansion of macro ‘SPL_SHRINKER_DECLARE’
SPL_SHRINKER_DECLARE(spl_kmem_cache_shrinker,
^
/var/lib/dkms/spl/0.6.2/build/include/linux/mm_compat.h:198:16: warning: (near initialization for ‘spl_kmem_cache_shrinker.count_objects’) [enabled by default]
static struct shrinker s = { \
^
/var/lib/dkms/spl/0.6.2/build/module/spl/../../module/spl/spl-kmem.c:842:1: note: in expansion of macro ‘SPL_SHRINKER_DECLARE’
SPL_SHRINKER_DECLARE(spl_kmem_cache_shrinker,
^
make[6]: *** [/var/lib/dkms/spl/0.6.2/build/module/spl/../../module/spl/spl-kmem.o] Error 1

Auf Github gibt es ein paar Bug-Einträge dazu. Das Problem ist, dass es am Kernel 3.12 Änderungen gab, die sich nicht mit dem ZFS-on-Linux Code vertragen. Die aktuelle Entwickler-Version 0.6.3 wird dieses Problem beheben, aber sie ist derzeit noch nicht stabil (und hat auch noch ein paar Bugs, so dass ich es noch nicht für wichtige Daten einsetzen würde – Stand Februar 2014).

Um das Problem zu lösen, ist es am Einfachsten, auf den Kernel 3.11 zu wechseln. Dieser befindet sich allerdings nicht mehr in den Repositories eines aktuellen Debian-Testing. Daher muss die letzte verfügbare Version manuell installiert werden. Die Suche nach den passenden Paketen ist dank http://snapshot.debian.org/ schnell erledigt.

wget http://snapshot.debian.org/archive/debian/20131029T094523Z/pool/main/l/linux-tools/linux-kbuild-3.11_3.11-3_amd64.deb
wget http://snapshot.debian.org/archive/debian/20131205T100541Z/pool/main/l/linux/linux-image-3.11-2-amd64_3.11.10-1_amd64.deb
wget http://snapshot.debian.org/archive/debian/20131205T100541Z/pool/main/l/linux/linux-headers-3.11-2-amd64_3.11.10-1_amd64.deb
wget http://snapshot.debian.org/archive/debian/20131205T100541Z/pool/main/l/linux/linux-headers-3.11-2-common_3.11.10-1_amd64.deb

dpkg -i linux-kbuild-3.11_3.11-3_amd64.deb linux-image-3.11-2-amd64_3.11.10-1_amd64.deb \
  linux-headers-3.11-2-amd64_3.11.10-1_amd64.deb linux-headers-3.11-2-common_3.11.10-1_amd64.deb

Ist der Kernel 3.11 erfolgreich installiert, kann das System mit dem 3.12er Kernel neu gestartet und anschließend der 3.12er Kernel deinstalliert werden:

apt-get remove linux-image-3.11-2-amd64 linux-kbuild-3.12 linux-headers-3.12-1-amd64 linux-headers-3.12-1-common

 

Damit ist das System bereit für die eigentliche ZFS-Installation:

wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_2%7Ewheezy_all.deb
dpkg -i zfsonlinux_2~wheezy_all.deb
apt-get update
apt-get install debian-zfs

 

Wurde das ZFS-Paket bereits installiert, sollten die ZFS-Kernel-Module neu gebaut werden:

apt-get install --reinstall spl-dkms zfs-dkms