SSD Nodes Learn 🎉 VPS $5.50/महिन्यापासून
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-08-13

Linux VPS वर डिस्क खरोखर NVMe आहे का तपासा

Host ने NVMe म्हटले तरी guest मध्ये lsblk, sysfs, nvme-cli आणि मर्यादित fio latency run वापरून तपासा. virtio मुळे physical disk का लपतो ते समजून घ्या.

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

Linux वर NVMe डिस्क 4 चरणांत पडताळा

Linux VPS वर NVMe डिस्क पडताळण्यासाठी पुढील 4 तपासण्या क्रमाने करा: डिव्हाइसचे नाव शोधण्यासाठी lsblk, sysfs मधील फिरणाऱ्या माध्यमांसाठीचा rotational flag, वास्तविक NVMe controller आहे का हे तपासण्यासाठी nvme list आणि host लपवू शकत नाही असा एकमेव आकडा मिळवण्यासाठी थोडक्यात fio चालवा. पहिल्या 3 तपासण्यांना प्रत्येकी एक सेकंद लागतो. शेवटची तपासणी निर्णायक ठरते, कारण बहुतेक VPS platform वर hypervisor guest पासून physical disk लपवतो.

NVMe (non-volatile memory express) हा PCIe (peripheral component interconnect express) lanes वर flash storage वापरत असलेला protocol आहे. फिरणाऱ्या drives साठी तयार केलेल्या SATA आणि AHCI मार्गाची जागा त्याने घेतली. CPU आणि flash यांच्यातील queueing bottleneck दूर केल्यामुळे तो वेगवान आहे. Virtual machine मध्ये हा protocol थेट वापरण्याची शक्यता फार कमी असते. तुम्ही host ने तुमच्यासाठी तयार केलेल्या virtual disk शी संवाद साधता. त्यामुळे guest मधील device name rack मधील media नव्हे, तर driver दर्शवते.

पायरी 1: lsblk काय दाखवते?

lsblk कर्नलमधील block devices ची यादी वाचते. -d flag मुळे partitions लपवले जातात. त्यामुळे प्रत्येक disk साठी एक ओळ दिसते.

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

KVM VPS चा output सामान्यतः असा दिसतो:

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 देखील येथेच दिसतो.
  • vda हा virtio-blk आहे. बहुतेक KVM hosts default म्हणून वापरत असलेला हा paravirtual block driver आहे.

TRAN (transport) column मध्ये NVMe device साठी nvme आणि guest ला थेट दिसणाऱ्या SATA disk साठी sata दिसते. virtio-blk अंतर्गत हा column सहसा रिकामा असतो, कारण guest कडे report करण्यासाठी कोणताही physical transport नसतो. त्याच कारणामुळे MODEL देखील रिकामा असतो. VPS वर model string रिकामी असणे सामान्य आहे. त्यावरून hardware विषयी कोणतीही माहिती मिळत नाही.

पायरी 2: फिरणारी डिस्क असल्याची शक्यता नाकारा

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 असते. इतर सर्व डिव्हाइससाठी त्यात 0 असते. Bare metal वर ही किंमत drive कडून मिळते. virtio-blk अंतर्गत ती host ने सेट केलेल्या feature bit मधून मिळते. त्यामुळे 0 मुळे साधी hard drive नसल्याचे स्पष्ट होते; मात्र त्यापलीकडे काहीही सिद्ध होत नाही. तरीही ते वाचा. Solid state storage म्हणून विकल्या जाणाऱ्या plan वर 1 दिसणे हा थेट विरोधाभास आहे. Support त्याविरुद्ध युक्तिवाद करू शकत नाही असा हा एकमेव screenshot आहे.

readlink -f sysfs symlink चे निराकरण करते आणि device ज्या bus शी जोडलेले आहे ती दाखवते:

