Other Adaptec JBOD Shows Up As /dev/pass?

I used to run a hardware raid, which I no longer use. I want to setup ZFS and am keeping this Adaptec 5405 card in place since my motherboard does not have enough sata ports available.

When I try to create my zfs pool, it fails as all drives on the Adaptec card show up as /dev/pass devices.

ls -l /dev/

Code:
crw-r-----  1 root  operator  0x2a May  1 05:55 aac0
crw-r--r--  1 root  wheel     0x26 May  1 05:55 acpi
crw-r-----  1 root  operator  0x71 May  1 05:55 ada0
crw-r-----  1 root  operator  0x78 May  1 05:55 ada1
crw-r-----  1 root  operator  0x7a May  1 05:55 ada1p1
crw-r-----  1 root  operator  0x7b May  1 00:55 ada1p2
crw-r-----  1 root  operator  0x7c May  1 00:55 ada1p3
lrwxr-xr-x  1 root  wheel        4 May  1 05:55 afa0 -> aac0
crw-rw-r--  1 root  operator  0x28 May  1 05:55 apm
crw-rw----  1 root  operator  0x27 May  1 05:55 apmctl
crw-------  1 root  wheel     0x40 May  1 05:55 atkbd0
crw-------  1 root  kmem      0x17 May  1 05:55 audit
crw-------  1 root  wheel     0x16 May  1 05:55 auditpipe
crw-------  1 root  wheel      0xc May  1 05:55 bpf
lrwxr-xr-x  1 root  wheel        3 May  1 05:55 bpf0 -> bpf
crw-------  1 root  wheel      0x8 May  1 05:56 console
crw-------  1 root  wheel      0xe May  1 05:55 consolectl
crw-rw-rw-  1 root  wheel      0xb May  1 05:55 ctty
crw-rw----  1 uucp  dialer    0x3d May  1 05:55 cuau0
crw-rw----  1 uucp  dialer    0x3e May  1 05:55 cuau0.init
crw-rw----  1 uucp  dialer    0x3f May  1 05:55 cuau0.lock
crw-------  1 root  wheel      0x9 May  1 05:55 devctl
crw-------  1 root  wheel      0xa May  1 05:55 devctl2
cr--r--r--  1 root  wheel     0x5c May  1 05:55 devstat
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 diskid
lrwxr-xr-x  1 root  wheel       11 May  1 00:55 dumpdev -> /dev/ada1p3
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 fd
crw-------  1 root  wheel     0x10 May  1 05:55 fido
crw-rw-rw-  1 root  wheel     0x19 May  1 05:55 full
crw-r-----  1 root  operator   0x4 May  1 05:55 geom.ctl
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 gptid
crw-------  1 root  wheel     0x29 May  1 05:55 hpet0
lrwxr-xr-x  1 root  wheel        4 May  1 05:55 hpn0 -> aac0
crw-------  1 root  wheel     0x23 May  1 05:55 io
lrwxr-xr-x  1 root  wheel        6 May  1 05:55 kbd0 -> atkbd0
lrwxr-xr-x  1 root  wheel        7 May  1 05:55 kbd1 -> kbdmux0
lrwxr-xr-x  1 root  wheel        5 May  1 05:55 kbd2 -> ukbd0
crw-------  1 root  wheel     0x11 May  1 05:55 kbdmux0
crw-------  1 root  wheel     0x24 May  1 05:55 klog
crw-r-----  1 root  kmem      0x14 May  1 05:55 kmem
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 led
lrwxr-xr-x  1 root  wheel       12 May  1 05:55 log -> /var/run/log
crw-------  1 root  wheel     0x42 May  1 05:55 mdctl
crw-r-----  1 root  kmem      0x13 May  1 05:55 mem
crw-rw-rw-  1 root  wheel     0x25 May  1 05:55 midistat
crw-rw-rw-  1 root  wheel     0x4a May  1 05:55 mixer0
crw-rw-rw-  1 root  wheel     0x4b May  1 05:55 mixer1
crw-rw-rw-  1 root  wheel     0x4c May  1 05:55 mixer2
crw-rw-rw-  1 root  wheel     0x4d May  1 05:55 mixer3
crw-rw-rw-  1 root  wheel     0x4e May  1 05:55 mixer4
crw-rw-rw-  1 root  wheel     0x4f May  1 05:55 mixer5
crw-rw-rw-  1 root  wheel     0x50 May  1 05:55 mixer6
crw-rw-rw-  1 root  wheel     0x51 May  1 05:55 mixer7
crw-------  1 root  wheel     0x18 May  1 05:55 netmap
crw-------  1 root  kmem      0x15 May  1 05:55 nfslock
crw-rw-rw-  1 root  wheel     0x1a May  1 06:00 null
crw-------  1 root  operator  0x5d May  1 05:55 pass0
crw-------  1 root  operator  0x5e May  1 05:55 pass1
crw-------  1 root  operator  0x5f May  1 05:55 pass2
crw-------  1 root  operator  0x60 May  1 05:55 pass3
crw-------  1 root  operator  0x61 May  1 05:55 pass4
crw-------  1 root  operator  0x62 May  1 05:55 pass5
crw-------  1 root  operator  0x63 May  1 05:55 pass6
crw-r--r--  1 root  wheel     0x22 May  1 05:55 pci
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 pts
crw-r--r--  1 root  wheel      0x6 May  1 05:55 random
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 reroot
crw-------  1 root  operator  0x64 May  1 05:55 ses0
crw-r--r--  1 root  wheel      0x5 May  1 05:55 sndstat
lrwxr-xr-x  1 root  wheel        4 May  1 05:55 stderr -> fd/2
lrwxr-xr-x  1 root  wheel        4 May  1 05:55 stdin -> fd/0
lrwxr-xr-x  1 root  wheel        4 May  1 05:55 stdout -> fd/1
crw-------  1 root  wheel      0xf May  1 05:55 sysmouse
crw-------  1 root  wheel     0x3a May  1 05:55 ttyu0
crw-------  1 root  wheel     0x3b May  1 05:55 ttyu0.init
crw-------  1 root  wheel     0x3c May  1 05:55 ttyu0.lock
crw-------  1 root  wheel     0x65 May  1 05:55 ttyv0
crw-------  1 root  wheel     0x66 May  1 05:55 ttyv1
crw-------  1 root  wheel     0x67 May  1 05:55 ttyv2
crw-------  1 root  wheel     0x68 May  1 05:55 ttyv3
crw-------  1 root  wheel     0x69 May  1 05:55 ttyv4
crw-------  1 root  wheel     0x6a May  1 05:55 ttyv5
crw-------  1 root  wheel     0x6b May  1 05:55 ttyv6
crw-------  1 root  wheel     0x6c May  1 05:55 ttyv7
crw-------  1 root  wheel     0x6d May  1 05:55 ttyv8
crw-------  1 root  wheel     0x6e May  1 05:55 ttyv9
crw-------  1 root  wheel     0x6f May  1 05:55 ttyva
crw-------  1 root  wheel     0x70 May  1 05:55 ttyvb
crw-------  1 root  wheel     0x45 May  1 05:55 ufssuspend
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen0.1 -> usb/0.1.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen0.2 -> usb/0.2.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen0.3 -> usb/0.3.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen0.4 -> usb/0.4.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen1.1 -> usb/1.1.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen2.1 -> usb/2.1.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen3.1 -> usb/3.1.0
lrwxr-xr-x  1 root  wheel        9 May  1 05:55 ugen3.2 -> usb/3.2.0
crw-r--r--  1 root  operator  0x8f May  1 05:55 uhid0
crw-------  1 root  wheel     0x8d May  1 05:55 ukbd0
lrwxr-xr-x  1 root  wheel        6 May  1 05:55 urandom -> random
dr-xr-xr-x  2 root  wheel      512 May  1 05:55 usb
crw-r--r--  1 root  operator  0x48 May  1 05:55 usbctl
crw-------  1 root  operator  0x49 May  1 05:55 xpt0
crw-rw-rw-  1 root  wheel     0x1b May  1 05:55 zero
crw-rw-rw-  1 root  operator  0x76 May  1 00:55 zfs


