Problemy z ZOL (ZFS On Linux)
08 Apr 2015BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
pod ubuntu 14.04
Takim to komunikatem przywitał mnie ostatnio bo rebootcie mój ubunciak 14.04 na ZOLu. A dokładniej mniej więcej takim:
[57652.690951] BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
[57652.691040] IP: [<ffffffffa1a7aa2c>] zap_count_write+0x16c/0x3f0 [zfs]
[57652.691120] PGD 0
[57652.691144] Oops: 0000 [#1] PREEMPT SMP
[57652.691190] Modules linked in: zfs(PO) nvidia(PO) zunicode(PO) zavl(PO) zcommon(PO) znvpair(PO) spl(O) microcode button
[57652.691316] CPU: 1 PID: 1748 Comm: txg_sync Tainted: P O 3.16.5-gentoo #
[57652.691399] Hardware name: System manufacturer P5Q DELUXE/P5Q DELUXE, BIOS 0605 06/03/2008
[57652.691489] task: ffff88013a83a3c0 ti: ffff8800b27d0000 task.ti: ffff8800b27d0000
[57652.691570] RIP: 0010:[<ffffffffa1a7aa2c>] [<ffffffffa1a7aa2c>] zap_count_write+0x16c/0x3f0 [zfs]
[57652.691673] RSP: 0018:ffff8800b27d3c28 EFLAGS: 00010286
[57652.691730] RAX: 000000000000001d RBX: ffff8801382a4000 RCX: 0000000000000008
[57652.691804] RDX: 000000000000001d RSI: 000000000000001c RDI: ffff8801382a4000
[57652.691880] RBP: ffff8800b27d3c80 R08: 0000000000000000 R09: 0000000000000002
[57652.691941] R10: 0000000000000000 R11: ffff880138200000 R12: 000000000000001c
[57652.691941] R13: 000000000000001d R14: 0000000000000002 R15: 0000000000000000
[57652.691941] FS: 0000000000000000(0000) GS:ffff88013fc80000(0000) knlGS:0000000000000000
[57652.691941] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[57652.691941] CR2: 0000000000000018 CR3: 0000000001c10000 CR4: 00000000000007e0
[57652.691941] Stack:
[57652.691941] ffff88012c3c5300 0000000000000000 0000000000000202 000000000000001e
[57652.691941] ffffffffa1a22aaf ffffffffa1a19c09 ffff8800bb006000 0000000000000000
[57652.691941] ffff880066956540 ffff8800bb006000 0000000000000000 ffff8800b27d3cb0
[57652.691941] Call Trace:
[57652.691941] [<ffffffffa1a22aaf>] ? dmu_bonus_hold+0xcf/0x2d0 [zfs]
[57652.691941] [<ffffffffa1a19c09>] ? dbuf_rele_and_unlock+0x179/0x350 [zfs]
[57652.691941] [<ffffffffa1a7b094>] spa_feature_decr+0x44/0xb0 [zfs]
[57652.691941] [<ffffffffa1a46d4a>] dsl_scan_sync+0x7ba/0x9d0 [zfs]
[57652.691941] [<ffffffffa001fd34>] ? spl_kmem_cache_free+0xa4/0x190 [spl]
[57652.691941] [<ffffffffa1aa9f1d>] ? zio_wait+0x12d/0x1c0 [zfs]
[57652.691941] [<ffffffffa1a56b52>] spa_sync+0x4a2/0xae0 [zfs]
[57652.691941] [<ffffffff810831cd>] ? autoremove_wake_function+0xd/0x30
[57652.691941] [<ffffffff8109f0f3>] ? ktime_get_ts+0x43/0xe0
[57652.691941] [<ffffffffa1a65b72>] txg_delay+0x3d2/0x5c0 [zfs]
[57652.691941] [<ffffffffa1a65890>] ? txg_delay+0xf0/0x5c0 [zfs]
[57652.691941] [<ffffffffa0021ddc>] __thread_exit+0x8c/0xa0 [spl]
[57652.691941] [<ffffffffa0021d70>] ? __thread_exit+0x20/0xa0 [spl]
[57652.691941] [<ffffffff81065cf4>] kthread+0xc4/0xe0
[57652.691941] [<ffffffff81065c30>] ? kthread_create_on_node+0x170/0x170
[57652.691941] [<ffffffff817ddbec>] ret_from_fork+0x7c/0xb0
[57652.691941] [<ffffffff81065c30>] ? kthread_create_on_node+0x170/0x170
[57652.691941] Code: 48 89 d0 48 89 e5 41 57 4d 89 c7 41 56 45 89 ce 41 55 49 89 d5 41 54 49 89 f4 53 48 89 fb 48 83 ec 30 48 89 4d c0 b9
08 00 00 00 <41> 8b 70 18 44 89 4d c8 4c 8d 4d d0 49 8b 50 08 41 b8 01 00 00
[57652.691941] RIP [<ffffffffa1a7aa2c>] zap_count_write+0x16c/0x3f0 [zfs]
[57652.691941] RSP <ffff8800b27d3c28>
[57652.691941] CR2: 0000000000000018
[57652.691941] ------------[ cut here ]------------
[57652.691941] WARNING: CPU: 1 PID: 1748 at kernel/softirq.c:146 __local_bh_enable_ip+0x6a/0xa0()
[57652.691941] Modules linked in: zfs(PO) nvidia(PO) zunicode(PO) zavl(PO) zcommon(PO) znvpair(PO) spl(O) microcode button
[57652.691941] CPU: 1 PID: 1748 Comm: txg_sync Tainted: P O 3.16.5-gentoo #1
[57652.691941] Hardware name: System manufacturer P5Q DELUXE/P5Q DELUXE, BIOS 0605 06/03/2008
[57652.691941] 0000000000000009 ffff8800b27d36e0 ffffffff817d5f76 0000000000000000
[57652.691941] ffff8800b27d3718 ffffffff81045ba8 0000000000000201 ffff88008f42ccc0
[57652.691941] 0000000000000000 0000000000000000 000000000000003c ffff8800b27d3728
[57652.691941] Call Trace:
[57652.691941] [<ffffffff817d5f76>] dump_stack+0x4e/0x7a
[57652.691941] [<ffffffff81045ba8>] warn_slowpath_common+0x78/0xa0
[57652.691941] [<ffffffff81045c85>] warn_slowpath_null+0x15/0x20
[57652.691941] [<ffffffff8104adda>] __local_bh_enable_ip+0x6a/0xa0
[57652.691941] [<ffffffff817dd4d5>] _raw_spin_unlock_bh+0x15/0x20
[57652.691941] [<ffffffff814b09ce>] cn_netlink_send_mult+0x15e/0x1f0
[57652.691941] [<ffffffff814b0a76>] cn_netlink_send+0x16/0x20
[57652.691941] [<ffffffff81479a85>] uvesafb_exec+0x155/0x2e0
[57652.691941] [<ffffffff81479d45>] uvesafb_blank+0x135/0x190
[57652.691941] [<ffffffff8146fbe2>] fb_blank+0x52/0xc0
[57652.691941] [<ffffffff8146a7cb>] fbcon_blank+0x21b/0x320
[57652.691941] [<ffffffff8107236d>] ? get_parent_ip+0xd/0x50
[57652.691941] [<ffffffff81408207>] ? debug_smp_processor_id+0x17/0x20
[57652.691941] [<ffffffff81070eb4>] ? get_nohz_timer_target+0x14/0x110
[57652.691941] [<ffffffff8105083a>] ? internal_add_timer+0x2a/0x70
[57652.691941] [<ffffffff817dd263>] ? _raw_spin_unlock_irqrestore+0x13/0x30
[57652.691941] [<ffffffff81052dc1>] ? mod_timer+0x101/0x210
[57652.691941] [<ffffffff8144d0a3>] do_unblank_screen+0xa3/0x1c0
[57652.691941] [<ffffffff8144d1cb>] unblank_screen+0xb/0x10
[57652.691941] [<ffffffff813ff9d9>] bust_spinlocks+0x19/0x40
[57652.691941] [<ffffffff810063bf>] oops_end+0x2f/0xc0
[57652.691941] [<ffffffff817d0e0f>] no_context+0x297/0x2a4
[57652.691941] [<ffffffff817d0e84>] __bad_area_nosemaphore+0x68/0x1bf
[57652.691941] [<ffffffff817d0fe9>] bad_area_nosemaphore+0xe/0x10
[57652.691941] [<ffffffff8103a306>] __do_page_fault+0x86/0x490
[57652.691941] [<ffffffff817dd263>] ? _raw_spin_unlock_irqrestore+0x13/0x30
[57652.691941] [<ffffffff8107236d>] ? get_parent_ip+0xd/0x50
[57652.691941] [<ffffffff810723fd>] ? preempt_count_add+0x4d/0xa0
[57652.691941] [<ffffffff817dd7a8>] ? _raw_spin_lock_irqsave+0x18/0x50
[57652.691941] [<ffffffff817dd263>] ? _raw_spin_unlock_irqrestore+0x13/0x30
[57652.691941] [<ffffffff8103a73c>] do_page_fault+0xc/0x10
[57652.691941] [<ffffffff817df6e2>] page_fault+0x22/0x30
[57652.691941] [<ffffffffa1a7aa2c>] ? zap_count_write+0x16c/0x3f0 [zfs]
[57652.691941] [<ffffffffa1a22aaf>] ? dmu_bonus_hold+0xcf/0x2d0 [zfs]
[57652.691941] [<ffffffffa1a19c09>] ? dbuf_rele_and_unlock+0x179/0x350 [zfs]
[57652.691941] [<ffffffffa1a7b094>] spa_feature_decr+0x44/0xb0 [zfs]
[57652.691941] [<ffffffffa1a46d4a>] dsl_scan_sync+0x7ba/0x9d0 [zfs]
[57652.691941] [<ffffffffa001fd34>] ? spl_kmem_cache_free+0xa4/0x190 [spl]
[57652.691941] [<ffffffffa1aa9f1d>] ? zio_wait+0x12d/0x1c0 [zfs]
[57652.691941] [<ffffffffa1a56b52>] spa_sync+0x4a2/0xae0 [zfs]
[57652.691941] [<ffffffff810831cd>] ? autoremove_wake_function+0xd/0x30
[57652.691941] [<ffffffff8109f0f3>] ? ktime_get_ts+0x43/0xe0
[57652.691941] [<ffffffffa1a65b72>] txg_delay+0x3d2/0x5c0 [zfs]
[57652.691941] [<ffffffffa1a65890>] ? txg_delay+0xf0/0x5c0 [zfs]
[57652.691941] [<ffffffffa0021ddc>] __thread_exit+0x8c/0xa0 [spl]
[57652.691941] [<ffffffffa0021d70>] ? __thread_exit+0x20/0xa0 [spl]
[57652.691941] [<ffffffff81065cf4>] kthread+0xc4/0xe0
[57652.691941] [<ffffffff81065c30>] ? kthread_create_on_node+0x170/0x170
[57652.691941] [<ffffffff817ddbec>] ret_from_fork+0x7c/0xb0
[57652.691941] [<ffffffff81065c30>] ? kthread_create_on_node+0x170/0x170
[57652.691941] ---[ end trace 80ac2dc931b9aee5 ]---
[57652.836655] ---[ end trace 80ac2dc931b9aee6 ]---
Tylko że w moim przypadku to nie gentoo i inna wersja jajka. Niestety nie udało mi się określić co spowodowało problem. Oczywiście zgłoszono już podobne problemy ale zazwyczaj pojawiały się po jakiś operacjach na poolach, w moim przypadku nie robiłem żadnych zmian, a sama historia zfs’a też nic nie pokazuje… dziwne.
Operacja naprawcza będzie opisana poniżej. Pomaga ona również na problem:
Failed to load ZFS module stack.
który pojawił się przy próbach naprawy wcześniejszego BUGa. Równocześnie jest to również sposób na rozwiązanie, równie popularnego problemu: Error! Could not locate dkms.conf file
Powiązane problemy:
- #1155: Failed to load ZFS module stack.
- #3019: NULL pointer while trying to destroy a cloned filesystem.
- #1518: zfs receive -> unable to handle kernel NULL pointer dereference.
- Failed to load ZFS module stack
Environment Info
Kernel:
Linux mtiPC 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
SPL i ZFS:
spl, 0.6.3, 3.13.0-48-generic, x86_64: installed
zfs, 0.6.3, 3.13.0-48-generic, x86_64: installed
Poole: Poola złożona z dwóch dysków SSD:
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 109G 109G 31K /rpool
rpool/ROOT 109G 109G 31K /rpool/ROOT
rpool/ROOT/ubuntu-1 109G 109G 106G /
$ zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 222G 109G 113G 49% 1.00x ONLINE -
$ zpool status rpool
pool: rpool
state: ONLINE
scan: scrub repaired 0 in 0h0m with 0 errors on Sun Aug 24 15:07:19 2014
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
ata-INTEL_SSDSC2CT120A3_CVMP231503KM120BGN-part2 ONLINE 0 0 0
ata-INTEL_SSDSC2BW120A4_CVDA442001XQ1207GN-part1 ONLINE 0 0 0
errors: No known data errors
Reapair HOW-TO
Live-USB
Potrzebne będzie jakieś live distro, najlepiej na USB - polecam je wykonać przy pomocy unetbooin - w moim przypadku ubuntu gnome 14.04.2 - najbliższe mojemu systemowi. I z niego startujemy system.
Przygotowanie live ubuntu do pracy
$ sudo -i
# add-apt-repository --yes ppa:zfs-native/stable
# apt-get update
# apt-get install -y debootstrap spl-dkms zfs-dkms ubuntu-zfs
Włączenie modułu ZFS:
# modprobe zfs
# dmesg | grep ZFS
[ 1.925403] ZFS: Loaded module v0.6.3-5~trusty, ZFS pool version 5000, ZFS filesystem version 5
Output może być trochę inny :)
Podmontowanie systemu bazowego i chroot na niego
Teraz można zaimportować poole:
# zpool import -d /dev/disk/by-id -R /mnt rpool
Powinno automatycznie zaciągnąć rpool, jeśli nie działa można spróbować:
# zpool import -R /mnt rpool
U mnie osobno jest partycja z GRUBem, więc mount boot/grub może się przydać (np. do sprawdzenia jakie jajka mamy) do utworzenia initramfs.
# mkdir -p /mnt/boot/grub
# mount /dev/disk/by-id/ata-INTEL_SSDSC2CT120A3_CVMP231503KM120BGN-part1 /mnt/boot/grub
[INFO] W tym momencie można wydać polecenie
# debootstrap trusty /mnt
by zainstalować świeży podstawowy ubuntu. Kilka mountów i chroot na system bazowy.
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# chroot /mnt /bin/bash --login
W tym momencie jesteśmy praktycznie na naszym systemie bazowym, można bez problemu instalować paczki, podnosić kernel, ładować moduły, edytować pliczki, itp. itd.
Jednak żeby rozwiązać problem należy pobawić się z kernelami i załadowanymi dla nich modułami.
# dkms status
spl, 0.6.3, 3.13.0-48-generic, x86_64: installed
zfs, 0.6.3, 3.13.0-48-generic, x86_64: installed
dkms wyświetla moduły zainstalowane dla konkretnych kerneli, w moim przypadku dla 3.13.0-48-generic ale taki output to “zdrowy” output. Normalnie dkms wyświetla jakieś problemy w nawiasie przy module. Warto przebudować moduły spl i zfs. Tutaj warto zwrócić uwagę że domyślnie chroot dalej myśli że ma kernel w nietypowej wersji, której nie ma w systemie bazowym - jest to wersja kernela z dystrybucji live. Więc przy instalacji modułów warto podawać dokładną wersję dla której moduł budujemy i instalujemy - w przeciwnym przypadku pobrana zostanie wartość dla zmiennej $KERNELRELEASE z uname -r
czyli wersja kernela dla dystrybucji live.
# dkms remove -m zfs -v 0.6.3 --all
# dkms remove -m spl -v 0.6.3 --all
# dkms add -m spl -v 0.6.3 -k 3.13.0-48-generic
# dkms add -m zfs -v 0.6.3 -k 3.13.0-48-generic
# dkms install -m spl -v 0.6.3 -k 3.13.0-48-generic
# dkms install -m zfs -v 0.6.3 -k 3.13.0-48-generic
Teoretycznie można przed dkms install
zrobić jeszcze dkms build
dla każdego z modułów ale nie jest to wymagane, install i tak zbuduje moduł.
Teraz należy powiadomić wszystkich o zmianie w naszym jajku.
# update-initramfs -c -k 3.13.0-48-generic
Warto również zweryfikować czy moduł znajduje się w bootowanym obrazie, żeby nie zaskoczył nas problem z Failed to load ZFS module stack.:
# gzip -dc /boot/initrd.img-3.13.0-48-generic | cpio -it | grep zfs.ko
Jeśli go nie ma to znaczy że coś nie tak poszło przy instalacji modułu. (Czytamy logi?) [INFO] Może się zdarzyć że to nie pomoże, warto wtedy przeinstalować nagłówki jajka:
# apt-get install --reinstall linux-headers-3.13.0-48 linux-headers-3.13.0-48-generic
Warto odświeżyć gruba
# update-grub
Kroki końcowe:
Wychodzimy z chroota, odmontowanie i export pooli - jeśli export się nie powiedzie, system nie wystartuje.
# exit
# umount /mnt/boot/grub
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# zfs umount -a
# zpool export rpool
Koniec - reboot. Dziwne, u mnie działa
Source:
- #1155: Failed to load ZFS module stack.
- #3019: NULL pointer while trying to destroy a cloned filesystem.
- #1518: zfs receive -> unable to handle kernel NULL pointer dereference.
- Failed to load ZFS module stack
- Problems installing ubuntu 11.04 with native ZFS root -msg#00148
- HOWTO install Ubuntu to a Native ZFS Root Filesystem