/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 ने दाखवली होती. मात्र ती 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 उपलब्ध करून दिलेले नाही. lspci ला कोणतीही जुळणारी ओळ न मिळणे हेच दुसऱ्या बाजूने दर्शवते: तुमच्या guest ला दिसणाऱ्या virtual PCI bus वर कोणताही NVMe controller नाही. virtio VPS वर दोन्ही परिणाम रिकामे मिळणे सामान्य आहे. यावरून host वर NVMe drives नाहीत, असा निष्कर्ष काढता येत नाही.

एखादा namespace दिसल्यास nvme-cli पुढील माहितीही देते. sudo nvme id-ctrl /dev/nvme0 controller identity दाखवते. sudo nvme smart-log /dev/nvme0n1 temperature, power-on hours आणि rated write endurance पैकी किती टक्के वापरली आहे ते दाखवते. nvme list ने प्रत्यक्षात device दाखवले असेल तेव्हाच ही commands चालवा. दोन्ही commands ना उघडण्यासाठी वास्तविक /dev/nvme* node आवश्यक असते.

खरोखर NVMe असलेला host अजूनही /dev/vda का दाखवतो

तुमच्या guest ला कोणता device model दिसेल हे hypervisor ठरवतो. हे underlying media पासून स्वतंत्र असते. साधारणपणे तीन रचना आढळतात.

  • NVMe drives वर असलेल्या file, logical volume किंवा ZFS dataset वर virtio-blk किंवा virtio-scsi वापरलेले असते. तुम्हाला vda किंवा sda दिसते. Storage NVMe असते. Guest ला ही माहिती मिळवण्याचा कोणताही मार्ग नसतो.
  • कोणत्याही storage च्या पुढे emulated NVMe controller असतो. Bytes SATA array वर किंवा दोन racks दूर असलेल्या network volume वर लिहिले जात असले, तरी तुम्हाला nvme0n1 दिसते.
  • PCIe passthrough मध्ये host एक physical controller एका guest कडे सोपवतो. तुम्हाला खरा nvme0n1 आणि त्याचा खरा model string दिसतो. Shared VPS plans मध्ये हे क्वचितच असते, कारण तो card त्या एकाच customer साठी राखीव ठेवावा लागतो.

म्हणून device name दोन्ही दिशांनी दिशाभूल करू शकते. त्याहून महत्त्वाचे म्हणजे host तुमच्या writes आणि flash यांच्या मध्ये write-back cache, RAID layer किंवा replicated network volume ठेवू शकतो. यापैकी प्रत्येकामुळे /sys मधील एकही name न बदलता तुम्हाला मिळणारी performance बदलते. म्हणून name हा तपास सुरू करण्याचा बिंदू आहे; अंतिम निष्कर्षाचा नाही. तुम्ही अजून plan निवडत असाल, तर NVMe आणि SATA SSD storage मधील फरक प्रत्येक tier साठी प्रत्यक्षात किती पैसे देणे योग्य आहे हे स्पष्ट करतो.

प्रामाणिक चाचणी म्हणजे latency. त्यामुळे तिचे मोजमाप करा.

fio (flexible I/O tester) प्रत्यक्ष फाइलवर प्रत्यक्ष read operations चालवते आणि प्रत्येक operation पूर्ण होण्यासाठी लागलेला वेळ दाखवते. येथे लहान random reads हे योग्य workload आहे. त्यामुळे media पर्यंतचा round trip time स्पष्ट दिसतो आणि read-ahead मुळे तो लपवला जात नाही.

प्रथम test file तयार करा आणि हे filesystem unbuffered I/O स्वीकारते याची खात्री करा. --direct=1 फाइल O_DIRECT सह उघडते. त्यामुळे page cache bypass होतो. हा पर्याय न वापरल्यास तुम्ही disk ऐवजी तुमच्या RAM चे मोजमाप कराल आणि कोणताही 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 दाखवला, तर तुम्ही निवडलेला path O_DIRECT support नसलेल्या filesystem वर आहे. 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, वीस सेकंद आणि 256 MB data. त्यामुळे तुमची disk भरून जाणार नाही आणि abuse मुळे तुमचे खाते flag होणार नाही. या प्रश्नासाठी queue depth 1 हीच योग्य setting आहे. जास्त queue depth मुळे parallelism च्या आड slow device लपतो, पण latency जास्तच राहते.