dmesg | grep aac

Code:
aac0: <Adaptec RAID 5405> mem 0xf7200000-0xf73fffff irq 16 at device 0.0 on pci1
aac0: Enabling 64-bit address support
aac0: Enable Raw I/O
aac0: Enable 64-bit array
aac0: New comm. interface enabled
aac0: Adaptec 5405, aac driver 2.1.9-1
aacp0 on aac0
aacp1 on aac0
aacp2 on aac0
pass0 at aacp0 bus 0 scbus0 target 0 lun 0
pass1 at aacp0 bus 0 scbus0 target 1 lun 0
pass2 at aacp0 bus 0 scbus0 target 2 lun 0
pass3 at aacp0 bus 0 scbus0 target 3 lun 0
module_register: cannot register aac/aacp from kernel; already loaded from aac.ko
Module aac/aacp failed to register: 17
module_register: cannot register aac/aacd from kernel; already loaded from aac.ko
Module aac/aacd failed to register: 17
module_register: cannot register pci/aac from kernel; already loaded from aac.ko
Module pci/aac failed to register: 17
module_register: cannot register pci/aacch from kernel; already loaded from aac.ko
Module pci/aacch failed to register: 17
aac0: <Adaptec RAID 5405> mem 0xf7200000-0xf73fffff irq 16 at device 0.0 on pci1
aac0: Enabling 64-bit address support
aac0: Enable Raw I/O
aac0: Enable 64-bit array
aac0: New comm. interface enabled
aac0: Adaptec 5405, aac driver 2.1.9-1
aacp0 on aac0
aacp1 on aac0
aacp2 on aac0
pass0 at aacp0 bus 0 scbus0 target 0 lun 0
pass1 at aacp0 bus 0 scbus0 target 1 lun 0
pass2 at aacp0 bus 0 scbus0 target 2 lun 0
pass3 at aacp0 bus 0 scbus0 target 3 lun 0

