【備忘録】Intel NUC 10 の SATA ケーブルを交換した話

Share on:

Table of contents

概要

Intel NUC 10 (NUC10i7FNH) で ESXi 7.0 を動かしているのですが、SATA ケーブルが故障したため互換品に交換しました。

使用した NUC 10 互換の SATA ケーブルは以下です。色々と調べましたが NUC 10/11 向けはこれしか無いようでした1

なお、NUC の購入証明があれば Intel のサポートに依頼するといったことは出来るらしいです。

ただ、そもそも ESXi は NUC のサポート外 OS であり、加えて今回の壊れ方も中途半端なものだったため、サポート対象 OS での再現確認や Intel サポートとのコミュニケーションなどの手間や時間的なコストが高くつきそうです。このため自前で保守することにしました。

当然ながらサポートされる方法ではありませんので交換は自己責任でお願いします。

背景

事の発端は SATA 接続の 2.5 インチ SSD 上の VMFS データストアにコールド移行や OVF テンプレートのデプロイを実行したところエラーで失敗したことです。再現性があるので esxtop のストレージ関連のパネルを眺めてみると、ディスクへの書き込み自体は始まっているものの、しばらくするとタスクのエラーと同時に書き込みが止まるような状況でした。

このためタスク失敗日時の付近の vmkernel.log を確認してみたところ、タスクが失敗する直前に SATA コントローラのドライバ(vmw_ahci)が以下のような I/O エラーのログを吐いている状況でした。

 12022-01-13T09:08:47.854Z cpu1:1049095)vmw_ahci[000000170]:<2> CompletionBottomHalf:TF/IF Error, PxIS=0x08000000, PxTFD=0x40,PxSERR=0x00400100, PxCI=0x0000000c, PxSACT=0x0000000e, ActiveTags=0x0000000e
 22022-01-13T09:08:47.854Z cpu1:1049095)vmw_ahci[000000170]:<2> CompletionBottomHalf:SCSI cmd 0x2a on slot 1 lba=0x37a800, lbc=0x2a8
 32022-01-13T09:08:47.854Z cpu1:1049095)vmw_ahci[000000170]:<2> CompletionBottomHalf:cfis->command= 0x61
 42022-01-13T09:08:47.854Z cpu1:1049095)vmw_ahci[000000170]:<2> LogExceptionSignal:Signal: --|--|--|--|--|TF|--|--|--|--|-- (0x0020) Curr: --|--|--|--|--|--|--|--|--|--|-- (0x0000)
 52022-01-13T09:08:47.854Z cpu2:1049025)vmw_ahci[000000170]:<2> LogExceptionProcess:Process: --|--|--|--|--|TF|--|--|--|--|-- (0x0020) Curr: --|--|--|--|--|TF|--|--|--|--|-- (0x0020)
 62022-01-13T09:08:47.854Z cpu2:1049025)vmw_ahci[000000170]:<2> ExceptionHandlerWorld:Performing device reset due to Task File Error.
 72022-01-13T09:08:47.854Z cpu2:1049025)vmw_ahci[000000170]:<2> ExceptionHandlerWorld:hardware stop on slot 0x1, activeTags 0x0000000e
 82022-01-13T09:08:47.967Z cpu2:1049025)vmw_ahci[000000170]:<2> ExecInternalCommandPolled:port status: 0x40000008, tf status: 0x84c1
 92022-01-13T09:08:47.968Z cpu2:1049025)vmw_ahci[000000170]:<2> _IssueComReset:Issuing comreset...
