web-dev-qa-db-ja.com

Linuxでクラッシュを引き起こすnvmefstrim、systemctlで無効にすると役に立ちません

Linux(Ubuntu 18、カーネル4.15)デスクトップをM2nvmeディスクから起動しています。

週に一度、真夜中頃にクラッシュします。 /var/log/syslog.*から出力される関連ログファイルは以下のとおりです。

7月16日00:00:00rabbitcruncher systemd [1]:未使用のブロックの破棄を開始しています...

7月16日00:00:00rabbitcruncherカーネル:[559644.954267] nvme 0000:41:00.0:AMD-Vi:イベントログ[IO_PAGE_FAULTドメイン= 0x0014アドレス= 0x0000000000000000フラグ= 0x0000]

7月16日00:00:00rabbitcruncherカーネル:[559644.975805] nvme nvme0:非同期イベント結果000010300

7月16日00:00:30rabbitcruncherカーネル:[559675.338834] nvme nvme0:コントローラーがダウンしています。リセットされます:CSTS = 0x3、PCI_STATUS = 0x1010

7月16日00:00:31rabbitcruncherカーネル:[559675.621182] nvme 0000:41:00.0:AMD-Vi:イベントログ[IO_PAGE_FAULTドメイン= 0x0014アドレス= 0x0000000000000000フラグ= 0x0000]

7月16日00:01:01rabbitcruncherカーネル:[559706.346300] nvme nvme0:コントローラーがダウンしています。リセットされます:CSTS = 0x3、PCI_STATUS = 0x1010

7月16日00:01:01rabbitcruncherカーネル:[559706.378641] nvme nvme0:名前空間の識別に失敗しました

7月16日13:39:24rabbitcruncher systemd-fsck [962]:/ dev/nvme0n1p1:12ファイル、1186/130812クラスター

7月16日13:39:24rabbitcruncherカーネル:[1.052853] nvme nvme0:pci関数0000:41:00.0

7月16日13:39:24rabbitcruncherカーネル:[1.285806] nvme0n1:p1 p2

7月16日13:39:24rabbitcruncherカーネル:[5.036910] EXT4-fs(nvme0n1p2):順序データモードでマウントされたファイルシステム。オプション:(null)

7月16日13:39:24rabbitcruncherカーネル:[5.318742] EXT4-fs(nvme0n1p2):再マウント。オプション:errors = remount-ro

「未使用のブロックを破棄する」とは、Linuxがfstrimを実行しようとしていることを意味することを理解しています。ただし、systemctlを使用してfstrimを無効にしましたが、それでも発生します。

systemctl status fstrim.service

●fstrim.service-未使用のブロックを破棄します

ロード済み:ロード済み(/lib/systemd/system/fstrim.service;静的;ベンダープリセット:有効)

アクティブ:非アクティブ(デッド)

私はこの問題を解決するために何をすべきか途方に暮れています。誰かアドバイスをいただけますか?

2
kipp

あなたのUbuntukvm仮想マシン内で AMD-Vi したがって、fstrimを実行しないでください。

fstrimサービスはtimerで実行されるため、root

rm /var/lib/systemd/timers/stamp-fstrim.timer
systemctl stop fstrim.service fstrim.timer
systemctl disable fstrim.service fstrim.timer
systemctl mask fstrim.service fstrim.timer
0
Stuart Cardall

あなたの問題はこれに関連しているようです one _fstrim.timer_によってTRIMmingがトリガーされるたびにクラッシュを説明します。最近のカーネルの問題のようですが、AMDでは_iommu=soft_で回避できます(NVMEのベストプラクティスに従って、処方箋を見つけました ここ 原因に関する詳細はあまりありません) SSD、M.2 NVMEディスクで_fstrim.timer_を再度有効にできるようになりました。

私は(私が思うに)Intelで同じ問題に噛まれました-私はそれを報告しました ここ -私が問題を回避した方法と一緒に(_intel_iommu=pt_、これは_iommu=soft_)。

問題がIOMMUに関係していると決心した後、私はその動作を変更する方法を探し始めました。それが私が発見した方法です ここ PCIパススルー用にホストを構成するためのベストプラクティスに関するRedHatドキュメント-ややわずかに関連する問題-私にとっては問題を解決する_intel_iommu=pt_に言及しています。

私は現在、そのような設定の副作用があるとしても、それを認識していません。

0
Francesco