dmesg | grep pass

Code:
pass0 at aacp0 bus 0 scbus0 target 0 lun 0
pass0: <WDC WD1002FAEX-0 05.0> Fixed Uninstalled SPC-3 SCSI device
pass0: Serial Number WD-WCATR0375554
pass0: 3.300MB/s transfers
pass1 at aacp0 bus 0 scbus0 target 1 lun 0
pass1: <WDC WD10EACS-00D 01.0> Fixed Uninstalled SPC-3 SCSI device
pass1: Serial Number WD-WCAU41825095
pass1: 3.300MB/s transfers
pass2 at aacp0 bus 0 scbus0 target 2 lun 0
pass2: < ST3500630SV 3.AC> Fixed Uninstalled SPC-3 SCSI device
pass2: Serial Number 6QG2WERN
pass2: 3.300MB/s transfers
pass3 at aacp0 bus 0 scbus0 target 3 lun 0
pass3: <WDC WD5001AALS-0 05.0> Fixed Uninstalled SPC-3 SCSI device
pass3: Serial Number WD-WCATR5106561
pass3: 3.300MB/s transfers
pass0 at aacp0 bus 0 scbus0 target 0 lun 0
pass0: <WDC WD1002FAEX-0 05.0> Fixed Uninstalled SPC-3 SCSI device
pass0: Serial Number WD-WCATR0375554
pass0: 3.300MB/s transfers
pass1 at aacp0 bus 0 scbus0 target 1 lun 0
pass1: <WDC WD10EACS-00D 01.0> Fixed Uninstalled SPC-3 SCSI device
pass1: Serial Number WD-WCAU41825095
pass1: 3.300MB/s transfers
pass2 at aacp0 bus 0 scbus0 target 2 lun 0
pass2: < ST3500630SV 3.AC> Fixed Uninstalled SPC-3 SCSI device
pass2: Serial Number 6QG2WERN
pass2: 3.300MB/s transfers
pass3 at aacp0 bus 0 scbus0 target 3 lun 0
pass3: <WDC WD5001AALS-0 05.0> Fixed Uninstalled SPC-3 SCSI device
pass3: Serial Number WD-WCATR5106561
pass3: 3.300MB/s transfers

cat /boot/loader.conf
Code:
aac_load="YES"

I also found another thread here on the same issue, which didn't seem to ever reach a resolution. While my issue might not be exactly the same (no large driver errors), the devices being placed as pass devices is identical. The only obvious error I am seeing is

