SSD Nodes Learn 🎉 VPS $4.99/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-07

Linux-এ VPS disk সত্যিই NVMe কি না যাচাই করুন

host NVMe বললেও guest-এ virtio দেখা যেতে পারে। lsblk, sysfs, nvme-cli এবং সীমিত fio latency পরীক্ষা চালিয়ে সত্যিকারের storage path যাচাই করুন।

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

Linux-এ চার ধাপে NVMe disk যাচাই করুন

Linux VPS-এ কোনো NVMe disk যাচাই করতে ধারাবাহিকভাবে চারটি পরীক্ষা চালান: device name জানার জন্য lsblk, spinning media শনাক্ত করতে sysfs-এর rotational flag, প্রকৃত NVMe controller শনাক্ত করতে nvme list, এবং সেই একমাত্র সংখ্যা যাচাই করতে সংক্ষিপ্ত fio পরীক্ষা, যেটি host সাজিয়ে উপস্থাপন করতে পারে না। প্রথম তিনটি পরীক্ষা প্রতিটি এক সেকেন্ডে সম্পন্ন হয়। শেষ পরীক্ষাটিই বিষয়টি নিশ্চিত করে, কারণ অধিকাংশ VPS platform-এ hypervisor guest-এর কাছ থেকে physical disk আড়াল করে রাখে।

NVMe (non-volatile memory express) হলো PCIe (peripheral component interconnect express) lane-এর মাধ্যমে flash storage-এর ব্যবহৃত protocol। এটি spinning drive-এর জন্য তৈরি SATA এবং AHCI path-এর পরিবর্তে ব্যবহৃত হয়। CPU ও flash-এর মধ্যকার queueing bottleneck সরিয়ে দেওয়ার কারণে এটি দ্রুত। Virtual machine-এর ভেতরে আপনি সাধারণত এই protocol-এ সরাসরি কাজ করেন না। আপনি host-এর তৈরি করে দেওয়া একটি virtual disk ব্যবহার করেন। তাই guest-এ দেখা device name rack-এ থাকা media নয়, বরং একটি driver নির্দেশ করে।

ধাপ 1: lsblk কী দেখায়?

lsblk kernel-এর block device তালিকা পড়ে। -d flag partition আড়াল করে, তাই প্রতিটি disk-এর জন্য একটি করে line দেখা যায়।

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

একটি KVM VPS সাধারণত এভাবে দেখায়:

NAME ROTA  SIZE TYPE TRAN MODEL
vda     0   80G disk

প্রায় সব Linux server-এ নিচের তিনটি naming pattern দেখা যায়:

  • nvme0n1 হলো NVMe controller 0-এর namespace 1। আপনার guest একটি বাস্তব বা emulated NVMe device ব্যবহার করছে।
  • sda হলো SCSI layer। বাস্তব SATA ও SAS disk এখানে দেখা যায়। virtio-scsi driver-ও এই layer ব্যবহার করে।
  • vda হলো virtio-blk, যে paravirtual block driver অধিকাংশ KVM host default হিসেবে ব্যবহার করে।

TRAN (transport) column-এ NVMe device-এর জন্য nvme এবং guest সরাসরি দেখতে পাওয়া SATA disk-এর জন্য sata দেখা যায়। virtio-blk-এর ক্ষেত্রে এটি সাধারণত ফাঁকা থাকে, কারণ guest-এর report করার মতো কোনো physical transport থাকে না। একই কারণে MODEL-ও ফাঁকা থাকে। VPS-এ 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-এ spinning platter আছে, এবং অন্য সব device-এর জন্য 0 থাকে। Bare metal-এ এই মান drive থেকে আসে। virtio-blk-এর অধীনে এটি host সেট করা একটি feature bit থেকে আসে। তাই 0 একটি সাধারণ hard drive-এর সম্ভাবনা বাদ দেয়, কিন্তু এর বেশি কিছু প্রমাণ করে না। তবু এটি পড়ুন: solid state storage হিসেবে বিক্রি করা plan-এ 1 দেখা গেলে তা সরাসরি অসঙ্গতি। এটাই এমন screenshot, যার বিরুদ্ধে support আপত্তি জানাতে পারে না।

