Memecahkan masalah disk NVMe


Dokumen ini berisi daftar error yang mungkin Anda alami saat menggunakan disk dengan antarmuka nonvolatil memory Express (NVMe).

Anda dapat menggunakan antarmuka NVMe untuk SSD Lokal dan persistent disk (Persistent Disk atau Google Cloud Hyperdisk). Hanya seri mesin terbaru, seperti Tau T2A, M3, C3, C3D, dan H3 yang menggunakan antarmuka NVMe untuk Persistent Disk. Confidential VMs juga menggunakan NVMe untuk Persistent Disk. Semua seri mesin Compute Engine lainnya menggunakan antarmuka disk SCSI untuk persistent disk.

Error waktu tunggu operasi I/O habis

Jika Anda mengalami error waktu tunggu I/O, latensi dapat melebihi parameter waktu tunggu default untuk operasi I/O yang dikirimkan ke perangkat NVMe.

Pesan error:

[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
...

Resolusi:

Untuk mengatasi masalah ini, tingkatkan nilai parameter waktu tunggu.

  1. Melihat nilai parameter waktu tunggu saat ini.

    1. Menentukan pengontrol NVMe yang digunakan oleh persistent disk atau volume SSD Lokal.
      ls -l /dev/disk/by-id
      
    2. Menampilkan setelan io_timeout, yang ditentukan dalam detik, untuk disk.

      cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
      
      Ganti kode berikut:

      • CONTROLLER_ID: ID pengontrol disk NVMe, misalnya, nvme1
      • NAMESPACE: namespace disk NVMe, misalnya, nvme1n1

      Jika Anda hanya memiliki satu disk yang menggunakan NVMe, gunakan perintah:

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

  2. Jika ingin meningkatkan parameter waktu tunggu untuk operasi I/O yang dikirim ke perangkat NVMe, tambahkan baris berikut ke file /lib/udev/rules.d/65-gce-disk-naming.rules, lalu mulai ulang VM:

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

Disk yang dilepas masih muncul di sistem operasi instance komputasi

Pada VM yang menggunakan kernel Linux versi 6.0 hingga 6.2, operasi yang melibatkan metode Compute Engine API instances.detachDisk atau perintah gcloud compute instances detach-disk mungkin tidak berfungsi seperti yang diharapkan. Konsol Google Cloud menampilkan perangkat sebagai dihapus, metadata instance komputasi (perintah compute disks describe) menampilkan perangkat sebagai dihapus, tetapi titik pemasangan perangkat dan symlink apa pun yang dibuat oleh aturan udev masih terlihat di sistem operasi tamu.

Pesan error:

Mencoba membaca dari disk yang dilepas di VM akan menyebabkan error I/O:

sudo head /dev/nvme0n3

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

Masalah:

Image sistem operasi yang menggunakan kernel Linux 6.0-6.2, tetapi tidak menyertakan backport perbaikan NVMe, tidak dapat mengenali saat disk NVMe dilepas.

Resolusi:

Mulai ulang VM untuk menyelesaikan proses penghapusan disk.

Untuk menghindari masalah ini, gunakan sistem operasi dengan versi kernel Linux yang tidak memiliki masalah ini:

  • 5.19 atau yang lebih baru
  • 6.3 atau yang lebih baru

Anda dapat menggunakan perintah uname -r di OS tamu untuk melihat versi kernel Linux.

Apa langkah selanjutnya?