SSD Nodes Learn 🎉 VPS $4.99/माह से
गाइड Matt Connorलेखक: Matt Connor

Linux पर VPS disk सच में NVMe है या नहीं जाँचें

Host के NVMe दावे को guest के अंदर जाँचें: lsblk, sysfs, nvme-cli और सीमित fio latency run चलाकर जानें कि virtio disk को कैसे छिपाता है।

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

Linux पर NVMe disk को चार चरणों में verify करें

Linux VPS पर NVMe disk को verify करने के लिए चार checks क्रम से चलाएँ: device name के लिए lsblk, spinning media की जाँच के लिए sysfs में rotational flag, वास्तविक NVMe controller की पहचान के लिए nvme list, और उस एक संख्या के लिए छोटा fio run, जिसे host छिपा नहीं सकता। पहले तीन checks में एक-एक second लगता है। अंतिम check से प्रश्न का निश्चित उत्तर मिल जाता है, क्योंकि अधिकांश VPS platforms पर hypervisor physical disk को guest से छिपा देता है।

NVMe (non-volatile memory express) वह protocol है, जिसे flash storage PCIe (peripheral component interconnect express) lanes पर उपयोग करता है। इसने SATA और AHCI path का स्थान लिया, जिसे spinning drives के लिए बनाया गया था। यह तेज है, क्योंकि CPU और flash के बीच queueing bottleneck हट जाता है। Virtual machine के अंदर आप आम तौर पर उस protocol से सीधे बात नहीं करते। आप उस virtual disk से बात करते हैं, जिसे host आपके लिए assemble करता है। इसलिए आपके guest में device name rack में मौजूद media को नहीं, बल्कि driver को दर्शाता है।

चरण 1: lsblk क्या दिखाता है?

lsblk kernel की block devices सूची पढ़ता है। -d flag partitions को छिपाता है, इसलिए प्रत्येक disk के लिए एक line दिखाई देती है।

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

KVM VPS आम तौर पर इस तरह response देता है:

NAME ROTA  SIZE TYPE TRAN MODEL
vda     0   80G disk

लगभग हर Linux server के लिए naming patterns ये तीन हैं:

  • nvme0n1, NVMe controller 0 पर namespace 1 है। आपका guest वास्तविक या emulated NVMe device चला रहा है।
  • sda, SCSI layer है। वास्तविक SATA और SAS disks यहां दिखाई देती हैं, और virtio-scsi driver भी इसी layer का उपयोग करता है।
  • vda, virtio-blk है। यह paravirtual block driver है, जिसे अधिकांश KVM hosts default रूप से उपयोग करते हैं।

TRAN (transport) column, NVMe device के लिए nvme और उस SATA disk के लिए sata दिखाता है जिसे guest सीधे देख सकता है। virtio-blk के अंतर्गत यह आम तौर पर blank रहता है, क्योंकि guest के लिए report करने योग्य कोई physical transport नहीं होता। इसी कारण MODEL भी blank रहता है। VPS पर empty model string सामान्य है और इससे hardware के बारे में कोई जानकारी नहीं मिलती।

चरण 2: spinning disk की संभावना समाप्त करें

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"

rotational फ़ाइल में 1 होता है, जब kernel को लगता है कि device में घूमने वाली platters हैं, और अन्य सभी devices के लिए 0 होता है। Bare metal पर यह value drive से आती है। virtio-blk के अंतर्गत यह host द्वारा set किए गए feature bit से आती है। इसलिए 0 केवल यह साबित करता है कि device साधारण hard drive नहीं है; इससे आगे कुछ सिद्ध नहीं होता। फिर भी इसे पढ़ें: solid state storage के रूप में बेची गई plan पर 1 स्पष्ट विरोधाभास है। यह ऐसा screenshot है, जिस पर support कोई तर्क नहीं दे सकता।

readlink -f sysfs symlink को resolve करता है और वह bus दिखाता है, जिससे device जुड़ा है:

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

इस path में virtio शब्द इस चरण का उत्तर है। NVMe device के path में nvme होता है, जैसे /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1। सीधे जुड़े ATA disk के path में ata1 होता है। यही तथ्य lsblk ने print किया था, लेकिन यहाँ यह formatted column के बजाय kernel से लिया गया है। यह तब उपयोगी है, जब TRAN field खाली हो।