readlink -f sysfs symlink resolve করে এবং 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 যে একই তথ্য দেখিয়েছে, সেটিই kernel থেকে নেওয়া। formatted column থেকে নেওয়া নয়। 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-এর জন্য একটি করে row দেখায়। এতে controller-এর serial number, model string এবং firmware revision থাকে। টেবিল খালি থাকলে আপনার guest-এর কাছে কোনো NVMe device প্রকাশ করা হয়নি। lspci কোনো matching line না দেখালেও একই বিষয়টি অন্য দিক থেকে বোঝা যায়: আপনার guest যে virtual PCI bus দেখতে পায়, তাতে কোনো NVMe controller নেই। virtio VPS-এ উভয় ফলাফলই স্বাভাবিক। কোনোটিই প্রমাণ করে না যে host-এ কোনো NVMe drive নেই।

কোনো namespace দেখা গেলে nvme-cli আরও তথ্য দেখাতে পারে। sudo nvme id-ctrl /dev/nvme0 controller identity দেখায়। sudo nvme smart-log /dev/nvme0n1 temperature, power-on hours এবং rated write endurance-এর ব্যবহৃত percentage দেখায়। এগুলো শুধু তখনই চালান, যখন nvme list সত্যিই কোনো device তালিকাভুক্ত করেছে। কারণ উভয় command-এর খোলার জন্য একটি বাস্তব /dev/nvme* node প্রয়োজন।

একটি প্রকৃত NVMe host-এও কেন /dev/vda দেখা যায়

Hypervisor আপনার guest যে device model দেখতে পায় তা নির্ধারণ করে। নিচের storage media কী, সেই সিদ্ধান্তের সঙ্গে এর সরাসরি সম্পর্ক নেই। সাধারণত 3 ধরনের ব্যবস্থা দেখা যায়।

  • NVMe drive-এ থাকা কোনো file, logical volume বা ZFS dataset-এর ওপর virtio-blk বা virtio-scsi ব্যবহার করা। আপনি vda বা sda দেখতে পারেন। Storage আসলে NVMe। Guest-এর পক্ষে তা জানার কোনো উপায় নেই।
  • যেকোনো ধরনের storage-এর সামনে একটি emulated NVMe controller রাখা। Bytes কোনো SATA array-তে বা দুই rack দূরের network volume-এ লেখা হলেও আপনি nvme0n1 দেখতে পারেন।
  • PCIe passthrough ব্যবহার করা। এতে host একটি physical controller সরাসরি একটি guest-এর কাছে হস্তান্তর করে। আপনি প্রকৃত model string-সহ একটি আসল nvme0n1 দেখতে পান। Shared VPS plan-এ এটি বিরল, কারণ তখন card-টি একজন customer-এর জন্য dedicated হয়ে যায়।

তাই device name আপনাকে দুই দিকেই বিভ্রান্ত করতে পারে। এর ওপর host আপনার write এবং flash storage-এর মধ্যে write-back cache, RAID layer বা replicated network volume রাখতে পারে। এগুলোর প্রতিটি /sys-এ কোনো নাম পরিবর্তন না করেই আপনার পাওয়া performance বদলে দিতে পারে। তাই device name দিয়ে অনুসন্ধান শুরু করবেন, কিন্তু সেখানেই থামবেন না। আপনি যদি এখনও কোনো plan বেছে নিচ্ছেন, NVMe এবং SATA SSD storage-এর পার্থক্য ব্যাখ্যা করে কোন tier-এর জন্য বাস্তবে কত খরচ করা যুক্তিসঙ্গত।

সৎ পরীক্ষা হলো latency, তাই এটি পরিমাপ করুন

fio (flexible I/O tester) একটি বাস্তব ফাইলের বিরুদ্ধে বাস্তব read request পাঠায় এবং প্রতিটি request সম্পন্ন হতে কত সময় লেগেছে তা জানায়। এখানে ছোট random read-ই উপযুক্ত workload, কারণ এতে media পর্যন্ত round trip প্রকাশ পায় এবং read-ahead ব্যবহার করে request পূরণ করা যায় না।

