排解 NVMe 磁碟問題


本文列出使用非揮發性記憶體快取 (NVMe) 介面磁碟時,可能會遇到的錯誤。

您可以使用 NVMe 介面來連接本機 SSD 和永久磁碟 (Persistent Disk 或 Google Cloud Hyperdisk)。只有最新的機器系列 (例如 Tau T2A、M3、C3、C3D 和 H3) 會使用 NVMe 介面來存取永久性磁碟。機密 VM 也會使用 NVMe 做為永久磁碟。所有其他 Compute Engine 機器系列都會使用 SCSI 磁碟介面做為永久磁碟。

I/O 作業逾時錯誤

如果您遇到 I/O 逾時錯誤,延遲時間可能會超過提交至 NVMe 裝置的 I/O 作業預設逾時參數。

錯誤訊息

[1369407.045521] nvme nvme0: I/O 252 QID 2 timeout, aborting
[1369407.050941] nvme nvme0: I/O 253 QID 2 timeout, aborting
[1369407.056354] nvme nvme0: I/O 254 QID 2 timeout, aborting
[1369407.061766] nvme nvme0: I/O 255 QID 2 timeout, aborting
[1369407.067168] nvme nvme0: I/O 256 QID 2 timeout, aborting
[1369407.072583] nvme nvme0: I/O 257 QID 2 timeout, aborting
[1369407.077987] nvme nvme0: I/O 258 QID 2 timeout, aborting
[1369407.083395] nvme nvme0: I/O 259 QID 2 timeout, aborting
[1369407.088802] nvme nvme0: I/O 260 QID 2 timeout, aborting
...

解決方法

如要解決這個問題,請提高逾時參數的值。

  1. 查看逾時參數的目前值。

    1. 判斷永久磁碟或本機 SSD 磁碟區使用的 NVMe 控制器。
      ls -l /dev/disk/by-id
      
    2. 顯示磁碟的 io_timeout 設定 (以秒為單位)。

      cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
      
      取代下列內容:

      • CONTROLLER_ID:NVMe 磁碟控制器的 ID,例如 nvme1
      • NAMESPACE:NVMe 磁碟的命名空間,例如 nvme1n1

      如果您只有一個使用 NVMe 的磁碟,請使用下列指令:

      cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
      

  2. 如要增加提交至 NVMe 裝置的 I/O 作業逾時參數,請在 /lib/udev/rules.d/65-gce-disk-naming.rules 檔案中加入下列一行,然後重新啟動 VM:

    KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
    

已卸離的磁碟仍會顯示在運算執行個體的作業系統中

在使用 Linux 核心 6.0 到 6.2 版的 VM 上,涉及 Compute Engine API 方法 instances.detachDiskgcloud compute instances detach-disk 指令的作業可能無法正常運作。 Google Cloud 主控台會顯示裝置已移除,運算執行個體中繼資料 (compute disks describe 指令) 會顯示裝置已移除,但裝置掛載點和 udev 規則建立的任何符號連結仍會顯示在來賓作業系統中。

錯誤訊息:

嘗試從 VM 上的已卸離磁碟讀取資料會導致 I/O 錯誤:

sudo head /dev/nvme0n3

head: error reading '/dev/nvme0n3': Input/output error

問題

使用 Linux 6.0-6.2 核心的作業系統映像檔,但未納入 NVMe 修正的回溯版本,無法在解除連接 NVMe 磁碟時進行辨識。

解決方法

重新啟動 VM,完成移除磁碟的程序。

如要避免這個問題,請使用 Linux 核心版本為下列版本的作業系統,以免發生這個問題:

  • 5.19 以上
  • 6.3 以上版本

您可以在客體作業系統中使用 uname -r 指令,查看 Linux 核心版本。

後續步驟