चरण 3: nvme-cli और PCI bus से जानकारी लें

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 प्रत्येक namespace के लिए एक पंक्ति प्रिंट करता है। इसमें controller का serial number, model string और firmware revision शामिल होते हैं। खाली table का अर्थ है कि आपके guest को कोई NVMe device expose नहीं किया गया है। lspci का कोई matching line प्रिंट न करना भी यही बात दूसरे तरीके से बताता है: आपके guest को दिखाई देने वाले virtual PCI bus पर कोई NVMe controller मौजूद नहीं है। virtio VPS पर दोनों परिणाम खाली मिलना सामान्य है। इनमें से किसी भी परिणाम से यह सिद्ध नहीं होता कि host पर कोई NVMe drive नहीं है।

यदि कोई namespace दिखाई देता है, तो nvme-cli अधिक जानकारी दे सकता है। sudo nvme id-ctrl /dev/nvme0 controller की पहचान प्रिंट करता है, जबकि sudo nvme smart-log /dev/nvme0n1 temperature, power-on hours और rated write endurance में उपयोग किए गए प्रतिशत को प्रिंट करता है। इन्हें केवल तब चलाएँ जब nvme list ने वास्तव में कोई device सूचीबद्ध किया हो, क्योंकि दोनों commands को खोलने के लिए वास्तविक /dev/nvme* node आवश्यक होता है।

वास्तव में NVMe host होने पर भी /dev/vda क्यों दिखाई देता है

Hypervisor यह तय करता है कि आपके guest को कौन-सा device model दिखाई देगा। यह चुनाव underlying storage media से स्वतंत्र होता है। आम तौर पर 3 व्यवस्थाएँ होती हैं।

  • किसी file, logical volume या NVMe drives पर मौजूद ZFS dataset के ऊपर virtio-blk या virtio-scsi। आपको vda या sda दिखाई देता है। Storage NVMe है, लेकिन guest के पास यह जानने का कोई तरीका नहीं होता।
  • किसी भी प्रकार के storage के सामने emulated NVMe controller। आपको nvme0n1 दिखाई देता है, भले ही data SATA array या दो racks दूर स्थित network volume पर लिखा जा रहा हो।
  • PCIe passthrough, जिसमें host किसी physical controller को एक guest को सौंप देता है। आपको वास्तविक model string के साथ वास्तविक nvme0n1 दिखाई देता है। Shared VPS plans में यह व्यवस्था दुर्लभ है, क्योंकि तब card केवल एक customer के लिए dedicated होता है।

इसलिए device name आपको दोनों दिशाओं में भ्रमित कर सकता है। इससे भी महत्वपूर्ण बात यह है कि host आपके writes और flash के बीच write-back cache, RAID layer या replicated network volume रख सकता है। इनमें से प्रत्येक, /sys में एक भी name बदले बिना, आपको मिलने वाले performance को बदल देता है। इसलिए device name से जाँच शुरू करें, लेकिन वहीं समाप्त न करें। यदि आप अभी plan चुन रहे हैं, तो NVMe और SATA SSD storage के बीच का अंतर बताता है कि प्रत्येक tier के लिए वास्तव में भुगतान करना कितना उचित है।

ईमानदार परीक्षण latency है, इसलिए इसे मापें

fio (flexible I/O tester) किसी वास्तविक file से वास्तविक reads करता है और बताता है कि प्रत्येक read में कितना समय लगा। यहाँ छोटे random reads सही workload हैं, क्योंकि वे media तक के round trip को उजागर करते हैं और read-ahead से serve नहीं किए जा सकते।

पहले test file बनाएँ और सुनिश्चित करें कि यह filesystem unbuffered I/O स्वीकार करता है। --direct=1 file को O_DIRECT के साथ खोलता है, जिससे page cache bypass हो जाता है। इसके बिना आप अपनी RAM को मापेंगे और ऐसे numbers मिलेंगे जिन्हें कोई disk उत्पन्न नहीं कर सकती।

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"

