本文列出使用非揮發性記憶體快取 (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 ...
解決方法:
如要解決這個問題,請提高逾時參數的值。
查看逾時參數的目前值。
- 判斷永久磁碟或本機 SSD 磁碟區使用的 NVMe 控制器。
ls -l /dev/disk/by-id
顯示磁碟的
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
- 判斷永久磁碟或本機 SSD 磁碟區使用的 NVMe 控制器。
如要增加提交至 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.detachDisk
或 gcloud compute instances detach-disk
指令的作業可能無法正常運作。Google Cloud 控制台顯示裝置已移除,運算執行個體的 metadata (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 核心版本。
在具有本機 SSD 的 C3 和 C3D VM 上未建立符號連結
如果將本機 SSD 磁碟連接至 C3 或 C3D VM,您可能需要採取額外步驟,為本機 SSD 磁碟建立符號連結。只有在您使用Google Cloud提供的下列任何公開映像檔時,才需要執行這些步驟:
- SLES 15 SP4 和 SP5
- SLES 12 SP4
這些額外步驟僅適用於本機 SSD 磁碟,您不需要對永久磁碟磁區執行任何操作。
先前列出的公開 Linux 映像檔沒有正確的 udev
設定,無法為連接至 C3 和 C3D VM 的本機 SSD 裝置建立符號連結。自訂映像檔也可能未包含建立本機 SSD 裝置符號連結所需的 udev
規則,這些裝置已連接至 C3 和 C3D VM。
請按照這些操作說明為 SUSE 或自訂映像檔新增 udev
規則。
- 找出 udev 規則目錄。這個值通常是
/lib/udev/rules.d
或/usr/lib/udev/rules.d
。您的圖片可能有不同的udev
規則目錄。 - 在 udev 規則目錄中找出
65-gce-disk-naming.rules
檔案。 如果
65-gce-disk-naming.rules
檔案包含下列程式碼行,表示圖片支援新規則,您可以停止操作:KERNEL=="nvme*n*", ATTRS{model}=="nvme_card[0-9]*",IMPORT{program}="google_nvme_id -d $tempnode"
如果沒有上述行,或檔案
65-gce-disk-naming.rules
不存在,請使用以下網址中的檔案內容取代現有檔案,或建立新檔案:https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules。這個檔案包含更新版的65-gce-disk-naming.rules
檔案內容,包括上一個步驟中的一行,以及 Compute Engine 磁碟命名所需的其他規則。例如:sudo curl -o 65-gce-disk-naming.rules https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules
前往
udev
目錄。在
udev
目錄中找出google_nvme_id
檔案。將下列網址中的內容,替換現有
google_nvme_id
檔案的內容,或建立新檔案:sudo curl -o google_nvme_id https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/google_nvme_id
確認
google_nvme_id
檔案可執行。sudo chmod 755 google_nvme_id
重新啟動 VM。
確認是否已成功建立符號連結。
ls -l /dev/disk/by-id/google-local-nvme-ssd*
輸出內容應列出與已連結至執行個體的本機 SSD 相同數量的連結,且每個連結都應指向不同的
/dev/nvme
裝置路徑。例如:lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-0 -> ../../nvme0n1 lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-1 -> ../../nvme1n1
如要進一步瞭解裝置名稱,請參閱「裝置命名」。
您可以執行
lsblk
,確認/dev/nvme
裝置路徑是本機 SSD 裝置。顯示375G
大小的 NVMe 裝置是本機 SSD 裝置。
後續步驟
- 瞭解永久磁碟。
- 瞭解本機 SSD。
- 設定磁碟以符合效能需求。
- 瞭解符號連結。