表題の通りです。
普段使用している自作機にHDDを増設しようと思い立ちましたが、マザーボードのSATAポートがすでに埋まっており、増設を考えました。
過去に何度かSATAインターフェースカードを使用して増設したことがありますが、この手のカードはなぜか安定性が低く、ハングしたり、ドライブを見失ったりという思い出があります。
そこで考えたのがRAIDカードです。
RAIDカードなら、サーバで使用している信頼性もありますし、少し古い物なら格安で入手可能です。
ということでとりあえず入手してみたのがこちら。
IBM ServeRAID M5015(46M0851)
2009年あたりのモデルで、中身はLSI MegaRAID 9260-8iのようです。
NECのOEMと違って、メモリ量などの削減はありません。512MB搭載です。
裏面です。
端子はMini-SAS(SFF-8087)で、SAS-SATAx4のケーブルを購入すれば、2本で8台までのSATAデバイスを接続できます。
そのへんのテスト機に装着して起動してみます。
取り付けて起動してみるとこんな感じです。
RAIDカードなので、BIOSが走ってイニシャライズ、そのあとドライブのチェックとスピンアップの待機時間があり、想像以上に長いブート時間がかかります。
この画面でしばらく待機すると、バラバラっとメッセージが流れ、この画面でCtrl+Hを押すとWebBIOS(設定画面)に入れます。
設定画面です。装着されているRAIDカードが一覧で表示されています。
ServeRAID M5015と表示されています。あっていますね。
さて、ブート時間が非常に長いので、対策します。
LSIのFWに書き換えると、ブート時間が短くなるとの話もありましたので書き換えてみます。
まずは海外のフォーラムサイトから、ダウンロードします。
https://forums.laptopvideo2go.com/topic/32418-lsi-sas-controller-firmware/
今回は、9260-8iなのでSAS2108、書き換えに必要なLSI_DOSの二つをダウンロード、解凍します。
次に、LSIのサイト(現Broadcomのサイト)からFWをダウンロード、解凍します。
最新版は12.15.0-0239、2015年が最終更新です。
https://docs.broadcom.com/docs/12.15.0-0239zip
USBメモリ等でDOSブートできるものを作成(FreeDOSでもMSDOSでも。Rufasが簡単です)し、ルートディレクトリにLSI_DOSの中身をすべてと、2108フォルダはそのまま配置します。
BroadcomのサイトからダウンロードしたFWファイル(mr2108fw.rom)もルートディレクトリに配置します。配置するとこんな感じです。
では書き換えに入ります。
このUSBメモリをRAIDカードを装着したPCに差し込み、ブートします。
FreeDOSが起動します。DIRコマンドでルートディレクトリを一覧しています。
まずはCDコマンドで、ディレクトリを変更します。そのあとでDIRコマンドで一覧を出力しています。
C:\>CD 2108
続いて、ブランクのSBRを書き込みます。
C:\2108>megarec -writesbr 0 sbrempty.bin
“Success”が表示されたら完了です。
次に、9260-8iのSBRを書き込みます。
C:\2108>megarec -writesbr 0 sbr9260.bin
“Success”が表示されたら完了です。
次にflash領域を消去します。
C:\2108>megarec -cleanflash 0
完了したら、一度再起動します。FWがBIOSごとありませんので、RAIDのBIOS表示はなく、高速に起動すると思います。
ではFWを書き込みます。
C:\2108>megarec -m0flash 0 mr2108fw.rom
書き込みが始まります。
“Success”が表示されたら完了です。
再起動します。とりあえず壊れていません。
しばらく待機します。初回起動は非常に長いです。
MegaRAID 9260-8iの表示があります。成功しているようです。
Ctrl+HでWebBIOSに入ってみます。こちらでも問題なく9260-8iで認識しています。
さて、肝心の起動時間ですが、確かに短くなりました。
とはいえ、RAIDカードですので結構長いですが…。
後から調べて気づきましたが、このブート時間の効果はおそらくFWを書き換えたことに起因するものではないと思われます。megaoem.exeを使用して、RAIDカードのコンフィグを見るとわかります。
以下のようにコマンドを打ち込みます。
C:\>megaoem -adpsettings write -f test.ini -a0
これで、現在のカードの設定がルートディレクトリに”test.ini”として出力されます。
以下が、LSIのFWに書き換えた後のコンフィグです。
# MegaSAS CLI utility generated ini file for MFC programming.
subVendorId=0x1014 # sub-vendor ID for this board (Readonly)
subDeviceId=0x3b2 # sub-vendor ID for this board (Readonly)
OEM = 9 # OEM Name of controller (Readonly)
SUBOEM = 0x00 # SUBOEM ID of controller (Readonly)
phyPolarity = 0 # polarity for each possible PHY (bitmap...1=inverted) - used with phyPolaritySplit
phyPolaritySplit = 0 # polarity for TX/RX pair is different (bitmap...0=RX/TX same, 1=RX/TX different; phyPolarity.x=RX)
backGroundRate = 30 # default rebuild rate for this card (0-100)
stripeSize = 8 # default LD strip size (per DDF: 4=8K, 5=16K, 7=64K, 11=1MB, etc.)
flushTime = 4 # default cache flush time in seconds
writeBack = 1 # default LD is WriteBack (0=WT, 1=WB, 2=Adaptive)
readAhead = 0 # default LD read-ahead policy (0=none, 1=RA, 2=Adaptive)
cacheWhenBbuBad = 0 # default LD setting for enabling WB when BBU bad - 1=enable WB even when BBU bad
cachedIo = 0 # default LD is cached
smartMode = 0 # default smart mode (0=mode 6, 1=disable, 2=mode 2)
alarmDisable = 1 # default alarm to disabled if set
coercion = 2 # 0=none, 1=128M, 2=1G, 3=reserved
zcrConfig = 0 # ZCR configuration data (0=unknown, 1=RADIOS, 16-31=IDSEL for ZCR)
dirtyLedShowsDriveActivity = 0 # 1=change dirty LED to show drive activity
biosContinueOnError = 0 # 1=continue BIOS boot on error - default
spindownMode = 0 # drive spindown mode on shutdown (0=none, 1=internal only, 2=external only, 3=all)
allowedDeviceTypes = 0 # 0=SAS/SATA mix, 1=no SATA(SAS only), 2=no SAS(SATA only)
allowMixInEnclosure = 1 # allow SAS/SATA mix within an enclosure
allowMixInLD = 0 # allow SAS/SATA HDD mix within an LD
allowSataInCluster = 0 # allow SATA drives to be used in a cluster configuration
allowSSDMixInLD = 0 # allow SAS/SATA SSD mix within an LD
allowMixSSDHDDInLD = 0 # allow SSD/HDD mix within an LD
maxChainedEnclosures = 16 # maximum number of enclosures that may be chained
disableCtrlR = 1 # 1=disable Ctrl-R configuration utility, 0=enable Ctrl-R utility
enableWebBios = 1 # 1=enable WebBIOS configuration utility, 0=disable WebBIOS utility
directPdMapping = 0 # 1=enable direct PD mapping, 0=persistent PD mapping
biosEnumerateLds = 1 # 1=BIOS to display LDs at POST
restoreHotSpareOnInsertion = 0 # HSP kicks in, insert the failed drive, it becomes HSP
exposeEnclosureDevices = 1 # 1=device driver should expose enclosure devices, 0=hide enclosure devices
maintainPdFailHistory = 1 # 1=enable tracking of bad PDs across reboot; will also show failed LED status for missing bad drives
disablePuncturing = 1 # 1=Don't puncture LBA's in PD's. 0=okay to puncture. This is for SAS drives
zeroBasedEnclEnumeration = 0 # 1=Enclosure enumeration start with Zero. 0=Enclosure enumeration start with One.
disableBootCLI = 0 # 0=enable pre boot CLI tool, 1=disable pre boot CLI.
quadPortConnectorMap = 0 # Bitmap defining connector map for 8 quad-ports, 0=Internal connector/unused, 1=External connector/SAS MUX control.
driveActivityLed = 0 # 0=No LED for drive activity, 1=Show all drive activity.
disableAutoDetectBackplane = 0 # 0=SGPIO/i2c SEP enabled, 1=disable auto detect SGPIO,2=disable i2c SEP auto detect,3=disable both auto detect.
enableLedHeaders = 0 # 0=No LED for drive faults, 1=enable LED for drive faults.
useFdeOnly = 1 # 0=FDE and controller encryption (if HW supports) is allowed, 1=Only support FDE encryption, disallow controller encryption.
delayPOST = 0 # intentional delay to be introduced during FW POST. Possible coded values: 0 to 7,which gives a value of 0,15,30,45,60,75,90,105 seconds
enableCrashDump = 0 # 1=enable collection of system core in event of a controller crash
disableOnlineCtrlReset = 0 # 1=disable online controller resets, 0=allow online controller resets
enableLDBBM = 0 # 1=enable LD Bad block management
allowUnCertifiedHDDs = 1 # 1=allow, 0=block, 2=Warn & allow
treatR1EAsR10 = 0 # 1=treat single span R1E as R10
maxLdsPerArray = 0 # 0=16 LDs per array, 1=64 LDs per array
# bit-0=Don't spin down unconfigured drives, bit-1=Don't spin down Hot spares, bit-2=Don't auto spin down configured drives,
# bit-3=Apply settings to all drives - don't allow individual PD/LD configuration, bit-4 =Disallow MAX power saving option for LDs - only T10 power conditions are to be used,
# bit-5=Don't use cached writes for spun down VDs, bit-6=Provide option to schedule disable power savings at controller level
spinDownTime = 30 # Default spin down time in minutes
snapVDSpace = 3 # % of source LD to be reserved for snapshot in snap VD
autoSnapVDSpace = 8 # % of source LD to be reserved for auto snapshot in snap VD
viewSpace = 4 # snapshot writeable VIEWs capacity in 7314310f src VD capacity. 0 - READ only
failPdOnSMARTer = 0 # 1=fail a PD that's reached SMART failure threshold, if it doesn't take an LD offline
nonRevertibleSpares = 0 # 1=hot spares are not revertible
enableJBOD = 1 # 1=enable JBOD mode, 0=disable JBOD mode by default
detectCMETimer = 60 #Time in seconds taken to detect CME. 15-60 are valid values.
ttyLogInFlash = 0 # 1=tty logs are maintained in flash
autoEnhancedImport = 0 # 1=import foreign configuration automatically, at boot
breakMirrorRAIDSupport = 0 # 0=supported for all redundant RAID level - R1, R10 (PRL1 & PRL11), and triple mirror R6, 1=single span R1 (PRL1), 2=All R1 and R10 combinations (PRL1 & PRL11)
disableJoinMirror = 0 # 1=join LD mirror operation is not supported
delayPOST = 0
となっている部分が重要で、LSIのカード(9260-8i)ではデフォルトが”0″なのか、書き換えた後に0になっています。delayPOSTは、0-7の値が設定でき、それぞれ 0,15,30,45,60,75,90,105秒 の設定になります。
読んで名のごとく、POSTの遅延時間の設定です。
ちなみに以下が、IBM ServeRAID (M5015)のコンフィグです。
# MegaSAS CLI utility generated ini file for MFC programming.
subVendorId=0x1014 # sub-vendor ID for this board (Readonly)
subDeviceId=0x3b2 # sub-vendor ID for this board (Readonly)
OEM = 9 # OEM Name of controller (Readonly)
SUBOEM = 0x00 # SUBOEM ID of controller (Readonly)
phyPolarity = 0 # polarity for each possible PHY (bitmap...1=inverted) - used with phyPolaritySplit
phyPolaritySplit = 0 # polarity for TX/RX pair is different (bitmap...0=RX/TX same, 1=RX/TX different; phyPolarity.x=RX)
backGroundRate = 30 # default rebuild rate for this card (0-100)
stripeSize = 8 # default LD strip size (per DDF: 4=8K, 5=16K, 7=64K, 11=1MB, etc.)
flushTime = 4 # default cache flush time in seconds
writeBack = 1 # default LD is WriteBack (0=WT, 1=WB, 2=Adaptive)
readAhead = 0 # default LD read-ahead policy (0=none, 1=RA, 2=Adaptive)
cacheWhenBbuBad = 0 # default LD setting for enabling WB when BBU bad - 1=enable WB even when BBU bad
cachedIo = 0 # default LD is cached
smartMode = 0 # default smart mode (0=mode 6, 1=disable, 2=mode 2)
alarmDisable = 1 # default alarm to disabled if set
coercion = 2 # 0=none, 1=128M, 2=1G, 3=reserved
zcrConfig = 0 # ZCR configuration data (0=unknown, 1=RADIOS, 16-31=IDSEL for ZCR)
dirtyLedShowsDriveActivity = 0 # 1=change dirty LED to show drive activity
biosContinueOnError = 0 # 1=continue BIOS boot on error - default
spindownMode = 0 # drive spindown mode on shutdown (0=none, 1=internal only, 2=external only, 3=all)
allowedDeviceTypes = 0 # 0=SAS/SATA mix, 1=no SATA(SAS only), 2=no SAS(SATA only)
allowMixInEnclosure = 1 # allow SAS/SATA mix within an enclosure
allowMixInLD = 0 # allow SAS/SATA HDD mix within an LD
allowSataInCluster = 0 # allow SATA drives to be used in a cluster configuration
allowSSDMixInLD = 0 # allow SAS/SATA SSD mix within an LD
allowMixSSDHDDInLD = 0 # allow SSD/HDD mix within an LD
maxChainedEnclosures = 16 # maximum number of enclosures that may be chained
disableCtrlR = 1 # 1=disable Ctrl-R configuration utility, 0=enable Ctrl-R utility
enableWebBios = 1 # 1=enable WebBIOS configuration utility, 0=disable WebBIOS utility
directPdMapping = 0 # 1=enable direct PD mapping, 0=persistent PD mapping
biosEnumerateLds = 1 # 1=BIOS to display LDs at POST
restoreHotSpareOnInsertion = 0 # HSP kicks in, insert the failed drive, it becomes HSP
exposeEnclosureDevices = 1 # 1=device driver should expose enclosure devices, 0=hide enclosure devices
maintainPdFailHistory = 1 # 1=enable tracking of bad PDs across reboot; will also show failed LED status for missing bad drives
disablePuncturing = 1 # 1=Don't puncture LBA's in PD's. 0=okay to puncture. This is for SAS drives
zeroBasedEnclEnumeration = 0 # 1=Enclosure enumeration start with Zero. 0=Enclosure enumeration start with One.
disableBootCLI = 0 # 0=enable pre boot CLI tool, 1=disable pre boot CLI.
quadPortConnectorMap = 0 # Bitmap defining connector map for 8 quad-ports, 0=Internal connector/unused, 1=External connector/SAS MUX control.
driveActivityLed = 0 # 0=No LED for drive activity, 1=Show all drive activity.
disableAutoDetectBackplane = 0 # 0=SGPIO/i2c SEP enabled, 1=disable auto detect SGPIO,2=disable i2c SEP auto detect,3=disable both auto detect.
enableLedHeaders = 0 # 0=No LED for drive faults, 1=enable LED for drive faults.
useFdeOnly = 1 # 0=FDE and controller encryption (if HW supports) is allowed, 1=Only support FDE encryption, disallow controller encryption.
delayPOST = 0 # intentional delay to be introduced during FW POST. Possible coded values: 0 to 7,which gives a value of 0,15,30,45,60,75,90,105 seconds
enableCrashDump = 0 # 1=enable collection of system core in event of a controller crash
disableOnlineCtrlReset = 0 # 1=disable online controller resets, 0=allow online controller resets
enableLDBBM = 0 # 1=enable LD Bad block management
allowUnCertifiedHDDs = 1 # 1=allow, 0=block, 2=Warn & allow
treatR1EAsR10 = 0 # 1=treat single span R1E as R10
maxLdsPerArray = 0 # 0=16 LDs per array, 1=64 LDs per array
# bit-0=Don't spin down unconfigured drives, bit-1=Don't spin down Hot spares, bit-2=Don't auto spin down configured drives,
# bit-3=Apply settings to all drives - don't allow individual PD/LD configuration, bit-4 =Disallow MAX power saving option for LDs - only T10 power conditions are to be used,
# bit-5=Don't use cached writes for spun down VDs, bit-6=Provide option to schedule disable power savings at controller level
spinDownTime = 30 # Default spin down time in minutes
snapVDSpace = 3 # % of source LD to be reserved for snapshot in snap VD
autoSnapVDSpace = 8 # % of source LD to be reserved for auto snapshot in snap VD
viewSpace = 4 # snapshot writeable VIEWs capacity in 7314310f src VD capacity. 0 - READ only
failPdOnSMARTer = 0 # 1=fail a PD that's reached SMART failure threshold, if it doesn't take an LD offline
nonRevertibleSpares = 0 # 1=hot spares are not revertible
enableJBOD = 1 # 1=enable JBOD mode, 0=disable JBOD mode by default
detectCMETimer = 60 #Time in seconds taken to detect CME. 15-60 are valid values.
ttyLogInFlash = 0 # 1=tty logs are maintained in flash
autoEnhancedImport = 0 # 1=import foreign configuration automatically, at boot
breakMirrorRAIDSupport = 0 # 0=supported for all redundant RAID level - R1, R10 (PRL1 & PRL11), and triple mirror R6, 1=single span R1 (PRL1), 2=All R1 and R10 combinations (PRL1 & PRL11)
disableJoinMirror = 0 # 1=join LD mirror operation is not supported
M5015はdelayPOST = 4 なので60秒の遅延があります。
M5015のままでも、このコンフィグだけ読みだしてdelayPOST = 0とし、書き込んでやれば起動時間は解決しそうです。コンフィグファイルの書き込みは以下のコマンドです。
C:\megaoem -adpsettings read -f test.ini -a0
ただし結局、このカードだとITモード(RAIDを使用せず、ただのIFカードとして使用するモード)が使用できないのでRAID0などを組んで運用する必要があること、またOS上からSMART情報が見えないなどの理由で、別のカードを購入しました。それはまた次回。