यदि इसने refusal message प्रदर्शित किया, तो चुना गया path ऐसे filesystem पर है जिसमें O_DIRECT support नहीं है। Container overlay filesystems और कुछ network filesystems इसी तरह काम करते हैं। VPS के root filesystem पर किसी directory का चयन करें और फिर प्रयास करें। यदि इसने success प्रदर्शित किया, तो measurement चलाएँ:

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

यह run जानबूझकर सीमित है: एक job, queue depth 1, बीस seconds और 256 MB data। इससे disk भर नहीं जाएगी और abuse के लिए आपका account flag नहीं होगा। इस प्रश्न के लिए queue depth 1 ही ईमानदार setting है, क्योंकि deep queues parallelism के पीछे धीमे device को छिपा सकती हैं, जबकि latency अधिक बनी रहती है।

fio output पढ़ना

दो पंक्तियाँ महत्वपूर्ण हैं। Summary line read: IOPS=9012, BW=35.2MiB/s जैसी दिखती है, और इसके नीचे fio एक clat block प्रिंट करता है। clat completion latency है: fio द्वारा read submit करने और kernel द्वारा data वापस देने के बीच का समय। avg value पढ़ें, फिर clat percentiles list में 99.00th percentile देखें। Average आपको storage class बताता है। 99th percentile बताता है कि उसी host पर कोई पड़ोसी आपको कितनी बार प्रतीक्षा करने पर मजबूर करता है।

Fio छोटी values के लिए latency को microseconds में प्रिंट करता है और बड़ी values के लिए milliseconds में बदल देता है। किसी भी तुलना से पहले line में दी गई unit जाँचें।

कौन-से numbers NVMe class और SATA class को अलग करते हैं

नीचे दिए गए आंकड़े queue depth 1 पर single-job 4k random reads के लिए सामान्य प्रकाशित values हैं। इन्हें August 2026 तक vendor documentation और community benchmarks से एकत्र किया गया है। ये तुलना के लिए ranges हैं, आपके server से लिए गए measurements नहीं।

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"
  }
]

एक local NVMe volume एक 4k random read का उत्तर लगभग 110 microseconds में देता है और queue depth 1 पर लगभग 9,000 IOPS तक पहुँचता है। एक local SATA SSD लगभग 320 microseconds और 3,100 IOPS पर रहता है। Network attached block storage लगभग 900 microseconds और 1,100 IOPS तक पहुँचता है, क्योंकि flash तक पहुँचने से पहले हर read को network hop से गुजरना पड़ता है।

Queue depth 1 पर ये दोनों columns एक ही fact को दो बार बताते हैं: एक समय में एक read होने पर throughput, latency के एक से विभाजन के बराबर होता है। यदि आपका average 110 के अधिक निकट है, न कि 320 microseconds के, तो आप NVMe class storage पर हैं, चाहे lsblk ने device को कोई भी नाम दिया हो। यदि यह 900 microseconds के अधिक निकट है, तो path में local flash से धीमा कुछ मौजूद है। Order page पर NVMe शब्द आपके volume के बजाय host की drives का वर्णन कर रहा है।

शिकायत करने से पहले इसे एक से अधिक बार चलाएँ

एक बार चलाना केवल एक नमूना है, परिणाम नहीं। VPS अपने disks साझा करता है, इसलिए व्यस्त पड़ोसी दस मिनट के लिए आपकी latency दोगुनी कर सकता है और फिर सामान्य हो सकता है। कुछ platforms burst credits भी देते हैं, जिससे किसी भी test के शुरुआती मिनट बहुत अच्छे दिख सकते हैं। उसी command को दिन के अलग-अलग समय में तीन या चार बार चलाएँ और सबसे अच्छे परिणाम के बजाय सबसे खराब परिणाम की तुलना करें। एक खराब run केवल अस्थायी स्थिति हो सकता है। बार-बार दिखने वाला pattern ऐसी समस्या है जिसके लिए support ticket बनाना उचित है। तीन timestamp वाले fio outputs संलग्न करने पर ticket अधिक प्रभावी रहेगा। CPU और network के साथ disk का व्यापक आकलन करने के लिए पूर्ण VPS benchmark run अन्य subsystems पर भी यही प्रक्रिया अपनाता है।

