由于 PERC H330 的 passthrough mode 并不适用于 ZFS 所以只好强刷为 HBA330 啦。

注意!此方法不适用于 H730/H830 系列 RAID 卡,且 H730 卡支持直接转换为 HBA。

操作前先备份!操作前先备份!操作前先备份!重要的事情说三遍!!!

准备必要程序和固件

  1. DOS 版本 megacli.exe
  2. DOS 版本 megarec3.exesas3flsh.exe 和其他必要文件
  3. HBA330 固件

我不装了,这里有 Sleyk 大神准备好的文件包。

准备 FreeDOS 启动镜像

首先下载 FreeDOS 的 USB Lite 镜像,作为基础系统环境。当前版本 1.3 解压后给出 FD13LITE.img 文件。

扩容 img 镜像到 128M:

1
~> truncate -s 96M FD13LITE.img

扩展镜像的 FAT 分区

1
~> fatresize -n 1 -s max FD13LITE.img

挂载 img 镜像

1
2
3
4
5
~> udisksctl loop-setup -f FD13LITE.img
Mapped file FD13LITE.img as /dev/loop0.
~> udisksctl mount -b /dev/loop0p1
Mounted /dev/loop0p1 at /run/media/user/FD13-LITE
~> cp /path/to/flash/files /run/media/user/FD13-LITE/

注意 DOS 并不能识别部分文件名,如果不修改的话,在 DOS 中会显示成类似 HBA~1 的形式。

复制好文件后卸载镜像

1
2
3
~> udisksctl unmount -b /dev/loop0p1
Unmounted /dev/loop0p1.
~> udisksctl loop-delete -b /dev/loop0

完事儿后把修改版 FD13LITE.img 远程挂载到 iDRAC KVM 里,然后重启服务器,从 Virtual Floppy 启动即可。

  • 注意:如果 Virtual Floppy 选项没有识别为 [Hard Disk] Virtual Floppy 的话则可能需要再次重启,因为镜像没有正确识别,无法进入 FreeDOS。具体原因不明。

Crossflash!

进入 FreeDOS 环境后会提示是否安装,选 No 回到 FreeDOS 就可以执行命令啦。

  1. 刷入 SMC3018 ROM
1
> megacli -adpfwflash -f smc3108.rom -noverchk -a0

然后因为是远程挂载镜像,会报一堆写入错误,需要一直忽略这些错误。一直等待操作完成报告成功。

  1. 重启,然后耐心等待直到出现 Baseport not responding. No adapter available 再进入 FreeDOS 环境。

  2. 清零 Serial Boot ROM (SBR)

1
> megarec3 -writesbr 0 sbrempty.bin

过程中的报错可以忽略,最终报告成功即可。

  1. 清零 flash
1
> megarec3 -cleanflash 0
  1. 重启。

  2. 再次进入 FreeDOS 环境,刷入 HBA330 固件。

1
> sas3flsh -o -f hba330.fw -b mptx64.rom

如果是 H330Mini,则需要刷 hba330mini.fw,否则会不识别硬盘。

  1. 最后一步,重编程 SAS 地址。看起来可以省略,默认是 16 个 0。
1
> sas3flsh -o -sasadd 0000000000000000

只能用数字和字母,必须 16 位。可以自己造也可以用原本的地址(megacli -adpallinfo -a0)。如果自己造的话需要保证不和同系统内的其他卡冲突。

完成

好耶!(≧∇≦)/

参考:

  1. https://sandelinos.com/nerd-stuff/Creating_customized_FreeDOS_images/
  2. https://forums.servethehome.com/index.php?threads/flash-crossflash-dell-h330-raid-card-to-hba330-12gbps-hba-it-firmware.25498/

顺便还折腾了一台老 HPE 的 P420i,步骤很简单,只需要官方的 ssacli 即可。

1
2
3
4
# 清空所有逻辑磁盘
~> ssacli controller slot=0 logicaldrive all delete forced
# 设置为 HBA Mode
~> ssacli controller slot=0 modify hbamode=on forced

如果不知道 slot 编号,可以 ssacli ctrl all show 来看。

但!是!

虽然改成了 HBA,但你不能从这 HBA 的硬盘启动。

(╯°□°)╯︵ ┻━┻