pci=nomsi と pcie_aspm=off の詳解:Linux で SATA 拡張カードが認識されない、ディスクが落ちる、固まるときの切り分け

Linux カーネルパラメータ pci=nomsi と pcie_aspm=off の役割、使う場面、副作用、Ubuntu/Debian で恒久的に設定する方法を解説し、JMB585、ASM1166 などの PCIe SATA 拡張カードが認識されない、ディスクが落ちる、システムが固まる問題を切り分けます。

Linux / Ubuntu で PCIe SATA 拡張カードを使うと、ディスクが認識されない、しばらく動かすとディスクが落ちる、システムが固まる、PCIe Link Training 付近で起動が止まる、といった問題に遭遇することがあります。JMB585、ASM1166 などの SATA 拡張カードでよく見られ、NAS、小型 PC、産業用 PC、改造マザーボード、安価な変換カード環境では特に起きやすくなります。

pci=nomsipcie_aspm=off は、この種の問題を切り分けるときによく使われる Linux カーネルパラメータです。どちらも PCIe に関係しますが、解決する層は異なります。

  • pci=nomsi は主に 割り込み信号の問題、つまりデバイスが CPU に通知する方法の不安定さを扱います。
  • pcie_aspm=off は主に PCIe 電源管理の問題、つまりリンクが省電力状態から正常に復帰できない問題を扱います。

この 2 つを同じ種類の対策として扱うと、切り分けが勘頼みになります。症状を見て、割り込み、リンク省電力、ハードウェア本体のどれを優先して疑うべきかを決めるほうが合理的です。

pci=nomsi:Message Signaled Interrupts を無効化する

pci=nomsi は次のように読めます。

  • PCI:PCI 関連デバイス。
  • no:無効化。
  • MSI:Message Signaled Interrupts。

意味は、Linux カーネルに対して PCI デバイスで MSI / MSI-X 割り込みを使わず、従来の INTx 割り込み方式へ戻すよう指示することです。

MSI とは何か

従来、ハードウェアデバイスが CPU に「処理してほしい」と伝えるには、物理的な割り込みピン、つまりレガシー IRQ を使っていました。この方式は使えますが、共有や拡張性には限界があります。

その後、MSI / MSI-X が登場しました。デバイスは物理割り込みピンを必ずしも使わず、特定のメモリアドレスへメッセージを書き込みます。CPU はそのメッセージを受け取り、どのデバイスが割り込みを発生させたかを知ります。現代のシステムでは、MSI / MSI-X はより柔軟で、高並行デバイスにも向いています。

問題は、すべての PCIe 拡張カードのファームウェアが MSI を十分に正しく実装しているわけではないことです。一部の安価なカード、サーバー退役品、ブリッジチップ構成、品質の低い SATA コントローラでは、Linux ドライバ上で MSI メッセージ異常、割り込み喪失、割り込み嵐が起きることがあります。

よくある症状は次のとおりです。

  • 起動中、PCIe 拡張カード検出時に固まる。
  • SATA 拡張カードがまったくディスクを認識しない。
  • システムがランダムに固まる。
  • dmesgirq xx: nobody cared のようなエラーが出る。
  • Windows では一見動くが、Linux では不安定。

この問題の核心は、ディスク本体やファイルシステムではなく、デバイスと CPU の間の割り込み通信方式が不安定なことです。

pci=nomsi を追加すると何が起きるか

次を有効にします。

1
pci=nomsi

これは Linux カーネルに対し、PCI デバイスで高度な MSI メッセージ割り込みを使わせず、従来の INTx 割り込みへ戻すよう指示します。

高スループットや高割り込み頻度のデバイスでは、性能や並行効率が少し落ちる可能性があります。ただし家庭用 NAS、SATA 拡張カード、通常の HDD アレイでは、実感できる影響は小さいことが多いです。価値は、特定のデバイスファームウェアやブリッジチップの MSI 互換性問題を回避し、システムが安定してデバイスを認識し I/O を処理できる点にあります。

簡単に言えば、pci=nomsi は「デバイスが CPU に通知する方法が不安定」な問題を扱います。

pcie_aspm=off:PCIe Active State Power Management を無効化する

pcie_aspm=off は次のように読めます。

  • PCIe:PCI Express。
  • ASPM:Active State Power Management。
  • off:無効化。

意味は、PCIe リンクの省電力機構を無効にし、PCIe リンクを低電力状態に入れないようにすることです。

ASPM とは何か

ASPM は PCIe バスの省電力機構です。システムがある PCIe リンクでしばらくデータ転送がないと判断すると、リンクを L0s や L1 のような低電力状態にできます。再びデータの読み書きが必要になると、リンクを通常状態へ復帰させます。

設計の良いハードウェアでは、この仕組みで消費電力を下げられ、ユーザーはほとんど意識しません。しかし一部の消費者向けマザーボード、小型 PC、産業用 PC、安価な SATA 拡張カード、変換基板、信号品質が弱い構成では、「寝たあとに安定して起きられない」ことがあります。

典型的には、JMB585 や ASM1166 のような PCIe SATA 拡張カードがアイドル後に低電力状態へ入り、次のディスクアクセス時に L1 から復帰する場面です。コントローラ、マザーボード、ライザー、電源、ファームウェアの品質が十分でないと、復帰が遅すぎたり、リンク復帰時に物理層の揺れが起きたりします。Linux カーネルは、そのデバイスが一瞬消えたと判断することがあります。

典型的な dmesg は次のようなものです。

1
2
3
pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Physical Layer
ata1: link is slow to respond, please be patient
ata1: COMRESET failed (errno=-16)