उत्तर के साथ क्या करें

यदि latency NVMe श्रेणी में है, तो device name की चिंता करना बंद करें और आगे बढ़ें। vda downgrade नहीं है। यह अधिकांश hosts द्वारा उपलब्ध कराया जाने वाला सबसे तेज virtual disk driver है, और आपको यही चाहिए।

यदि local NVMe के रूप में बेचे गए plan पर latency network storage श्रेणी में है, तो आपके पास एक स्पष्ट और दोहराए जा सकने वाला दावा है: सटीक fio command, average completion latency और वे समय जब आपने इसे चलाया था। यह forum argument नहीं, बल्कि support ticket का विषय है। इसे भेजने से पहले पुष्टि करें कि disk केवल full या अत्यधिक fragmented नहीं है। यह भी पुष्टि करें कि test के दौरान box पर कोई process लगातार भारी write नहीं कर रहा है।

यह check provisioning वाले दिन चलाएँ, उस दिन नहीं जब कुछ slow महसूस हो, ताकि बाद में तुलना करने के लिए आपके पास baseline हो। यह नए VPS पर पहले दस मिनट के काम में स्वाभाविक रूप से शामिल है, firewall और SSH keys सेट करने के साथ। यदि storage tiers के बीच का अंतर अभी भी स्पष्ट नहीं है, तो SSD VPS वास्तव में आपको क्या देता है इस विषय की आधारभूत जानकारी देता है।

FAQ

lsblk मेरे host द्वारा NVMe बताए जाने पर /dev/vda क्यों दिखाता है?

क्योंकि vda आपके guest में virtio-blk driver का नाम बताता है, host के hardware का नहीं। KVM hypervisor file, logical volume या dataset से समर्थित paravirtual block device प्रस्तुत करता है। यह backing store NVMe drives पर हो सकता है, जबकि guest को इसकी जानकारी कभी नहीं मिलती। यह नाम virtualisation layer को दर्शाता है। Media का विवरण केवल latency measurement से मिलता है।

क्या rotational 0 से यह सिद्ध होता है कि मेरे पास NVMe disk है?

नहीं। /sys/block/<dev>/queue/rotational में 0 होने का अर्थ है कि kernel को device में spinning platters नहीं दिखते। virtio के अंतर्गत यह मान host द्वारा चुने गए feature bit से सेट होता है। इससे सामान्य hard drive की संभावना समाप्त होती है। लेकिन इससे NVMe और SATA SSD में अंतर नहीं पता चलता। यह local flash और network volume में भी अंतर नहीं बता सकता। फिर भी 1 पर कार्रवाई करना उचित है, क्योंकि यह solid state storage के रूप में बेचे गए किसी भी plan से असंगत है।

मेरे VPS में nvme list खाली क्यों है?

क्योंकि आपके guest को कोई NVMe controller expose नहीं किया गया है। nvme list और lspci दोनों वही पढ़ते हैं जो virtual machine को दिखाई देता है। virtio-blk या virtio-scsi disk enumerate करने के लिए कोई NVMe controller प्रस्तुत नहीं करती। अधिकांश VPS plans पर खाली table सामान्य परिणाम है। इससे यह सिद्ध नहीं होता कि host में NVMe drives नहीं हैं। sudo apt install -y nvme-cli से nvme-cli install करें। यदि कोई controller pass through नहीं किया गया है, तो खाली table की अपेक्षा रखें।

कौन-सा fio result NVMe class storage माना जाता है?

Queue depth 1 पर 4k random reads और --direct=1 के साथ average completion latency लगभग 110 microseconds हो, तो यह NVMe class है। इससे लगभग 9,000 IOPS प्राप्त होते हैं। लगभग 320 microseconds SATA SSD का संकेत देता है। लगभग 900 microseconds network attached storage का संकेत देता है, जहाँ प्रत्येक read network hop पार करता है। ये August 2026 के लिए प्रकाशित typical bands हैं। इसलिए exact figures के बजाय orders of magnitude की तुलना करें। निष्कर्ष निकालने से पहले अलग-अलग hours में run दोहराएँ।