fio आउटपुट वाचणे

दोन ओळी महत्त्वाच्या आहेत. सारांशाची ओळ read: IOPS=9012, BW=35.2MiB/s अशी दिसते आणि तिच्याखाली fio एक clat ब्लॉक छापते. clat म्हणजे completion latency: fio ने read submit केल्यापासून kernel ने data परत देईपर्यंतचा कालावधी. avg मूल्य वाचा. त्यानंतर clat percentiles यादीतील 99.00th percentile वाचा. सरासरीवरून storage class समजतो. 99th percentile वरून त्याच host वरील दुसरा वापरकर्ता तुम्हाला किती वेळा प्रतीक्षा करायला लावतो हे समजते.

मूल्ये लहान असतील तेव्हा fio latency microseconds मध्ये दाखवते. मूल्ये मोठी असतील तेव्हा ते milliseconds मध्ये बदलते. कोणतीही तुलना करण्यापूर्वी त्या ओळीतील unit तपासा.

NVMe श्रेणी आणि SATA श्रेणी वेगळी करणारे आकडे

खालील आकडे queue depth 1 वर single-job 4k random reads साठी सामान्यतः प्रकाशित केलेली मूल्ये आहेत. ही मूल्ये August 2026 पर्यंत vendor documentation आणि community benchmarks मधून संकलित केली आहेत. हे तुमच्या सर्व्हरवरील मोजमाप नसून तुलना करण्यासाठीच्या श्रेणी आहेत.

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

स्थानिक NVMe volume एका 4k random read ला साधारण 110 microseconds मध्ये प्रतिसाद देतो आणि queue depth 1 वर सुमारे 9,000 IOPS गाठतो. स्थानिक SATA SSD ची latency सुमारे 320 microseconds आणि कामगिरी 3,100 IOPS च्या आसपास असते. Network attached block storage ची latency साधारण 900 microseconds आणि कामगिरी 1,100 IOPS असते, कारण प्रत्येक read flash पर्यंत पोहोचण्यापूर्वी network hop मधून जाते.

queue depth 1 वर हे दोन columns एकच तथ्य दोन प्रकारे दर्शवतात: एका वेळी एकच read होत असल्यामुळे throughput म्हणजे latency च्या व्यस्त प्रमाणाइतका असतो. तुमची average latency 110 microseconds च्या तुलनेत 320 microseconds च्या अधिक जवळ असल्यास, lsblk ने device ला कोणतेही नाव दिले असले तरी तुमचे storage NVMe class मधील आहे. ती 900 microseconds च्या अधिक जवळ असल्यास, path मध्ये local flash पेक्षा धीमे काहीतरी आहे. अशा वेळी order page वरील NVMe हा शब्द तुमच्या volume ऐवजी host वरील drives चे वर्णन करतो.

तक्रार करण्यापूर्वी ते एकापेक्षा जास्त वेळा चालवा

