null

История одного сервера

Началось всё в сентябре 2009, когда у меня возникло желание установить FreeBSD на сервер SunFire V215. После изучения соответствующей документации было определено, что FreeBSD работает на SunFire V210, но вот про V215 ничего не обещалось. Попытка в лоб загрузить ядро FreeBSD-BETA4 с треском провалилась:

{1} ok boot net
Boot device: /pci@1e,600000/pci@0/pci@9/pci@0/network@4  File and args:
100 Mbps FDX Link up
Requesting Internet Address for 0:14:4f:a2:ef:2c
Requesting Internet Address for 0:14:4f:a2:ef:2c
Consoles: Open Firmware console

Booting with sun4u support.

FreeBSD/sparc64 bootstrap loader, Revision 1.0
(root@araz.cse.buffalo.edu, Sun Sep  6 10:07:26 UTC 2009)
bootpath="/pci@1e,600000/pci@0/pci@9/pci@0/network@4"
boot: ethernet address: 00:14:4f:a2:ef:2c
100 Mbps FDX Link up
Loading /boot/defaults/loader.conf
/boot/kernel/kernel data=0x9eb048+0x215da8 syms=[0x8+0xaca58+0x8+0x9e05e]
/
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel]...
jumping to kernel entry at 0xc0088000.

После изучения доступной информации было установлено, что OpenBSD поддерживается на данной платформе, что подтвердила пробная загрузка ядра. Ободрённый этим фактом я обратился в список рассылки freebsd-sparc64, где отозвался широко известный в узких кругах Marius Strobl, который, как оказалось, уже занимался вопросом портирования FreeBSD на данную железку. Он предложил взять FreeBSD-CURRENT и наложить на неё его патч, что впрочем не дало никакого эффекта. После чего был предложен чуть более исправленный патч, после применения которого появился заметный прогресс и ядро начало пытаться загрузиться:

OK boot -sv
jumping to kernel entry at 0xc0080000.
GDB: no debug ports present
KDB: debugger backends: ddb
KDB: current backend: ddb
Copyright (c) 1992-2009 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-CURRENT #1: Mon Sep 21 10:08:28 MSD 2009
    root@kot:/usr/obj/sparc64/usr/src/sys/sunrise
WARNING: WITNESS option enabled, expect reduced performance.
Preloaded elf kernel "/boot/kernel/kernel" at 0xc0c5c000.
real memory  = 2147483648 (2048 MB)
avail memory = 2075598848 (1979 MB)
machine: SUNW,Sun-Fire-V215
cpu0: Sun Microsystems UltraSparc-IIIi Processor (1504.00 MHz CPU)
  mask=0x34 maxtl=5 maxwin=7
initalizing intr_countp
cpu1: Sun Microsystems UltraSparc-IIIi Processor (1504.00 MHz CPU)
  mask=0x34 maxtl=5 maxwin=7
INTR: Adding CPU 1 as a target
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
wlan: <802.11 Link Layer>
firmware: 'isp_1000' version 1: 20142 bytes loaded at 0xc06750c0
ispfw: registered firmware <isp_1000>
firmware: 'isp_1040' version 1: 22944 bytes loaded at 0xc0679f6e
ispfw: registered firmware <isp_1040>
firmware: 'isp_1040_it' version 1: 32942 bytes loaded at 0xc067f90e
ispfw: registered firmware <isp_1040_it>
firmware: 'isp_1080' version 1: 31350 bytes loaded at 0xc06879bc
ispfw: registered firmware <isp_1080>
firmware: 'isp_1080_it' version 1: 40644 bytes loaded at 0xc068f432
ispfw: registered firmware <isp_1080_it>
firmware: 'isp_12160' version 1: 28050 bytes loaded at 0xc06992f6
ispfw: registered firmware <isp_12160>
firmware: 'isp_12160_it' version 1: 40604 bytes loaded at 0xc06a0088
ispfw: registered firmware <isp_12160_it>
firmware: 'isp_2100' version 1: 76770 bytes loaded at 0xc06a9f24
ispfw: registered firmware <isp_2100>
firmware: 'isp_2200' version 1: 77214 bytes loaded at 0xc06bcb06
ispfw: registered firmware <isp_2200>
firmware: 'isp_2300' version 1: 106640 bytes loaded at 0xc06cf8a4
ispfw: registered firmware <isp_2300>
firmware: 'isp_2322' version 1: 108856 bytes loaded at 0xc06e9934
ispfw: registered firmware <isp_2322>
firmware: 'isp_2400' version 1: 177416 bytes loaded at 0xc07074ec
ispfw: registered firmware <isp_2400>
firmware: 'isp_2400_multi' version 1: 193652 bytes loaded at 0xc073f1dc
ispfw: registered firmware <isp_2400_multi>
firmware: 'isp_2500' version 1: 140732 bytes loaded at 0xc077b4c8
ispfw: registered firmware <isp_2500>
firmware: 'isp_2500_multi' version 1: 164528 bytes loaded at 0xc07ac44c
ispfw: registered firmware <isp_2500_multi>
null: <null device, zero device>
random: <entropy source, Software, Yarrow>
nfslock: pseudo-device
kbd0 at kbdmux0
mem: <memory>
openfirm: <Open Firmware control device>
nexus0: <Open Firmware Nexus device>
pcib0: <Sun Host-PCIe bridge> mem 0x4000f600000-0x4000f6effff,0x4000f410000-0x4000f473fff irq 1983,1982 on nexus0
pcib0: Fire, module-revision 3, IGN 0x1e
Timecounter "pcib0" frequency 188000000 Hz quality -100
pcib0: DVMA map: 0xc0000000 to 0xffffffff
pcib0: bus range 2 to 13; PCI bus 2
pcib0: [FILTER]
pcib0: [FILTER]
pci0: <OFW PCI bus> on pcib0
pci0: domain=0, physical bus=2
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
        domain=0, bus=2, slot=0, func=0
        class=06-04-00, hdrtype=0x01, mfdev=0
        cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
        lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
        intpin=a, irq=255
        powerspec 1  supports D0 D3  current D0
        MSI supports 1 message, 64 bit
        map[10]: type Memory, range 32, base 0x100000, size 17, enabled