Code:
module_register: cannot register aac/aacp from kernel; already loaded from aac.ko
Module aac/aacp failed to register: 17
module_register: cannot register aac/aacd from kernel; already loaded from aac.ko
Module aac/aacd failed to register: 17
module_register: cannot register pci/aac from kernel; already loaded from aac.ko
Module pci/aac failed to register: 17
module_register: cannot register pci/aacch from kernel; already loaded from aac.ko
Module pci/aacch failed to register: 17

But I'm not sure what this could be caused by. I will provide as much info as required.
 
If I remember right (it's been a while), the way the Adaptec support works is this: There is a /dev/aacN (N is a digit) device. This is not a disk, but a device that allows Adaptec management software to talk to the controller itself. The actual logical units (virtual or physical disk drives) show up as /dev/aacdN devices; those are the things used to make file systems on. The /dev/passN devices are also physical disk drives, but they are not intended to do IO to (you can't build a file system on top); instead they are intended for camcontrol to do disk management only.

You may have to do either of two things. Either manually create a set of non-RAIDed (RAID-0) logical units, exactly one per physical disk drive. Or put the whole Adaptec card into "JBOD mode", where it automatically becomes not a RAID card (which virtualizes the physical disks into logical units), but nothing but a SCSI HBA (which connects the physical disks to the OS kernel). Unfortunately, it's been several years since I last used the Adaptec management tools, so I keep confusing them with the LSI management tools, so I don't remember the details.
 
If I remember right (it's been a while), the way the Adaptec support works is this: There is a /dev/aacN (N is a digit) device. This is not a disk, but a device that allows Adaptec management software to talk to the controller itself. The actual logical units (virtual or physical disk drives) show up as /dev/aacdN devices; those are the things used to make file systems on. The /dev/passN devices are also physical disk drives, but they are not intended to do IO to (you can't build a file system on top); instead they are intended for camcontrol to do disk management only.

You may have to do either of two things. Either manually create a set of non-RAIDed (RAID-0) logical units, exactly one per physical disk drive. Or put the whole Adaptec card into "JBOD mode", where it automatically becomes not a RAID card (which virtualizes the physical disks into logical units), but nothing but a SCSI HBA (which connects the physical disks to the OS kernel). Unfortunately, it's been several years since I last used the Adaptec management tools, so I keep confusing them with the LSI management tools, so I don't remember the details.

From the Adaptec boot utility I had selected every disk to be a JBOD. Is this different from switching the whole card into "JBOD mode"? Which of the methods you suggested do you think would be the most efficient? If I setup the disks on this controller as a JBOD or non-raided (raid0) units, then eventually switch controllers, would this cause the ZFS on these disks to be lost?

Would onboard be a better solution? Onboard on this motherboard uses a Intel P67(B3) chipset but would only support a maximum of six drives. I would like to be able to upgrade in the future if possible. (otherwise I can do an on-site backup and restore).
 
If you are worried about the disks being usable from a different controller card in the future, then you can't use them a single-disk RAID volumes, because then the Adaptec controller puts its specific header data before the content of the disk, and when you connect the disk to another controller, the GPT will be in the wrong place.

With the old Adaptec firmware that I used to use (which was actually the special version for IBM's ServeRAID cards), you had to put the whole card into JBOD mode; if you were in RAID controller mode, it would treat every disk as a RAID volume. Conversely, in JBOD mode, you were not able to create RAID groups. But it is possible that newer Adaptec firmware is capable of creating a mix of RAID volumes and disks that are just given to the OS as storage devices directly; I don't know how to configure that.

By the way, the term "JBOD" stands for "Just a Bunch Of Disks", and doesn't describe an individual drive; it describes a setup where a disk enclosure or controller is not RAIDed.

You ask: Would connecting directly to the motherboard be a better solution? That's a tricky question. Good news: It would reduce complexity; you wouldn't have to deal with the Adaptec configuration and that extra layer of complexity. Bad news, you already mentioned above: not enough ports on the motherboard. If this were me at work (meaning de-facto unlimited money), I would buy a simple SAS/SATA HBA and connect the disks to it. That gives excellent performance, high port count (I think you can go up to 24 ports per PCIe slot), and superb performance, all without configuration hassle: plug disk into HBA, and the device shows up at the OS live. LSI (now owned by Avago and then Broadcom) makes them and is the market leader; PMC-Sierra (now owned by Microsemi, just like Adaptec) also makes good ones.
 
Back
Top