Weird Liveupgrade on LX50
不知道是不是因为缺乏运气,某台 LX50 x86 一直无法正常完成 Liveupgrade 从 UFS->ZFS 的工作,每次到了 luactivate 的时候都报告错误:
ERROR: No matching BIOS id found for: </dev/dsk/c1t10d0s0>
ERROR: Cannot determine GRUB id for ABE disk </dev/dsk/c1t10d0s0>
于是打算花点时间弄明白是怎么一回事,试验的步骤如下。
首先怀疑是 /boot/grub/menu.lst 的问题,但经对照另一台 amd64 (LU from UFS->ZFS succeed) 的 menu.lst ,排除了这个假设。
查看了一下 /sbin/luactivate,是一个 shell 脚本!于是打开 shell 跟踪一直到出错的语句,
发现调用了系统的 /sbin/biosdev 来获取可用的设备,这个命令返回了什么呢?
# /sbin/biosdev
0x80 /pci@1,0/pci8086,340f@7/sd@9,0
0x84 /pci@1,0/pci8086,340f@7/sd@d,0
0x85 /pci@1,0/pci8086,340f@7/sd@e,0
0x86 /pci@1,0/pci8086,340f@7,1/sd@0,0
0x87 /pci@1,0/pci8086,340f@7,1/sd@1,0
Wow... where're the 0x81, 0x82, 0x83 gone? (这三块硬盘竟然没有在这里列出,难怪
luactivate 找不到 BIOS id),尝试一下诊断参数项 -d
# /sbin/biosdev -d
adding /pci@1,0/pci8086,340f@7/sd@9,0
adding /pci@1,0/pci8086,340f@7/sd@a,0
adding /pci@1,0/pci8086,340f@7/sd@b,0
adding /pci@1,0/pci8086,340f@7/sd@c,0
adding /pci@1,0/pci8086,340f@7/sd@d,0
adding /pci@1,0/pci8086,340f@7/sd@e,0
adding /pci@1,0/pci8086,340f@7,1/sd@0,0
adding /pci@1,0/pci8086,340f@7,1/sd@1,0
matching edd 0x80
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x81
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x82
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x83
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x84
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x85
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x86
magic not valid ddbe pathinfolen 44
No matches by edd
matching edd 0x87
magic not valid ddbe pathinfolen 44
No matches by edd
matching first block 0x80
matched by first block
0x80 /pci@1,0/pci8086,340f@7/sd@9,0
matching first block 0x81
No matches by first block
Could not match 0x81
matching first block 0x82
No matches by first block
Could not match 0x82
matching first block 0x83
No matches by first block
Could not match 0x83
matching first block 0x84
matched by first block
0x84 /pci@1,0/pci8086,340f@7/sd@d,0
matching first block 0x85
matched by first block
0x85 /pci@1,0/pci8086,340f@7/sd@e,0
matching first block 0x86
matched by first block
0x86 /pci@1,0/pci8086,340f@7,1/sd@0,0
matching first block 0x87
matched by first block
0x87 /pci@1,0/pci8086,340f@7,1/sd@1,0
0x80 /pci@1,0/pci8086,340f@7/sd@9,0
0x84 /pci@1,0/pci8086,340f@7/sd@d,0
0x85 /pci@1,0/pci8086,340f@7/sd@e,0
0x86 /pci@1,0/pci8086,340f@7,1/sd@0,0
0x87 /pci@1,0/pci8086,340f@7,1/sd@1,0
很明显,诸如这类的信息就是阻挡了该硬盘被列出的问题所在
matching first block 0x83
No matches by first block
Could not match 0x83到此可以汇报一个 bug 了,奇怪的是这个问题只在 LX50 上面看到过,而且只要
是 SMI label 的硬盘,biosdev 就不认,但是 zfsboot 目前只能需要 SMI label 的
硬盘,因此这个 bug 对于该机型是致命的。对一个能够正常显示的硬盘尝试以下操作:# fdisk /dev/rdsk/c1t13d0p0
remove the EFI label (if it exist...)
create a new partition of SOLARIS2 (SMI label)
# /sbin/biosdev
0x80 /pci@1,0/pci8086,340f@7/sd@9,0
0x85 /pci@1,0/pci8086,340f@7/sd@e,0
0x86 /pci@1,0/pci8086,340f@7,1/sd@0,0
0x87 /pci@1,0/pci8086,340f@7,1/sd@1,0See that? c1t13d0 is gone!
File CR #6663634 to trace this issue. Take a rest, nice weekend...