প্রথমে test file তৈরি করুন এবং নিশ্চিত করুন যে এই filesystem unbuffered I/O গ্রহণ করে। --direct=1 ফাইলটি O_DIRECT দিয়ে খোলে, যা page cache এড়িয়ে যায়। এটি ব্যবহার না করলে আপনি নিজের 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 message দেখা যায়, তাহলে নির্বাচিত path-টি এমন একটি filesystem-এ রয়েছে যেখানে O_DIRECT support নেই। Container overlay filesystem এবং কিছু network filesystem এভাবে কাজ করে। VPS-এর root filesystem-এর কোনো directory নির্বাচন করে আবার চেষ্টা করুন। যদি success message দেখা যায়, তাহলে 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-এর কারণে আপনার account flag হওয়ার সম্ভাবনাও থাকবে না। এই প্রশ্নের জন্য queue depth 1-ই সৎ setting, কারণ deep queue parallelism ব্যবহার করে ধীর device-এর latency আড়াল করতে পারে, যদিও প্রকৃত 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 latency microseconds-এ দেখায় এবং মান বড় হলে milliseconds-এ পরিবর্তন করে। কোনো তুলনা করার আগে লাইনে দেওয়া unit পরীক্ষা করুন।

কোন সংখ্যাগুলো NVMe শ্রেণি ও SATA শ্রেণিকে আলাদা করে

নিচের মানগুলো queue depth 1-এ একটি job-এর 4k random read-এর জন্য সাধারণত প্রকাশিত মান। এগুলো August 2026 পর্যন্ত vendor documentation এবং community benchmark থেকে সংগৃহীত। এগুলো তুলনার জন্য ব্যবহৃত পরিসর, আপনার server-এর মাপা ফল নয়।

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 queue depth 1-এ প্রায় 110 microseconds-এ একটি 4k random read-এর উত্তর দেয় এবং প্রায় 9,000 IOPS-এ পৌঁছায়। একটি local SATA SSD-এর latency প্রায় 320 microseconds এবং IOPS 3,100। Network-attached block storage-এর মান প্রায় 900 microseconds latency এবং 1,100 IOPS, কারণ প্রতিটি read-কে flash ব্যবহারের আগে network hop অতিক্রম করতে হয়।

queue depth 1-এ ওই দুইটি column একই তথ্য দুইভাবে প্রকাশ করে: একবারে একটি read হলে throughput সরাসরি latency-এর এক-ভাগের সমান। আপনার average যদি 110 microseconds-এর কাছাকাছি হয়, 320 microseconds-এর নয়, তাহলে device-টিকে lsblk যে নামেই অভিহিত করুক, storage-টি NVMe শ্রেণির। আর যদি মানটি 900 microseconds-এর কাছাকাছি হয়, তাহলে path-এ local flash-এর চেয়ে ধীর কোনো উপাদান রয়েছে। Order page-এ NVMe লেখা থাকলেও সেটি আপনার volume-এর নয়, host-এর drive-এর বৈশিষ্ট্য বোঝাচ্ছে।

অভিযোগ করার আগে এটি একাধিকবার চালান

একবার চালানো হলো একটি নমুনা, ফলাফল নয়। একটি VPS তার disk অন্য গ্রাহকদের সঙ্গে ভাগ করে, তাই ব্যস্ত কোনো প্রতিবেশী দশ মিনিটের জন্য আপনার latency দ্বিগুণ করে পরে স্বাভাবিক হয়ে যেতে পারে। কিছু platform burst credit-ও দেয়, যার ফলে যেকোনো test-এর প্রথম কয়েক মিনিটের ফলাফল অস্বাভাবিকভাবে ভালো দেখায়। দিনের বিভিন্ন সময়ে একই command তিন বা চারবার চালান এবং সেরা ফল নয়, সবচেয়ে খারাপ ফলের সঙ্গে তুলনা করুন। একবার খারাপ ফল পাওয়া আবহাওয়ার মতো সাময়িক বিষয়। কিন্তু একই ধরনের ফলাফলের ধারা support ticket করার মতো সমস্যা নির্দেশ করে। timestamp-সহ তিনটি fio output সংযুক্ত করলে ticket-টি বেশি কার্যকরভাবে পর্যালোচনা করা যায়। CPU ও network-এর পাশাপাশি disk সম্পর্কেও বিস্তৃত ধারণা পেতে সম্পূর্ণ VPS benchmark চালানো একই পদ্ধতিতে অন্যান্য subsystem পরীক্ষা করে।

