SSD Nodes Learn 🎉 VPS dari $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-13

Cara Semak Cakera NVMe VPS Linux Anda

Sahkan sama ada storan VPS anda benar-benar NVMe dengan menggunakan lsblk, sysfs, nvme-cli dan ujian latensi fio. Ketahui mengapa virtio sering menyembunyikan jenis cakera sebenar.

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, August 3, 2026.

Sahkan cakera NVMe pada Linux dalam empat langkah

Untuk mengesahkan cakera NVMe pada VPS Linux, jalankan empat pemeriksaan mengikut urutan: lsblk untuk nama peranti, flag rotational dalam sysfs untuk media berputar, nvme list untuk pengawal NVMe sebenar, dan satu larian fio ringkas untuk mendapatkan satu nombor yang tidak boleh dipalsukan oleh hos. Tiga pemeriksaan pertama hanya mengambil masa sesaat setiap satu. Pemeriksaan terakhir akan menyelesaikan persoalan tersebut, kerana pada kebanyakan platform VPS, hypervisor menyembunyikan cakera fizikal daripada tetamu.

NVMe (non-volatile memory express) ialah protokol yang digunakan oleh storan flash melalui lorong PCIe (peripheral component interconnect express). Ia menggantikan laluan SATA dan AHCI yang direka untuk pemacu berputar, dan ia pantas kerana ia menghapuskan kesesakan baris gilir antara CPU dan flash. Di dalam mesin maya, anda jarang sekali menggunakan protokol tersebut. Anda berkomunikasi dengan cakera maya yang dipasang oleh hos untuk anda, jadi nama peranti dalam tetamu anda menerangkan pemacu, bukan media yang berada di dalam rak.

Langkah 1: apakah yang ditunjukkan oleh lsblk?

lsblk membaca senarai peranti blok daripada kernel. Flag -d menyembunyikan partition, supaya anda melihat satu baris bagi setiap cakera.

lsblk -d -o NAME,ROTA,SIZE,TYPE,TRAN,MODEL

VPS KVM biasanya memberikan respons seperti ini:

NAME ROTA  SIZE TYPE TRAN MODEL
vda     0   80G disk

Tiga corak penamaan merangkumi hampir setiap pelayan Linux:

  • nvme0n1 ialah namespace 1 pada pengawal NVMe 0. Tetamu anda memacu peranti NVMe, sama ada sebenar atau diemulasi.
  • sda ialah lapisan SCSI. Cakera SATA dan SAS sebenar berada di sini, begitu juga pemacu virtio-scsi.
  • vda ialah virtio-blk, pemacu blok paravirtual yang digunakan oleh kebanyakan hos KVM secara lalai.

Lajur TRAN (pengangkutan) membaca nvme untuk peranti NVMe dan sata untuk cakera SATA yang boleh dilihat secara terus oleh tetamu. Ia biasanya kosong di bawah virtio-blk, kerana tiada pengangkutan fizikal untuk dilaporkan oleh tetamu. MODEL adalah kosong atas sebab yang sama. Rentetan model yang kosong pada VPS adalah perkara biasa dan tidak memberikan maklumat tentang perkakasan.

Langkah 2: pastikan ia bukan cakera berputar

DISK=$(lsblk -dno NAME,TYPE | awk '$2 == "disk" { print $1; exit }')
echo "checking $DISK"
cat "/sys/block/$DISK/queue/rotational"
readlink -f "/sys/block/$DISK"

Fail rotational menyimpan 1 apabila kernel menganggap peranti tersebut mempunyai piring berputar dan 0 untuk peranti lain. Pada bare metal, nilai ini datang daripada pemacu itu sendiri. Di bawah virtio-blk, nilai ini datang daripada bit ciri yang ditetapkan oleh hos, jadi 0 hanya menolak kemungkinan cakera keras biasa dan tidak membuktikan apa-apa selain itu. Walau bagaimanapun, bacalah nilai tersebut: 1 pada pelan yang dijual sebagai storan solid state adalah satu percanggahan nyata, dan ia merupakan satu tangkapan skrin yang tidak boleh disangkal oleh pihak sokongan.

readlink -f menyelesaikan symlink sysfs dan mencetak bas yang disambungkan kepada peranti tersebut:

/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda

Perkataan virtio dalam laluan tersebut adalah jawapan anda untuk langkah ini. Peranti NVMe memberikan laluan yang mengandungi nvme, seperti /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1, dan cakera ATA yang disambungkan secara terus memberikan laluan yang mengandungi ata1. Ini adalah fakta yang sama yang dicetak oleh lsblk, yang diambil daripada kernel dan bukannya daripada lajur yang diformatkan, yang berguna apabila medan TRAN kosong.