pcib1: <OFW PCI-PCI bridge> mem 0x100pcib0: DMC error: MMU error 0x4000000040
panic: pcib0: fatal DMC/PEC error
cpuid = 0
KDB: enter: panic
[thread pid 0 tid 100000 ]
Stopped at      kdb_enter+0x80: ta              %xcc, 1
db> 

Оказалось, что патчить надо не только ядро, но и loader. С патченым loader-ом система наконец-то загрузилась и была проинсталирована.

После чего обнаружился забавный баг, приводивший к некорректной работе части утилит, в том числе команды ls:

# /bin/ls -ld /
ls: /: Invalid argument
drwxr-xr-x  19 root  wheel  - 25 Sep 29 14:59 /

После лёгкого погружения в исходники ядра, выяснилось, что в sys/kern/vfs_acl.c вместо fuword32() почему-то использовался fuword(), который из-за различия в архитектурах sparc и i386/amd64 в расположении байт в памяти,  на последних не проявлялся и проявился только собственно на sparc.

Также я разглядел свой любимый баг с мусором при загрузке ядра, потом вляпался в спонтанные паники ядра и поломаный zfs list. После всех этих развлечений к 12 апреля система обрела достаточную стабильность и была запущена в боевом режиме. В коем состоянии и проработала до начала октября, когда мне внезапно захотелось обновить систему, и было тому некоторое количество причин. В их числе были, например, FreeBSD-SA-10:07.mbuf и желание обновить ZFS до версии 15.

И вот, в начале октября я радостно синхронно обновил исходники на всех подручных системах под управлением FreeBSD, дабы на всех системах иметь одинаковую ревизию всея, после чего обновил всю систему на некритичных системах типа ноутбука, домашнего компа и личной рабочей станции . Убедившись в отсутствии явных проблем в их работе одним прекрасным воскресным вечером приступил к обновлению моего любимого V215. Пересобрали, shutdown -r now, и... Сюрприз. Система не доступна. Пытаемся получить доступ к ALOM. Ага. ALOM тоже ушёл в себя и не вернулся. Ладно. Придётся нам встать пораньше и ехать на работу пораньше.

По приезду после power cycle ALOM очухался и дал доступ к консоли. Загружаем систему и...