উত্তরটি কীভাবে ব্যবহার করবেন

যদি latency NVMe band-এর মধ্যে থাকে, তাহলে device name নিয়ে আর চিন্তা না করে পরবর্তী কাজে যান। vda কোনো downgrade নয়। এটি অধিকাংশ host-এর দেওয়া দ্রুততম virtual disk driver, এবং আপনার জন্য এটিই উপযুক্ত।

যদি local NVMe হিসেবে বিক্রি করা plan-এ latency network storage band-এর মধ্যে থাকে, তাহলে আপনার কাছে একটি নির্দিষ্ট ও পুনরুৎপাদনযোগ্য দাবি রয়েছে: সঠিক fio command, average completion latency এবং আপনি এটি যে সময়গুলোতে চালিয়েছেন। এটি forum argument নয়; এটি support ticket-এর বিষয়। পাঠানোর আগে নিশ্চিত করুন যে disk শুধু full বা অতিরিক্ত fragmented নয়। পরীক্ষার সময় server-এ অন্য কোনো process জোরালোভাবে লিখছে না, সেটিও নিশ্চিত করুন।

আপনি server provision করার দিনই এই check চালান, কোনো কিছু ধীর মনে হওয়ার দিন নয়। তাহলে পরে তুলনা করার জন্য একটি baseline থাকবে। এটি স্বাভাবিকভাবেই নতুন VPS-এ প্রথম দশ মিনিটের কাজগুলোর অংশ হতে পারে, firewall এবং SSH key সেট আপ করার পাশাপাশি। storage tier-এর পার্থক্য এখনও অস্পষ্ট থাকলে, একটি SSD VPS আসলে কী সুবিধা দেয় লেখায় এর ভিত্তি ব্যাখ্যা করা হয়েছে।

FAQ

কেন host-এ NVMe দেখালেও lsblk /dev/vda দেখায়?

কারণ vda আপনার guest-এ ব্যবহৃত virtio-blk driver-এর নাম নির্দেশ করে, host-এর hardware-এর নয়। একটি KVM hypervisor file, logical volume বা dataset-এর ওপর ভিত্তি করে একটি paravirtual block device guest-এ উপস্থাপন করে। সেই backing store NVMe drive-এ থাকলেও guest তা জানতে পারে না। এই নামটি virtualisation layer নির্দেশ করে। শুধু latency measurement-ই storage media সম্পর্কে তথ্য দেয়।

rotational 0 দেখালে কি নিশ্চিত হওয়া যায় যে আমার NVMe disk আছে?

না। /sys/block/<dev>/queue/rotational-এ 0 থাকলে বোঝায় kernel মনে করছে device-এ spinning platter নেই। virtio-এর ক্ষেত্রে 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 যে device দেখতে পারে, তা পড়ে। virtio-blk বা virtio-scsi disk enumerate করার জন্য কোনো NVMe controller উপস্থাপন করে না। অধিকাংশ VPS plan-এ খালি table পাওয়াই স্বাভাবিক। এর অর্থ host-এ NVMe drive নেই—এমন প্রমাণ এটি নয়। sudo apt install -y nvme-cli ব্যবহার করে nvme-cli install করুন। কোনো controller pass through করা না থাকলে খালি table পাওয়ার প্রত্যাশা রাখুন।

কোন fio ফলাফলকে NVMe class storage বলা যায়?

queue depth 1, 4k random read এবং --direct=1 ব্যবহারের ক্ষেত্রে, গড় completion latency প্রায় 110 microseconds হলে সেটি NVMe class-এর storage। এ থেকে প্রায় 9,000 IOPS পাওয়া যায়। প্রায় 320 microseconds latency SATA SSD নির্দেশ করে। প্রায় 900 microseconds latency network attached storage নির্দেশ করে, যেখানে প্রতিটি read একটি network hop অতিক্রম করে। এগুলো August 2026-এ প্রকাশিত সাধারণ range। তাই exact figure-এর বদলে orders of magnitude তুলনা করুন। সিদ্ধান্ত নেওয়ার আগে বিভিন্ন সময়ে test পুনরায় চালান।