その後、次のような現象が起きます。

  • ディスクが落ちる。
  • アレイが degrade する。
  • ファイルシステムが read-only になる。
  • NAS サービスが異常になる。
  • システム I/O が固まる。
  • 再起動すると一時的にディスクが戻る。

厄介なのは、起動時には問題が出ないことも多い点です。一定時間動いた後、アイドルからの復帰時、または負荷の切り替わりで突然発生します。

pcie_aspm=off を追加すると何が起きるか

次を有効にします。

1
pcie_aspm=off

これはカーネルに対し、システム全体の PCIe ASPM 省電力機能を無効化するよう指示します。PCIe リンクはアイドルでも負荷中でも、できるだけ通常の接続状態を維持し、低電力スリープへ入らないようになります。

副作用は消費電力が少し増えることです。デスクトップ、NAS、小型 PC では、数百 mW から 1、2 W 程度のことが多いです。ノート PC ではバッテリー駆動時間に影響する可能性があります。その代わり、PCIe リンクのスリープと復帰が原因のディスク脱落、リンクトレーニングエラー、物理層エラーを減らせます。

簡単に言えば、pcie_aspm=off は「PCIe リンクが寝たあと安定して起きない」問題を扱います。

2 つのパラメータの違い

この 2 つは異なる問題を解決します。

パラメータ 解決する問題 よくある症状 主な副作用
pci=nomsi 割り込み信号の衝突、MSI / MSI-X 互換性不良 起動時に固まる、ディスクを認識しない、irq xx: nobody cared、システムフリーズ 高並行時に割り込み効率が少し下がる可能性
pcie_aspm=off PCIe 省電力復帰失敗、リンク信号不安定 起動直後は正常、しばらくしてディスクが落ちる、PCIe Bus ErrorCOMRESET failed 消費電力が少し増える、ノート PC の駆動時間が少し短くなる

両者は代替関係ではありません。一方は割り込み、もう一方はリンク電源管理を扱います。

起動段階で固まる、デバイスがまったく認識されない場合は、まず pci=nomsi を疑います。起動は正常だがしばらくしてディスクが落ちる、または dmesg に PCIe Physical Layer、COMRESET、link is slow to respond のような情報がある場合は、まず pcie_aspm=off を疑います。

2 つを一緒に入れるべきか

多くの NAS ユーザーは次をまとめて追加します。

1
pci=nomsi pcie_aspm=off

これは確かに素早い切り分け方法です。JMB585、ASM1166、小型 PC、変換カード、電源やケーブルが不確かな環境では特に有効です。MSI 互換性問題と ASPM 復帰問題を同時に回避できます。

ただし、切り分けとしては症状とログを先に記録することを勧めます。

  • 割り込みエラーや起動時フリーズなら、まず pci=nomsi
  • 起動後のディスク脱落、PCIe Bus Error、COMRESET なら、まず pcie_aspm=off
  • すぐ安定稼働へ戻したい場合は両方入れ、安定後に分けて検証する。

こうすると、実際にどの種類の問題だったか分かり、後でカード、スロット、マザーボード、BIOS 設定を変えるときの判断材料になります。

Ubuntu / Debian で恒久的に有効化する方法

Grub 設定ファイルを編集します。

1
sudo nano /etc/default/grub

次の行を探します。

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

引用符の中にパラメータを追加し、空白で区切ります。

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi pcie_aspm=off"

保存して終了します。Nano なら Ctrl+O で保存し、Enter で確定し、Ctrl+X で終了します。

Grub を更新して再起動します。

1
2
sudo update-grub
sudo reboot

再起動後、現在のカーネル起動パラメータを確認します。

1
cat /proc/cmdline

出力に pci=nomsipcie_aspm=off が含まれていれば、現在の起動で有効になっています。

ほかに確認すべきこと

この 2 つのパラメータは有用ですが、すべてのディスク脱落問題を解決する万能薬ではありません。SATA 拡張カードや NAS のディスク脱落を調べるときは、次も確認しましょう。

  • SATA データケーブルが緩んでいないか、品質が悪くないか。
  • 複数 HDD の同時スピンアップ時に電源が安定しているか。
  • PCIe スロットの接触不良がないか。
  • 拡張カードが過熱していないか。
  • BIOS に PCIe ASPM、Above 4G Decoding、PCIe speed などの関連設定があるか。
  • SATA 拡張カードのファームウェアに既知の問題がないか。
  • システムログにディスク本体の bad sector、I/O error、SMART 警告がないか。

ディスクの SMART がすでに異常を報告していたり、電源が不安定だったりする場合、カーネルパラメータだけでは根本解決できません。

まとめ

pci=nomsipcie_aspm=off は、Linux で PCIe SATA 拡張カードが不安定なときによく使われますが、扱う層は異なります。

  • pci=nomsi:MSI / MSI-X を無効化し、割り込み通信の互換性問題を回避する。
  • pcie_aspm=off:PCIe ASPM を無効化し、リンク省電力後の復帰失敗を避ける。

JMB585、ASM1166、NAS、小型 PC、安価な PCIe 拡張カードでは、この 2 つが効果を出すことがあります。より確実なのは、まず dmesg を見て、割り込み問題なのかリンク省電力問題なのかを判断し、単独または併用を決めることです。

これらは切り分け用の道具であり、ハードウェア品質の代わりではありません。追加後に安定するなら、中断互換性または PCIe 電源管理が原因である可能性が高いです。まだディスクが落ちるなら、電源、ケーブル、冷却、ディスク健康状態、拡張カード本体を引き続き確認する必要があります。

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。