OK boot -sv
jumping to kernel entry at 0xc0070000.
Copyright (c) 1992-2010 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-CURRENT #17: Mon Oct 11 19:04:15 MSD 2010
root@sunrise-new:/usr/obj/usr/src/sys/sunrise sparc64
Preloaded elf kernel "/boot/kernel/kernel" at 0xc0a76000.
Preloaded elf module "/boot/kernel/zfs.ko" at 0xc0a761a0.
Preloaded elf module "/boot/kernel/opensolaris.ko" at 0xc0a76270.
Preloaded /boot/zfs/zpool.cache "/boot/zfs/zpool.cache" at 0xc0a76348.
real memory = 2147483648 (2048 MB)
avail memory = 2080391168 (1984 MB)
machine: SUNW,Sun-Fire-V215
cpu0: Sun Microsystems UltraSparc-IIIi Processor (1504.00 MHz CPU)
mask=0x34 maxtl=5 maxwin=7
initalizing intr_countp
cpu1: Sun Microsystems UltraSparc-IIIi Processor (1504.00 MHz CPU)
mask=0x34 maxtl=5 maxwin=7
INTR: Adding CPU 1 as a target
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
Security policy loaded: TrustedBSD MAC/seeotheruids (mac_seeotheruids)
Security policy loaded: TrustedBSD MAC/portacl (mac_portacl)
random: <entropy source, Software, Yarrow>
nfslock: pseudo-device
openfirm: <Open Firmware control device>
kbd0 at kbdmux0
mem: <memory>
null: <null device, zero device>
nexus0: <Open Firmware Nexus device>
pcib0: <Sun Host-PCIe bridge> mem 0x4000f600000-0x4000f6effff,0x4000f410000-0x4000f473fff irq 1983,1982 on nexus0
pcib0: Fire, module-revision 3, IGN 0x1e
Timecounter "pcib0" frequency 188000000 Hz quality -100
pcib0: DVMA map: 0xc0000000 to 0xffffffff 131072 entries
pcib0: PROM IOTSB size: 0 (1024 entries)
pcib0: bus range 2 to 13; PCI bus 2
pci0: <OFW PCI bus> on pcib0
pci0: domain=0, physical bus=2
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
domain=0, bus=2, slot=0, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 1 supports D0 D3 current D0
MSI supports 1 message, 64 bit
map[10]: type Memory, range 32, base 0x100000, size 17, enabled
pcib1: <OFW PCIe-PCIe bridge> mem 0x100000-0x11ffff at device 0.0 on pci0
pcib1: domain 0
pcib1: secondary bus 3
pcib1: subordinate bus 13
pcib1: I/O decode 0x0-0x3fff
pcib1: memory decode 0x200000-0x55fffff
pcib1: no prefetched decode
pci1: <OFW PCI bus> on pcib1
pci1: domain=0, physical bus=3
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
domain=0, bus=3, slot=1, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 1 supports D0 D3 current D0
MSI supports 1 message, 64 bit
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
domain=0, bus=3, slot=2, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 1 supports D0 D3 current D0
MSI supports 1 message, 64 bit
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
domain=0, bus=3, slot=8, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 1 supports D0 D3 current D0
MSI supports 1 message, 64 bit
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
domain=0, bus=3, slot=9, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 1 supports D0 D3 current D0
MSI supports 1 message, 64 bit
found-> vendor=0x10b5, dev=0x8532, revid=0xbb
domain=0, bus=3, slot=10, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x03 (750 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 1 supports D0 D3 current D0
MSI supports 1 message, 64 bit
pcib2: <OFW PCIe-PCIe bridge> at device 1.0 on pci1
pcib2: domain 0
pcib2: secondary bus 4
pcib2: subordinate bus 5
pcib2: I/O decode 0x0-0x1fff
pcib2: memory decode 0x200000-0x3ffffff
pcib2: no prefetched decode
pci2: <OFW PCI bus> on pcib2
pci2: domain=0, physical bus=4
found-> vendor=0x10b9, dev=0x5249, revid=0x00
domain=0, bus=4, slot=0, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x2010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x23 (8750 ns), maxlat=0x00 (0 ns)
powerspec 2 supports D0 D3 current D0
pcib3: <OFW PCIe-PCIe bridge> at device 0.0 on pci2
pcib3: domain 0
pcib3: secondary bus 5
pcib3: subordinate bus 5
pcib3: I/O decode 0x1000-0x1fff
pcib3: memory decode 0x200000-0x3ffffff
pcib3: no prefetched decode
pcib3: Subtractively decoded bridge.
pci3: <OFW PCI bus> on pcib3
pci3: domain=0, physical bus=5
found-> vendor=0x10b9, dev=0x5237, revid=0x03
domain=0, bus=5, slot=28, func=0
class=0c-03-10, hdrtype=0x00, mfdev=1
cmdreg=0x0000, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0x40 (1920 ns), mingnt=0x00 (0 ns), maxlat=0x50 (20000 ns)
intpin=a, irq=255
powerspec 2 supports D0 D1 D2 D3 current D0
MSI supports 1 message
map[10]: type Memory, range 32, base 0x1000000, size 12, memory disabled
pcib3: requested memory range 0x1000000-0x1000fff: good
pcib2: requested memory range 0x1000000-0x1000fff: good
pcib1: requested memory range 0x1000000-0x1000fff: good
found-> vendor=0x10b9, dev=0x5237, revid=0x03
domain=0, bus=5, slot=28, func=1
class=0c-03-10, hdrtype=0x00, mfdev=1
cmdreg=0x0000, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0x40 (1920 ns), mingnt=0x00 (0 ns), maxlat=0x50 (20000 ns)
intpin=b, irq=255
powerspec 2 supports D0 D1 D2 D3 current D0
MSI supports 1 message
map[10]: type Memory, range 32, base 0x2000000, size 12, memory disabled
pcib3: requested memory range 0x2000000-0x2000fff: good
pcib2: requested memory range 0x2000000-0x2000fff: good
pcib1: requested memory range 0x2000000-0x2000fff: good
found-> vendor=0x10b9, dev=0x5239, revid=0x01
domain=0, bus=5, slot=28, func=3
class=0c-03-20, hdrtype=0x00, mfdev=1
cmdreg=0x0000, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0x80 (3840 ns), mingnt=0x10 (4000 ns), maxlat=0x20 (8000 ns)
intpin=d, irq=255
powerspec 2 supports D0 D3 current D0
MSI supports 1 message
map[10]: type Memory, range 32, base 0x200000, size 8, memory disabled
pcib3: requested memory range 0x200000-0x2000ff: good
pcib2: requested memory range 0x200000-0x2000ff: good
pcib1: requested memory range 0x200000-0x2000ff: good
found-> vendor=0x10b9, dev=0x1575, revid=0x00
domain=0, bus=5, slot=30, func=0
class=06-01-00, hdrtype=0x00, mfdev=0
cmdreg=0x000f, statreg=0x0200, cachelnsz=0 (dwords)
lattimer=0x08 (240 ns), mingnt=0x01 (250 ns), maxlat=0x18 (6000 ns)
found-> vendor=0x10b9, dev=0x5229, revid=0xc8
domain=0, bus=5, slot=31, func=0
class=01-01-ff, hdrtype=0x00, mfdev=0
cmdreg=0x0000, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0x40 (1920 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 2 supports D0 D3 current D0
MSI supports 1 message
map[10]: type I/O Port, range 32, base 0x1040, size 3, port disabled
pcib3: requested I/O range 0x1040-0x1047: in range
map[14]: type I/O Port, range 32, base 0x1080, size 2, enabled
pcib3: requested I/O range 0x1080-0x1083: in range
map[18]: type I/O Port, range 32, base 0x10c0, size 3, enabled
pcib3: requested I/O range 0x10c0-0x10c7: in range
map[1c]: type I/O Port, range 32, base 0x1100, size 2, enabled
pcib3: requested I/O range 0x1100-0x1103: in range
map[20]: type I/O Port, range 32, base 0x1000, size 4, enabled
pcib3: requested I/O range 0x1000-0x100f: in range
pcib4: <OFW PCIe-PCIe bridge> at device 2.0 on pci1
pcib4: domain 0
pcib4: secondary bus 6
pcib4: subordinate bus 6
pcib4: I/O decode 0x2000-0x1fff
pcib4: no prefetched decode
pci4: <OFW PCI bus> on pcib4
pci4: domain=0, physical bus=6
pcib5: <OFW PCIe-PCIe bridge> at device 8.0 on pci1
pcib5: domain 0
pcib5: secondary bus 7
pcib5: subordinate bus 7
pcib5: I/O decode 0x2000-0x1fff
pcib5: no prefetched decode
pci5: <OFW PCI bus> on pcib5
pci5: domain=0, physical bus=7
pcib6: <OFW PCIe-PCIe bridge> at device 9.0 on pci1
pcib6: domain 0
pcib6: secondary bus 8
pcib6: subordinate bus 10
pcib6: I/O decode 0x2000-0x2fff
pcib6: memory decode 0x4000000-0x4bfffff
pcib6: no prefetched decode
pci6: <OFW PCI bus> on pcib6
pci6: domain=0, physical bus=8
found-> vendor=0x1166, dev=0x0103, revid=0xb5
domain=0, bus=8, slot=0, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x23 (8750 ns), maxlat=0x00 (0 ns)
powerspec 2 supports D0 D3 current D0
pcib7: <OFW PCIe-PCIe bridge> at device 0.0 on pci6
pcib7: domain 0
pcib7: secondary bus 9
pcib7: subordinate bus 10
pcib7: I/O decode 0x2000-0x2fff
pcib7: memory decode 0x4000000-0x4bfffff
pcib7: no prefetched decode
pci7: <OFW PCI bus> on pcib7
pci7: domain=0, physical bus=9
found-> vendor=0x14e4, dev=0x1668, revid=0xa3
domain=0, bus=9, slot=4, func=0
class=02-00-00, hdrtype=0x00, mfdev=1
cmdreg=0x0002, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0xf8 (7440 ns), mingnt=0x40 (16000 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 2 supports D0 D3 current D0
MSI supports 8 messages, 64 bit
map[10]: type Memory, range 64, base 0x4200000, size 16, enabled
pcib7: requested memory range 0x4200000-0x420ffff: good
pcib6: requested memory range 0x4200000-0x420ffff: good
pcib1: requested memory range 0x4200000-0x420ffff: good
map[18]: type Memory, range 64, base 0x4010000, size 16, enabled
pcib7: requested memory range 0x4010000-0x401ffff: good
pcib6: requested memory range 0x4010000-0x401ffff: good
pcib1: requested memory range 0x4010000-0x401ffff: good
found-> vendor=0x14e4, dev=0x1668, revid=0xa3
domain=0, bus=9, slot=4, func=1
class=02-00-00, hdrtype=0x00, mfdev=1
cmdreg=0x0000, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0xf8 (7440 ns), mingnt=0x40 (16000 ns), maxlat=0x00 (0 ns)
intpin=b, irq=255
powerspec 2 supports D0 D3 current D0
MSI supports 8 messages, 64 bit
map[10]: type Memory, range 64, base 0x4400000, size 16, memory disabled
pcib7: requested memory range 0x4400000-0x440ffff: good
pcib6: requested memory range 0x4400000-0x440ffff: good
pcib1: requested memory range 0x4400000-0x440ffff: good
map[18]: type Memory, range 64, base 0x4030000, size 16, enabled
pcib7: requested memory range 0x4030000-0x403ffff: good
pcib6: requested memory range 0x4030000-0x403ffff: good
pcib1: requested memory range 0x4030000-0x403ffff: good
found-> vendor=0x1166, dev=0x0104, revid=0xb4
domain=0, bus=9, slot=8, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0230, cachelnsz=16 (dwords)
lattimer=0x40 (1920 ns), mingnt=0x23 (8750 ns), maxlat=0x00 (0 ns)
pcib8: <OFW PCIe-PCI bridge> at device 8.0 on pci7
pcib8: domain 0
pcib8: secondary bus 10
pcib8: subordinate bus 10
pcib8: I/O decode 0x2000-0x2fff
pcib8: memory decode 0x4600000-0x4bfffff
pcib8: no prefetched decode
pci8: <OFW PCI bus> on pcib8
pci8: domain=0, physical bus=10
found-> vendor=0x1000, dev=0x0030, revid=0x08
domain=0, bus=10, slot=1, func=0
class=01-00-00, hdrtype=0x00, mfdev=0
cmdreg=0x0002, statreg=0x0230, cachelnsz=16 (dwords)
lattimer=0x80 (3840 ns), mingnt=0x10 (4000 ns), maxlat=0x06 (1500 ns)
intpin=a, irq=255
powerspec 2 supports D0 D1 D2 D3 current D0
MSI supports 1 message, 64 bit
map[10]: type I/O Port, range 32, base 0x2000, size 8, port disabled
pcib8: requested I/O range 0x2000-0x20ff: in range
pcib7: requested I/O range 0x2000-0x20ff: in range
pcib6: requested I/O range 0x2000-0x20ff: in range
map[14]: type Memory, range 64, base 0x4600000, size 17, enabled
pcib8: requested memory range 0x4600000-0x461ffff: good
pcib7: requested memory range 0x4600000-0x461ffff: good
pcib6: requested memory range 0x4600000-0x461ffff: good
pcib1: requested memory range 0x4600000-0x461ffff: good
map[1c]: type Memory, range 64, base 0x4620000, size 17, enabled
pcib8: requested memory range 0x4620000-0x463ffff: good
pcib7: requested memory range 0x4620000-0x463ffff: good
pcib6: requested memory range 0x4620000-0x463ffff: good
pcib1: requested memory range 0x4620000-0x463ffff: good
pcib9: <OFW PCIe-PCIe bridge> at device 10.0 on pci1
pcib9: domain 0
pcib9: secondary bus 11
pcib9: subordinate bus 13
pcib9: I/O decode 0x3000-0x3fff
pcib9: memory decode 0x4c00000-0x55fffff
pcib9: no prefetched decode
pci9: <OFW PCI bus> on pcib9
pci9: domain=0, physical bus=11
found-> vendor=0x1166, dev=0x0103, revid=0xb5
domain=0, bus=11, slot=0, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0010, cachelnsz=16 (dwords)
lattimer=0x00 (0 ns), mingnt=0x23 (8750 ns), maxlat=0x00 (0 ns)
powerspec 2 supports D0 D3 current D0
pcib10: <OFW PCIe-PCIe bridge> at device 0.0 on pci9
pcib10: domain 0
pcib10: secondary bus 12
pcib10: subordinate bus 13
pcib10: I/O decode 0x3000-0x3fff
pcib10: memory decode 0x4c00000-0x55fffff
pcib10: no prefetched decode
pci10: <OFW PCI bus> on pcib10
pci10: domain=0, physical bus=12
found-> vendor=0x14e4, dev=0x1668, revid=0xa3
domain=0, bus=12, slot=4, func=0
class=02-00-00, hdrtype=0x00, mfdev=1
cmdreg=0x0002, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0xf8 (7440 ns), mingnt=0x40 (16000 ns), maxlat=0x00 (0 ns)
intpin=a, irq=255
powerspec 2 supports D0 D3 current D0
MSI supports 8 messages, 64 bit
map[10]: type Memory, range 64, base 0x4e00000, size 16, enabled
pcib10: requested memory range 0x4e00000-0x4e0ffff: good
pcib9: requested memory range 0x4e00000-0x4e0ffff: good
pcib1: requested memory range 0x4e00000-0x4e0ffff: good
map[18]: type Memory, range 64, base 0x4c10000, size 16, enabled
pcib10: requested memory range 0x4c10000-0x4c1ffff: good
pcib9: requested memory range 0x4c10000-0x4c1ffff: good
pcib1: requested memory range 0x4c10000-0x4c1ffff: good
found-> vendor=0x14e4, dev=0x1668, revid=0xa3
domain=0, bus=12, slot=4, func=1
class=02-00-00, hdrtype=0x00, mfdev=1
cmdreg=0x0000, statreg=0x02b0, cachelnsz=16 (dwords)
lattimer=0xf8 (7440 ns), mingnt=0x40 (16000 ns), maxlat=0x00 (0 ns)
intpin=b, irq=255
powerspec 2 supports D0 D3 current D0
MSI supports 8 messages, 64 bit
map[10]: type Memory, range 64, base 0x5000000, size 16, memory disabled
pcib10: requested memory range 0x5000000-0x500ffff: good
pcib9: requested memory range 0x5000000-0x500ffff: good
pcib1: requested memory range 0x5000000-0x500ffff: good
map[18]: type Memory, range 64, base 0x4c30000, size 16, enabled
pcib10: requested memory range 0x4c30000-0x4c3ffff: good
pcib9: requested memory range 0x4c30000-0x4c3ffff: good
pcib1: requested memory range 0x4c30000-0x4c3ffff: good
found-> vendor=0x1166, dev=0x0104, revid=0xb4
domain=0, bus=12, slot=8, func=0
class=06-04-00, hdrtype=0x01, mfdev=0
cmdreg=0x0007, statreg=0x0230, cachelnsz=16 (dwords)
lattimer=0x40 (1920 ns), mingnt=0x23 (8750 ns), maxlat=0x00 (0 ns)
pcib11: <OFW PCIe-PCI bridge> at device 8.0 on pci10
pcib11: domain 0
pcib11: secondary bus 13
pcib11: subordinate bus 13
pcib11: I/O decode 0x3000-0x3fff
pcib11: memory decode 0x5200000-0x55fffff
pcib11: no prefetched decode
pci11: <OFW PCI bus> on pcib11
pci11: domain=0, physical bus=13
found-> vendor=0x1000, dev=0x0050, revid=0x02
domain=0, bus=13, slot=1, func=0
class=01-00-00, hdrtype=0x00, mfdev=0
cmdreg=0x0016, statreg=0x0210, cachelnsz=16 (dwords)
lattimer=0xf8 (7440 ns), mingnt=0x40 (16000 ns), maxlat=0x0a (2500 ns)
intpin=a, irq=255
powerspec 2 supports D0 D1 D2 D3 current D0
MSI supports 1 message, 64 bit
map[10]: type I/O Port, range 32, base 0x3000, size 8, port disabled
pcib11: requested I/O range 0x3000-0x30ff: in range
pcib10: requested I/O range 0x3000-0x30ff: in range
pcib9: requested I/O range 0x3000-0x30ff: in range
map[14]: type Memory, range 64, base 0x5200000, size 14, enabled
pcib11: requested memory range 0x5200000-0x5203fff: good
pcib10: requested memory range 0x5200000-0x5203fff: good
pcib9: requested memory range 0x5200000-0x5203fff: good
pcib1: requested memory range 0x5200000-0x5203fff: good
map[1c]: type Memory, range 64, base 0x5210000, size 16, enabled
pcib11: requested memory range 0x5210000-0x521ffff: good
pcib10: requested memory range 0x5210000-0x521ffff: good
pcib9: requested memory range 0x5210000-0x521ffff: good
pcib1: requested memory range 0x5210000-0x521ffff: good
pcib12: <Sun Host-PCIe bridge> mem 0x4000ff00000-0x4000ffeffff,0x4000fc10000-0x4000fc73fff irq 2047,2046 on nexus0
pcib12: Fire, module-revision 3, IGN 0x1f
pcib12: DVMA map: 0xc0000000 to 0xffffffff 131072 entries
pcib12: PROM IOTSB size: 0 (1024 entries)
pcib12: bus range 2 to 255; PCI bus 2
pci12: <OFW PCI bus> on pcib12
pci12: domain=12, physical bus=2
ebus0: <JBus-EBus bridge> mem 0x4000fc64000-0x4000fc6401f on nexus0
nexus0: <memory-controller> mem 0x40000000000-0x40000000007 type memory-controller (no driver attached)
nexus0: <memory-controller> mem 0x40000800000-0x40000800007 type memory-controller (no driver attached)
ohci0: <AcerLabs M5237 (Aladdin-V) USB controller> mem 0x1000000-0x1000fff at device 28.0 on pci3
usbus0: <AcerLabs M5237 (Aladdin-V) USB controller> on ohci0
ohci1: <AcerLabs M5237 (Aladdin-V) USB controller> mem 0x2000000-0x2000fff at device 28.1 on pci3
usbus1: <AcerLabs M5237 (Aladdin-V) USB controller> on ohci1
ehci0: <ALi M5239 USB 2.0 controller> mem 0x200000-0x2000ff at device 28.3 on pci3
usbus2: EHCI version 1.0
usbus2: <ALi M5239 USB 2.0 controller> on ehci0
isab0: <PCI-ISA bridge> at device 30.0 on pci3
isa0: <ISA bus> on isab0
pci3: <mass storage, ATA> at device 31.0 (no driver attached)
bge0: <Broadcom BCM5715 A3, ASIC rev. 0x009003> mem 0x4200000-0x420ffff,0x4010000-0x401ffff at device 4.0 on pci7
bge0: attempting to allocate 1 MSI vectors (8 supported)
bge0: using IRQ 0 for MSI
bge0: CHIP ID 0x00009003; ASIC REV 0x09; CHIP REV 0x90; PCI-X
miibus0: <MII bus> on bge0
brgphy0: <BCM5714 10/100/1000baseTX PHY> PHY 1 on miibus0
brgphy0: OUI 0x000818, model 0x0034, rev. 0
brgphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
bge0: bpf attached
bge0: Ethernet address: 00:14:4f:a2:ef:2c
bge1: <Broadcom BCM5715 A3, ASIC rev. 0x009003> mem 0x4400000-0x440ffff,0x4030000-0x403ffff at device 4.1 on pci7
bge1: attempting to allocate 1 MSI vectors (8 supported)
bge1: using IRQ 1 for MSI
bge1: CHIP ID 0x00009003; ASIC REV 0x09; CHIP REV 0x90; PCI-X
miibus1: <MII bus> on bge1
brgphy1: <BCM5714 10/100/1000baseTX PHY> PHY 1 on miibus1
brgphy1: OUI 0x000818, model 0x0034, rev. 0
brgphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
bge1: bpf attached
bge1: Ethernet address: 00:14:4f:a2:ef:2d
mpt0: <LSILogic 1030 Ultra4 Adapter> port 0x2000-0x20ff mem 0x4600000-0x461ffff,0x4620000-0x463ffff at device 1.0 on pci8
mpt0: MPI Version=1.2.14.0
mpt0: chain depth limited to 48 (from 2550)
mpt0: Maximum Segment Count: 336, Maximum CAM Segment Count: 17
mpt0: MsgLength=15 IOCNumber = 0
mpt0: IOCFACTS: GlobalCredits=255 BlockSize=8 bytes Request Frame Size 96 bytes Max Chain Depth 48
mpt0: IOCFACTS: Num Ports 1, FWImageSize 40752, Flags=0
mpt0: No Handlers For Any Event Notify Frames. Event 0xa (ACK not required).
mpt0: No Handlers For Any Event Notify Frames. Event 0xa (ACK not required).
bge2: <Broadcom BCM5715 A3, ASIC rev. 0x009003> mem 0x4e00000-0x4e0ffff,0x4c10000-0x4c1ffff at device 4.0 on pci10
bge2: attempting to allocate 1 MSI vectors (8 supported)
bge2: using IRQ 2 for MSI
bge2: CHIP ID 0x00009003; ASIC REV 0x09; CHIP REV 0x90; PCI-X
miibus2: <MII bus> on bge2
brgphy2: <BCM5714 10/100/1000baseTX PHY> PHY 1 on miibus2
brgphy2: OUI 0x000818, model 0x0034, rev. 0
brgphy2: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
bge2: bpf attached
bge2: Ethernet address: 00:14:4f:a2:ef:2e
bge3: <Broadcom BCM5715 A3, ASIC rev. 0x009003> mem 0x5000000-0x500ffff,0x4c30000-0x4c3ffff at device 4.1 on pci10
bge3: attempting to allocate 1 MSI vectors (8 supported)
bge3: using IRQ 3 for MSI
bge3: CHIP ID 0x00009003; ASIC REV 0x09; CHIP REV 0x90; PCI-X
miibus3: <MII bus> on bge3
brgphy3: <BCM5714 10/100/1000baseTX PHY> PHY 1 on miibus3
brgphy3: OUI 0x000818, model 0x0034, rev. 0
brgphy3: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
bge3: bpf attached
bge3: Ethernet address: 00:14:4f:a2:ef:2f
mpt1: <LSILogic SAS/SATA Adapter> port 0x3000-0x30ff mem 0x5200000-0x5203fff,0x5210000-0x521ffff at device 1.0 on pci11
mpt1: MPI Version=1.5.12.0
mpt1: chain depth limited to 96 (from 2040)
mpt1: Maximum Segment Count: 864, Maximum CAM Segment Count: 17
mpt1: MsgLength=20 IOCNumber = 0
mpt1: IOCFACTS: GlobalCredits=511 BlockSize=8 bytes Request Frame Size 128 bytes Max Chain Depth 96
mpt1: IOCFACTS: Num Ports 1, FWImageSize 0, Flags=0
mpt1: No Handlers For Any Event Notify Frames. Event 0xa (ACK not required).
mpt1: No Handlers For Any Event Notify Frames. Event 0x12 (ACK not required).
mpt1: No Handlers For Any Event Notify Frames. Event 0x12 (ACK not required).
mpt1: No Handlers For Any Event Notify Frames. Event 0xf (ACK required).
mpt1: No Handlers For Any Event Notify Frames. Event 0xf (ACK required).
mpt1: Capabilities: ( RAID-0 RAID-1E RAID-1 )
mpt1: 0 Active Volumes (2 Max)
mpt1: 0 Hidden Drive Members (10 Max)
mpt1: No Handlers For Any Event Notify Frames. Event 0xa (ACK not required).
ebus0: <flashprom> addr 0-0x1fffff (no driver attached)
uart0: <16550 or compatible> addr 0x200000080-0x200000087 irq 1992 on ebus0
uart0: fast interrupt
uart0: console (9600,n,8,1)
uart1: <16550 or compatible> addr 0x200000040-0x200000047 irq 1993 on ebus0
uart1: fast interrupt
ebus0: <rmc-comm> addr 0x200000000-0x200000007 irq 1994 (no driver attached)
ebus0: <gpio> addr 0x2000000c0 (no driver attached)
epic0: <Sun Fire V215/V245 LEDs> addr 0x300000000-0x300000080 on ebus0
epic0: version 0x5a
ebus0: <power> addr 0x300000040-0x3000000c1 irq 1987 (no driver attached)
nexus0: <i2c> mem 0x4000fd30000-0x4000fd3003f irq 1985 type i2c (no driver attached)
syscons0: no video adapter found.
nexus0: <syscons> type unknown (no driver attached)
rtc0: <Real-Time Clock> at port 0x70-0x73 on isa0
pcib3: rtc0 requested I/O range 0x70-0x73: in range
rtc0: registered as a time-of-day clock (resolution 1000000us, adjustment 0.500000000s)
ct_to_ts([2010-10-11 16:54:11]) = 1286816051.000000000
rtc0: current time: 1286816051.000000000
ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present;
to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.
ZFS filesystem version 4
ZFS storage pool version 15
Timecounter "tick" frequency 1504000000 Hz quality 10
Timecounter "stick" frequency 20000000 Hz quality 10
Event timer "tick" frequency 1504000000 Hz quality 1000
Timecounters tick every 1.000 msec
vlan: initialized, using hash tables with chaining
lo0: bpf attached
pflog0: bpf attached
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 12Mbps Full Speed USB v1.0
ugen0.1: <AcerLabs> at usbus0
uhub0: <AcerLabs OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ugen1.1: <AcerLabs> at usbus1
uhub1: <AcerLabs OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
usbus2: 480Mbps High Speed USB v2.0
(noperiph:mpt0:0:-1:-1): reset bus
ugen2.1: <AcerLabs> at usbus2
uhub2: <AcerLabs EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus2
uhub0: 3 ports with 3 removable, self powered
uhub1: 3 ports with 3 removable, self powered
(probe73:mpt1:1:9:0): Error 22, Unretryable error
(probe64:mpt1:1:0:0): Error 22, Unretryable error
(probe65:mpt1:1:1:0): Error 22, Unretryable error
(probe66:mpt1:1:2:0): Error 22, Unretryable error
(probe67:mpt1:1:3:0): Error 22, Unretryable error
(probe68:mpt1:1:4:0): Error 22, Unretryable error
(probe69:mpt1:1:5:0): Error 22, Unretryable error
(probe70:mpt1:1:6:0): Error 22, Unretryable error
(probe71:mpt1:1:7:0): Error 22, Unretryable error
(probe72:mpt1:1:8:0): Error 22, Unretryable error
uhub2: 8 ports with 8 removable, self powered
pass0 at mpt1 bus 0 scbus1 target 0 lun 0
pass0: <FUJITSU MAY2073RCSUN72G 0501> Fixed Direct Access SCSI-4 device
pass0: Serial Number 000733S0D6PK
pass0: 300.000MB/s transfers
pass0: Command Queueing enabled
pass1 at mpt1 bus 0 scbus1 target 1 lun 0
pass1: <FUJITSU MAY2073RCSUN72G 0501> Fixed Direct Access SCSI-4 device
pass1: Serial Number 000733S0D73S
pass1: 300.000MB/s transfers
pass1: Command Queueing enabled
GEOM: new disk da0
GEOM: new disk da1
da0 at mpt1 bus 0 scbus1 target 0 lun 0
da0: <FUJITSU MAY2073RCSUN72G 0501> Fixed Direct Access SCSI-4 device
da0: Serial Number 000733S0D6PK
da0: 300.000MB/s transfers
da0: Command Queueing enabled
da0: 70007MB (143374738 512 byte sectors: 255H 63S/T 8924C)
da1 at mpt1 bus 0 scbus1 target 1 lun 0
da1: <FUJITSU MAY2073RCSUN72G 0501> Fixed Direct Access SCSI-4 device
da1: Serial Number 000733S0D73S
da1: 300.000MB/s transfers
da1: Command Queueing enabled
da1: 70007MB (143374738 512 byte sectors: 255H 63S/T 8924C)
SMP: AP CPU #1 Launched!

Т.е. всё как бы хорошо. Но. Следующей строчкой должно было быть:

Trying to mount root from zfs:sunrise/root

Но её нет. И чего делать дальше не очень понятно. Не, ну то есть sparc64/151404, это конечно очевидно, но хотелось бы загрузить систему хотя бы со старым ядром.

Стандартное решение вида:

unload
set module_path=/boot/kernel.old;/boot/modules
load kernel
load zfs

оказалось в моём случае недостаточным в виду того, что у меня корневая файловая система на ZFS, а после выше приведённых действий zpool.cache не оказывается среди загруженных модулей, а в результате ядро не может найти корневую FS. Попробовав тупой вариант:

load /boot/zfs/zpool.cache

я получил многозначительное сообщение:

don't know to load module '/boot/zfs/zpool.cache'

Что же делать, как же быть? Лихорадочный гугл проблемы ожидаемого ответа не дал. Подсказка на решение проблемы обнаружилась в выводе команды lsmod сразу после попадания в loader prompt:

0xdd1c18: /boot/zfs/zpool.cache (/boot/zfs/zpool.cache, 0x364)

Оказывается правильный способ загрузить старое ядро при использовании ZFS звучит так:

set module_path=/boot/kernel.old;/boot/modules
load kernel
load zfs
load -t /boot/zfs/zpool.cache /boot/zfs/zpool.cache

Через пару дней отозвался "тот самый" Marius, который сообщил, что данная проблема пофикшена в r213873. Я радостно побежал обновляться. Перезагружаемся, ядро с симпатичными чёрно-белыми сообщениями загружается, я пытаюсь попасть на систему через ssh... пытаюсь попасть через ssh... пытаюсь... Не выходит каменный цветок! ping-овать бесполезно, ибо входящие ping-и запрещены и давно, а вот почему в ARP таблице не появляется адрес системы это интересно. Ладно. Заходим с консоли и пытаемся с неё пигнануть близлежащие сервера. Тоже не пигнуются. Смотрим ifconfig -a и... обнаруживаем что все сетевые интерфейсы находятся в статусе DOWN. Грузим старое ядро, отписываемся, получаем какой-то патч, патч не помогает, опять откат. Потом традиционно дело спасает Marius, который сообщает, что в r214012 и эта проблема исправлена. Обновляемся, пересобираем, перезагружаем... Ура! Работает.

Казалось бы все проблемы выловлены и теперь можно обновить симметричную систему, но на чуть более старом SunFire V210. Пересобираем всё, перезагрузка. Вроде всё работает...

По дороге утром на работу получаем звонок от коллеги, оказывается всё, но не всё. Где-то потерялся DHCP сервер. Приезжаем, пытаемся ручками запустить, не запускается и ругается:

Unsupported device type 135 for "bge1.48"

Ага. Вот оказывается где собака порылась и что мы не успели проверить. На этой системе используются 801.1q интерфейсы, которые то isc-dhcpd внезапно и перестал понимать. После непродолжительного ковыряния в исходниках dhcpd в common/bpf.c находим корень зла:

        /*
         * Pull out the appropriate information.
         */
        switch (sa->sdl_type) {
                case IFT_ETHER:
                        hw->hlen = sa->sdl_alen + 1;
                        hw->hbuf[0] = HTYPE_ETHER;
                        memcpy(&hw->hbuf[1], LLADDR(sa), sa->sdl_alen);
                        break;
                case IFT_ISO88023:
                case IFT_ISO88024: /* "token ring" */
                case IFT_ISO88025:
                case IFT_ISO88026:
                        hw->hlen = sa->sdl_alen + 1;
                        hw->hbuf[0] = HTYPE_IEEE802;
                        memcpy(&hw->hbuf[1], LLADDR(sa), sa->sdl_alen);
                        break;
#ifdef IFT_FDDI
                case IFT_FDDI:
                        hw->hlen = sa->sdl_alen + 1;
                        hw->hbuf[0] = HTYPE_FDDI;
                        memcpy(&hw->hbuf[1], LLADDR(sa), sa->sdl_alen);
                        break;
#endif /* IFT_FDDI */
                default:
                        log_fatal("Unsupported device type %d for \"%s\"",
                                  sa->sdl_type, name);
        }

А согласно net/if_types.h числу 135, которое мы получили в сообщении об ошибке, а в шеснадцатиричной форме 0x87 соответствует IFT_L2VLAN, который тут не перечислен. Оказывается, что еще в r210937 для тэгированных интерфейсов поменяли тип интерфейса, а вот net/isc-dhcp41-server объяснить об этом забыли. Добавляем после case IFT_ETHER: еще одну строчку, но уже с IFT_L2VLAN, компилируем, запускаем. Работает. Что и требовалось доказать. В довершение регистрируем очередной PR и довольные идём наслаждаться жизнью.

А кто сказал что будет легко?

 

Коротко о себе:

Работаю в компании Tune-IT и тьютором кафедры Вычислительной техники в СПбГУИТМО.

Очень люблю команду cat, core solaris и IPv6.