एकदा चालवलेली चाचणी हा नमुना असतो; तो अंतिम निकाल नसतो. VPS मध्ये डिस्क सामायिक असतात. त्यामुळे शेजारच्या VPS वरील जास्त भारामुळे तुमची latency दहा मिनिटांसाठी दुप्पट होऊ शकते आणि नंतर पुन्हा सामान्य होऊ शकते. काही platforms burst credits देखील देतात. त्यामुळे कोणत्याही चाचणीच्या सुरुवातीच्या काही मिनिटांचे निकाल उत्कृष्ट दिसू शकतात. तोच command दिवसातील वेगवेगळ्या वेळांमध्ये तीन किंवा चार वेळा चालवा. सर्वोत्तम निकालाऐवजी सर्वात खराब निकालांची तुलना करा. एकच खराब run म्हणजे तात्पुरता परिणाम असू शकतो. वारंवार दिसणारी समान समस्या support ticket उघडण्यास योग्य ठरते. अशा ticket सोबत timestamp असलेले fio चे तीन outputs जोडल्यास त्यावर अधिक प्रभावीपणे कार्यवाही होऊ शकते. Disk सोबत CPU आणि network यांचेही व्यापक चित्र हवे असल्यास, संपूर्ण VPS benchmark run इतर subsystems साठीही हीच पद्धत वापरतो.

उत्तराचे काय करावे

विलंबता NVMe band मध्ये असेल, तर device name बद्दल चिंता करणे थांबवा आणि पुढे जा. vda हे downgrade नाही. बहुतांश hosts देत असलेला हा सर्वात जलद virtual disk driver आहे आणि तुम्हाला हाच हवा आहे.

local NVMe म्हणून विकल्या जाणाऱ्या plan वर विलंबता network storage band मध्ये असेल, तर तुमच्याकडे विशिष्ट आणि पुन्हा पडताळता येणारा दावा आहे: नेमकी fio command, सरासरी completion latency आणि तुम्ही ती command ज्या वेळा चालवली त्या वेळा. हा forum argument नसून support ticket चा विषय आहे. तो पाठवण्यापूर्वी disk फक्त full किंवा मोठ्या प्रमाणात fragmented नाही याची खात्री करा. चाचणी घेताना box वर कोणतीही प्रक्रिया मोठ्या प्रमाणात writing करत नाही याचीही खात्री करा.

ही तपासणी provision केल्याच्या दिवशी करा. एखादी गोष्ट 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 guest ला देतो. तो backing store NVMe drives वर असू शकतो, पण guest ला त्याची माहिती मिळेलच असे नाही. हे नाव virtualisation layer दर्शवते. Media चे स्वरूप केवळ latency measurement वरून समजते.

rotational 0 असल्याने माझ्याकडे NVMe disk आहे हे सिद्ध होते का?

नाही. /sys/block/<dev>/queue/rotational मध्ये 0 असल्याचा अर्थ kernel ला त्या device मध्ये फिरणारे platters असल्याचे वाटत नाही. virtio अंतर्गत ही value host निवडत असलेल्या feature bit द्वारे सेट केली जाते. त्यामुळे सामान्य hard drive असल्याची शक्यता नाकारता येते. मात्र यावरून NVMe आणि SATA SSD यांमध्ये फरक करता येत नाही. तसेच local flash आणि network volume यांमध्येही फरक करता येत नाही. 1 आढळल्यास त्यावर कारवाई करणे योग्य आहे, कारण ते solid state storage म्हणून विकल्या जाणाऱ्या कोणत्याही योजनेशी विसंगत आहे.

माझ्या VPS वर nvme list रिकामी का आहे?

कारण तुमच्या guest ला कोणताही NVMe controller उपलब्ध करून दिलेला नाही. nvme list आणि lspci हे दोन्ही virtual machine ला दिसणारी devices वाचतात. 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 असताना, सरासरी completion latency जवळपास 110 microseconds असेल, तर ते NVMe class मानता येते. त्यातून साधारण 9,000 IOPS मिळतात. सुमारे 320 microseconds latency SATA SSD कडे निर्देश करते. सुमारे 900 microseconds latency network attached storage कडे निर्देश करते, कारण प्रत्येक read network hop पार करते. हे August 2026 साठी प्रकाशित केलेल्या सामान्य श्रेणी आहेत. त्यामुळे अचूक आकड्यांपेक्षा orders of magnitude ची तुलना करा. निष्कर्ष काढण्यापूर्वी वेगवेगळ्या वेळांवर run पुन्हा करा.