Langkah 3: bertanya kepada nvme-cli dan bas PCI

sudo apt update
sudo apt install -y nvme-cli pciutils
sudo nvme list || echo "nvme-cli found no NVMe device"
lspci | grep -i -e nvme -e 'non-volatile' || echo "no NVMe controller on this guest's PCI bus"

nvme list mencetak satu baris bagi setiap namespace, berserta nombor siri pengawal, rentetan model, dan semakan perisian tegar. Jadual yang kosong bermakna tiada peranti NVMe yang didedahkan kepada tetamu anda. lspci yang tidak mencetak sebarang baris yang sepadan menyatakan perkara yang sama dari sisi yang lain: bas PCI maya yang boleh dilihat oleh tetamu anda tidak membawa sebarang pengawal NVMe. Kedua-dua hasil yang kosong adalah hasil biasa pada VPS virtio, dan tiada satu pun daripadanya merupakan bukti bahawa hos tidak mempunyai pemacu NVMe.

Jika sesuatu namespace muncul, nvme-cli akan pergi lebih jauh. sudo nvme id-ctrl /dev/nvme0 mencetak identiti pengawal, dan sudo nvme smart-log /dev/nvme0n1 mencetak suhu, jam kuasa dihidupkan, dan peratusan ketahanan tulis berkadar yang telah digunakan. Jalankan arahan tersebut hanya apabila nvme list benar-benar menyenaraikan peranti, kerana kedua-dua arahan memerlukan nod /dev/nvme* yang sebenar untuk dibuka.

Mengapa hos NVMe sebenar masih memaparkan /dev/vda

Hypervisor menentukan model peranti yang dilihat oleh tetamu anda, dan pilihan tersebut tidak bergantung pada media di bawahnya. Tiga susunan adalah perkara biasa.

  • virtio-blk atau virtio-scsi melalui fail, logical volume, atau ZFS dataset yang berada pada pemacu NVMe. Anda melihat vda atau sda. Storan tersebut adalah NVMe. Tetamu tidak mempunyai cara untuk mengetahui perkara itu.
  • Pengawal NVMe yang diemulasi di hadapan sebarang storan. Anda melihat nvme0n1 walaupun bait data tersebut disimpan pada tatasusunan SATA atau pada volum rangkaian yang terletak dua rak jauhnya.
  • PCIe passthrough, di mana hos menyerahkan pengawal fizikal kepada satu tetamu. Anda melihat nvme0n1 sebenar dengan rentetan model yang sebenar. Ini jarang berlaku pada pelan VPS kongsi, kerana kad tersebut kemudiannya dikhaskan untuk pelanggan itu sahaja.

Jadi, nama peranti boleh mengelirukan anda dalam kedua-dua arah. Lebih buruk lagi, hos boleh meletakkan write-back cache, lapisan RAID, atau volum rangkaian replikasi antara penulisan anda dan storan flash, dan setiap satunya mengubah prestasi yang anda perolehi tanpa menukar satu nama pun dalam /sys. Itulah sebabnya nama peranti adalah titik permulaan dan bukannya titik akhir pemeriksaan anda. Jika anda masih memilih pelan, perbezaan antara storan NVMe dan SATA SSD menjelaskan nilai sebenar bagi setiap peringkat storan yang patut dibayar.

Ujian yang jujur ialah latensi, jadi ukurlah

fio (flexible I/O tester) mengeluarkan bacaan sebenar terhadap fail sebenar dan melaporkan tempoh masa setiap bacaan tersebut. Bacaan rawak bersaiz kecil merupakan beban kerja yang tepat di sini, kerana ia mendedahkan perjalanan pergi-balik (round trip) ke media dan tidak boleh diservis oleh read-ahead.

Pertama, cipta fail ujian dan buktikan bahawa sistem fail ini menerima I/O tanpa penimbal (unbuffered). --direct=1 membuka fail dengan O_DIRECT, yang memintas cache halaman. Tanpanya, anda hanya mengukur RAM anda sendiri dan mendapat angka yang tidak mungkin dihasilkan oleh mana-mana cakera.

sudo apt install -y fio
fio --name=prep --filename=/var/tmp/nvme-check.tmp --size=256M --bs=1M --rw=write --direct=1 --end_fsync=1 > /dev/null \
  && echo "unbuffered writes work here, the timing test is valid" \
  || echo "this filesystem refuses direct=1, so the timing test below will not run"

Jika arahan tersebut mencetak penolakan, laluan yang anda pilih terletak pada sistem fail yang tidak menyokong O_DIRECT. Sistem fail overlay kontena dan beberapa sistem fail rangkaian berkelakuan begini. Pilih direktori pada sistem fail root VPS dan cuba lagi. Jika ia mencetak kejayaan, jalankan pengukuran:

fio --name=randread4k --filename=/var/tmp/nvme-check.tmp --bs=4k --rw=randread \
  --direct=1 --iodepth=1 --numjobs=1 --runtime=20 --time_based --group_reporting \
  || echo "fio stopped early, read its first line for the reason"
rm -f /var/tmp/nvme-check.tmp

Jalanan ini dihadkan dengan sengaja: satu kerja, kedalaman baris gilir (queue depth) 1, dua puluh saat, 256 MB data. Ia tidak akan memenuhi cakera anda dan tidak akan menyebabkan anda ditandakan kerana penyalahgunaan. Kedalaman baris gilir 1 juga merupakan tetapan yang jujur untuk soalan ini, kerana baris gilir yang dalam membolehkan peranti yang perlahan bersembunyi di sebalik selari (parallelism) sementara latensi kekal tinggi.

Membaca output fio

Dua baris adalah penting. Baris ringkasan kelihatan seperti read: IOPS=9012, BW=35.2MiB/s, dan di bawahnya fio mencetak blok clat. clat ialah kependaman penyiapan (completion latency): masa antara fio menghantar bacaan dan kernel menyerahkan data kembali. Baca nilai avg, kemudian baca persentil 99.00th dalam senarai clat percentiles. Nilai purata memberitahu anda kelas storan. Persentil ke-99 memberitahu anda kekerapan jiran pada hos yang sama menyebabkan anda menunggu.

Fio mencetak kependaman dalam mikrosaat apabila nilai adalah kecil dan bertukar kepada milisaat apabila nilai tersebut besar. Semak unit dalam baris sebelum anda membandingkan apa-apa.

Apakah angka yang membezakan kelas NVMe daripada kelas SATA

Angka di bawah adalah nilai tipikal yang diterbitkan untuk bacaan rawak 4k satu tugas pada queue depth 1, yang dikumpul daripada dokumentasi vendor dan penanda aras komuniti setakat Ogos 2026. Ia merupakan julat untuk perbandingan, bukan ukuran daripada pelayan anda.

ChartTypical 4k random read latency at queue depth 1, by storage class
The data behind this chart
[
  {
    "label": "Local NVMe",
    "avg_latency_us": 110
  },
  {
    "label": "Local SATA SSD",
    "avg_latency_us": 320
  },
  {
    "label": "Network block storage",
    "avg_latency_us": 900
  }
]
ChartTypical 4k random read IOPS at queue depth 1, by storage class
The data behind this chart
[
  {
    "label": "Local NVMe",
    "iops": "9,000"
  },
  {
    "label": "Local SATA SSD",
    "iops": "3,100"
  },
  {
    "label": "Network block storage",
    "iops": "1,100"
  }
]

Satu volum NVMe tempatan menjawab satu bacaan rawak 4k dalam kira-kira 110 mikrosaat dan mencapai kira-kira 9,000 IOPS pada queue depth 1. SSD SATA tempatan berada sekitar 320 mikrosaat dan 3,100 IOPS. Storan blok yang disambungkan melalui rangkaian berada sekitar 900 mikrosaat dan 1,100 IOPS, kerana setiap bacaan perlu melalui satu hop rangkaian sebelum sebarang storan kilat disentuh.

Pada queue depth 1, kedua-dua lajur tersebut adalah fakta yang sama yang dinyatakan dua kali: satu bacaan pada satu masa bermakna throughput hanyalah satu dibahagikan dengan latency. Jika purata anda lebih hampir kepada 110 berbanding 320 mikrosaat, anda menggunakan storan kelas NVMe tidak kira apa yang diputuskan oleh lsblk untuk menamakan peranti tersebut. Jika ia lebih hampir kepada 900 mikrosaat, sesuatu yang lebih perlahan daripada storan kilat tempatan berada dalam laluan tersebut, dan perkataan NVMe pada halaman pesanan hanya menerangkan pemacu hos dan bukannya volum anda.

Jalankan lebih daripada sekali sebelum anda membuat aduan

Satu larian hanyalah sampel, bukan keputusan. VPS berkongsi cakera, jadi jiran yang sibuk boleh menggandakan kependaman anda selama sepuluh minit sebelum hilang. Sesetengah platform juga memberikan kredit lonjakan (burst credits) yang menjadikan minit-minit pertama mana-mana ujian kelihatan cemerlang. Jalankan arahan yang sama sebanyak tiga atau empat kali pada waktu yang berbeza dalam sehari dan bandingkan keputusan yang paling buruk, bukan yang terbaik. Satu larian yang buruk hanyalah gangguan sementara. Satu corak adalah kerosakan yang wajar dilaporkan melalui tiket sokongan, dan tiket tersebut akan lebih berkesan jika disertakan dengan tiga output fio yang mempunyai cap masa. Untuk gambaran lebih luas yang merangkumi CPU dan rangkaian selain cakera, larian penanda aras VPS penuh menggunakan disiplin yang sama pada subsistem lain.