102022-01-13T09:08:47.996Z cpu2:1049025)vmw_ahci[000000170]:<2> ExecInternalCommandPolled:FAIL!!: Internal command 2f, 00, status: Storage initiator error
112022-01-13T09:08:47.996Z cpu2:1049025)vmw_ahci[000000170]:<2> ExceptionHandlerWorld:Fail to get error log data
122022-01-13T09:08:47.997Z cpu2:1049025)vmw_ahci[000000170]:<2> _IssueComReset:Issuing comreset...
132022-01-13T09:08:48.001Z cpu2:1049025)vmw_ahci[000000170]:<2> ExceptionHandlerWorld:fail a command on slot 1
142022-01-13T09:08:48.001Z cpu2:1049025)vmw_ahci[000000170]:<2> IssueCommand:tag: 2 already active during issue, activeTags c reissue_flag:1
152022-01-13T09:08:48.001Z cpu2:1049025)vmw_ahci[000000170]:<2> IssueCommand:tag: 3 already active during issue, activeTags c reissue_flag:1
162022-01-13T09:08:48.001Z cpu1:1049031)WARNING: HPP: HppThrottleLogForDevice:1136: Cmd 0x2a (0x4578c12f4288, 1048727) to dev "t10.ATA_____WDC__WDS500G2B0A2D00SM50_________________2147EL472601________" on path "vmhba0:C0:T2:L0" Failed:
172022-01-13T09:08:48.001Z cpu2:1049025)vmw_ahci[000000170]:<2> ProcessActiveCommands:Commands completed: 0, re-issued: 2
182022-01-13T09:08:48.001Z cpu1:1049031)WARNING: HPP: HppThrottleLogForDevice:1144: Error status H:0x0 D:0x2 P:0x0 Valid sense data: 0x4 0x44 0x0. hppAction = 1
192022-01-13T09:08:48.001Z cpu1:1049031)ScsiDeviceIO: 4161: Cmd(0x4578c12f4288) 0x2a, CmdSN 0x7a0 from world 1048727 to dev "t10.ATA_____WDC__WDS500G2B0A2D00SM50_________________2147EL472601________" failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x4
202022-01-13T09:08:48.001Z cpu1:1049031)0x44 0x0
212022-01-13T09:08:48.016Z cpu1:1048727)Fil6: 4072: 'Datastore': Fil6 file IO (<FD c19 r1>) : I/O error
222022-01-13T09:08:48.016Z cpu1:1048727)Fil6: 4038: ioCtx: 0x457918df6300, world: 1048727, overallStatus: I/O error, token: 0x0, tokenStatus: N, txnToken: 0x0, txnTokenStatus: N, totalIOSize: 1048576, maxIOLength: 779440128
232022-01-13T09:08:48.016Z cpu1:1048727)Fil6: 4044: numAddrs: 1, numTbz: 1, numPBsToAlloc: 0, numBlocksToAlloc: 1 numTBZBlocks: 0, numPBsToUnmap: 0, numBlocksToUnmap: 0
242022-01-13T09:08:48.016Z cpu1:1048727)Fil6: 4051: opType: 2, ioFlags: 131408, allocFlags: 0, ioStateTxn: 7, ioStateNoTxn: 8, txnState: 5, numResolvedAddrMaps: 171, numTxnPendingAddrMaps: 85
252022-01-13T09:08:48.016Z cpu1:1048727)Fil6: 4056: wakeupOnIOComplete: 0, isIOIssued: 1, isIODone: 1, isRead: 0 isSync: 1, canBlock: 1, lastPartialBlock: 0
262022-01-13T09:08:48.016Z cpu5:1048727)BC: 414: write to testclonevm_17-flat.vmdk (f532 28 3 61dfe5d6 f64fa263 691c8d49 28ab6e7a 4004c4 2 0 0 0 0 0) 1048576 bytes failed: I/O error
272022-01-13T09:08:48.016Z cpu5:1048727)Log: 1577: Generating backtrace for 1048727: bcflushd
282022-01-13T09:08:48.016Z cpu5:1048727)Backtrace for current CPU #5, worldID=1048727, fp=0x100097
292022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9bad0:[0x420023ce8bf5]LogBacktraceInt@vmkernel#nover+0xdd stack: 0x1451222, 0x420023c3e168, 0x45388ea1f140, 0x453890d1f140, 0x453884b9f140
302022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9baf0:[0x420023c3e167]BCFileIO@vmkernel#nover+0x1b4 stack: 0x453884b9f140, 0x340e3e21, 0x6e6f6c6374736574, 0x662d37315f6d7665, 0x6b646d762e74616c
312022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9bd60:[0x420023c3eb5f]BCWriteBuffer@vmkernel#nover+0x1fc stack: 0x1451222, 0xffffffffffffffff, 0x0, 0x2e655000, 0x185ecc000
322022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9bf70:[0x420023c3eccb]BCFlushFile@vmkernel#nover+0x44 stack: 0x430691406910, 0x41ffe3d527e0, 0x4306914069d0, 0x420023c3edab, 0x453884b9f000
332022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9bfa0:[0x420023c3edaa]BCFlushAll@vmkernel#nover+0xc3 stack: 0x453884b9f140, 0x0, 0x0, 0x420023c3edfd, 0x0
342022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9bfd0:[0x420023c3edfc]BCFlusherWorld@vmkernel#nover+0x9 stack: 0x0, 0x0, 0x0, 0x420023cc4700, 0x0
352022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9bfe0:[0x420023fb1775]CpuSched_StartWorld@vmkernel#nover+0x86 stack: 0x0, 0x420023cc4700, 0x0, 0x0, 0x0
362022-01-13T09:08:48.016Z cpu5:1048727)0x453884b9c000:[0x420023cc46ff]Debug_IsInitialized@vmkernel#nover+0xc stack: 0x0, 0x0, 0x0, 0x0, 0x0
372022-01-13T09:08:48.213Z cpu1:1051806 opID=4999eba0)World: 12075: VC opID kyco4041-2540-auto-1yl-h5:70001694-e8-01-be-c595 maps to vmkernel opID 4999eba0
382022-01-13T09:08:48.213Z cpu1:1051806 opID=4999eba0)VmMemXfer: vm 1051806: 2465: Evicting VM with path:/vmfs/volumes/61dfe5d6-f64fa263-8d49-1c697a6eab28/testclonevm/testclonevm.vmx
392022-01-13T09:08:48.213Z cpu1:1051806 opID=4999eba0)VmMemXfer: 209: Creating crypto hash
402022-01-13T09:08:48.213Z cpu1:1051806 opID=4999eba0)VmMemXfer: vm 1051806: 2479: Could not find MemXferFS region for /vmfs/volumes/61dfe5d6-f64fa263-8d49-1c697a6eab28/testclonevm/testclonevm.vmx

調査と切り分け

NUC 自体がサポート外のハードウェアではあるので vmw_ahci ドライバの信頼性が微妙なところではありますが、ログを見る限りハードウェアの問題だろうと推測しました。

SCSI Sense Code を見ると CHECK CONDITION (D:0x2) で ASC/ASCQ = 04/44 (= HARDWARE ERROR / INTERNAL TARGET FAILURE) が返ってきている状況なので、多分 SATA コントローラは問題なくて SSD か SATA ケーブルでしょ・・・という印象です。

色々と情報を探していたところ、以下のブログ記事のコメント欄で同様の事象が議論されており、SATA ケーブル交換で直ったとの報告が出ていました。

ESXi on 10th Gen Intel NUC (Comet Lake - Frost Canyon)

手元にあった SSD に交換してデータストア作成と OVF テンプレートのデプロイをしてみましたが直らず、ということで概要欄に記載した SATA ケーブルを注文して交換を試してみることにしました。

交換手順

まず NUC 10/11 互換の SATA ケーブルを用意します。海外発送のためケーブルがもう一本買えるレベルの送料なので、また SATA ケーブルが破損した場合に備えて2本買いました。

マザーボード上の SATA ポートはフラットケーブルの青い面を内側として固定するようになっています。白いパーツの両端(写真の○印)を上げると固定が解除されてフラットケーブルが抜けます。

2.5 インチベイがついている裏蓋は SATA コネクタの両端がネジ止めされているので、プラスドライバーでネジを外します。

あとは NUC 10/11 互換の SATA ケーブルを逆の手順で取り付けます。マザーボードにフラットケーブルを取り付ける時は向きに注意してください。裏表逆だとストレージデバイスが認識されません。

私の環境では SATA ケーブルの交換で事象が解消し、I/O エラーのログも出力されなくなりました。めでたしめでたし。


  1. Amazon.co.jp に NUC 用 SATA ケーブルがありますが、これは NUC 10/11 には対応していません。 ↩︎