Apa yang perlu dilakukan dengan jawapan tersebut

Jika latensi berada dalam julat NVMe, jangan risau tentang nama peranti dan teruskan kerja anda. vda bukanlah satu penurunan taraf. Ia merupakan pemacu cakera maya terpantas yang ditawarkan oleh kebanyakan hos, dan itulah yang anda perlukan.

Jika latensi berada dalam julat storan rangkaian pada pelan yang dijual sebagai NVMe tempatan, anda mempunyai tuntutan yang khusus dan boleh diulang: arahan fio yang tepat, purata latensi penyelesaian, dan waktu anda menjalankannya. Itu adalah perkara untuk tiket sokongan, bukannya hujah di forum. Sebelum anda menghantarnya, pastikan cakera tersebut tidak penuh atau mengalami fragmentasi yang teruk, dan pastikan tiada apa-apa pada pelayan yang sedang melakukan penulisan berat semasa anda membuat ujian.

Jalankan pemeriksaan ini pada hari anda melakukan peruntukan, bukan pada hari anda merasakan sesuatu menjadi perlahan, supaya anda mempunyai garis dasar untuk perbandingan kemudian. Ia sesuai diletakkan dalam sepuluh minit pertama pada VPS baharu, bersebelahan dengan penyediaan firewall dan kunci SSH. Jika perbezaan antara peringkat storan masih kabur, apa yang sebenarnya diberikan oleh SSD VPS kepada anda merangkumi asas bagi topik ini.

FAQ

Mengapa lsblk memaparkan /dev/vda sedangkan hos saya mengiklankan NVMe?

Kerana vda menamakan pemacu virtio-blk dalam tetamu anda, bukan perkakasan pada hos. Hipervisor KVM mempersembahkan peranti blok paravirtual yang disokong oleh fail, volum logikal atau dataset, dan storan sokongan tersebut boleh berada pada pemacu NVMe tanpa diketahui oleh tetamu. Nama tersebut menerangkan lapisan virtualisasi. Hanya ukuran kependaman (latency) yang menerangkan media tersebut.

Adakah rotational 0 membuktikan saya mempunyai cakera NVMe?

Tidak. /sys/block/<dev>/queue/rotational yang memegang nilai 0 bermakna kernel tidak menganggap peranti tersebut mempunyai piring berputar, dan di bawah virtio, nilai itu ditetapkan oleh bit ciri yang dipilih oleh hos. Ia menolak kemungkinan cakera keras biasa. Ia tidak dapat membezakan NVMe daripada SATA SSD, dan tidak dapat membezakan storan kilat tempatan daripada volum rangkaian. 1 masih perlu diberi perhatian, kerana ia bercanggah dengan sebarang pelan yang dijual sebagai storan solid state.

Mengapa nvme list kosong pada VPS saya?

Kerana tiada pengawal NVMe didedahkan kepada tetamu anda. nvme list dan lspci kedua-duanya membaca apa yang boleh dilihat oleh mesin maya, dan cakera virtio-blk atau virtio-scsi tidak mempersembahkan pengawal NVMe untuk disenaraikan. Jadual yang kosong adalah hasil biasa pada kebanyakan pelan VPS dan bukan bukti bahawa hos tidak mempunyai pemacu NVMe. Pasang nvme-cli dengan sudo apt install -y nvme-cli dan jangkakan jadual kosong melainkan pengawal telah dilalukan (passed through).

Apakah hasil fio yang dikira sebagai storan kelas NVMe?

Pada kedalaman baris gilir (queue depth) 1 dengan bacaan rawak 4k dan --direct=1, purata kependaman penyiapan sekitar 110 mikrosaat adalah kelas NVMe, dan kira-kira 9,000 IOPS terhasil daripadanya. Sekitar 320 mikrosaat menunjukkan SATA SSD, dan sekitar 900 mikrosaat menunjukkan storan yang disambungkan melalui rangkaian, di mana setiap bacaan merentasi satu hop rangkaian. Itu adalah jalur yang biasa diterbitkan untuk Ogos 2026, jadi bandingkan magnitudnya dan bukannya angka tepat, serta ulangi ujian pada waktu yang berbeza sebelum membuat kesimpulan.