SSD Nodes Learn 🎉 VPS kutoka $5.50/mwezi
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-13

Jinsi ya kuthibitisha diski ya NVMe kwenye Linux VPS

Thibitisha kama diski yako ni NVMe halisi kwa kutumia lsblk, sysfs, nvme-cli na jaribio la latency la fio. Jifunze kwa nini virtio huficha diski na jinsi ya kuona ukweli.

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

Thibitisha diski ya NVMe kwenye Linux kwa hatua nne

Ili kuthibitisha diski ya NVMe kwenye VPS ya Linux, fanya ukaguzi nne kwa mpangilio: lsblk kwa jina la kifaa, flag ya rotational katika sysfs kwa ajili ya media inayozunguka, nvme list kwa ajili ya controller halisi ya NVMe, na uendeshaji mfupi wa fio kwa ajili ya namba moja ambayo host haiwezi kuificha. Ukaguzi tatu wa kwanza huchukua sekunde moja kila mmoja. Ule wa mwisho unahitimisha swali hilo, kwa sababu kwenye mifumo mingi ya VPS, hypervisor huficha diski ya kimwili kutoka kwa guest.

NVMe (non-volatile memory express) ni itifaki inayotumiwa na hifadhi ya flash kupitia njia za PCIe (peripheral component interconnect express). Ilichukua nafasi ya njia ya SATA na AHCI iliyoundwa kwa ajili ya diski zinazozunguka, na ni ya haraka kwa sababu huondoa kizuizi cha foleni kati ya CPU na flash. Ndani ya mashine ya mtandaoni (virtual machine), mara chache sana hutumia itifaki hiyo. Unawasiliana na diski ya mtandaoni ambayo host inakuandalia, kwa hivyo jina la kifaa katika guest yako linaelezea dereva (driver), si media iliyo kwenye rack.

Hatua ya 1: lsblk inaonyesha nini?

lsblk inasoma orodha ya vifaa vya block kutoka kwenye kernel. Flag ya -d huficha partitions, hivyo unaona mstari mmoja kwa kila diski.

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

KVM VPS kwa kawaida hujibu hivi:

NAME ROTA  SIZE TYPE TRAN MODEL
vda     0   80G disk

Mitindo mitatu ya kutoa majina inashughulikia karibu kila seva ya Linux:

  • nvme0n1 ni namespace 1 kwenye NVMe controller 0. Mgeni wako anaendesha kifaa cha NVMe, iwe cha kweli au kilichoigwa (emulated).
  • sda ni safu ya SCSI. Diski halisi za SATA na SAS huonekana hapa, na vilevile dereva wa virtio-scsi.
  • vda ni virtio-blk, dereva wa block wa paravirtual ambao seva nyingi za KVM hutumia kwa chaguo-msingi.

Safu ya TRAN (transport) inasoma nvme kwa kifaa cha NVMe na sata kwa diski ya SATA ambayo mgeni anaweza kuiona moja kwa moja. Kwa kawaida huwa tupu chini ya virtio-blk, kwa sababu hakuna transport ya kimwili kwa mgeni kuripoti. MODEL huwa tupu kwa sababu hiyo hiyo. Kamba tupu ya model kwenye VPS ni ya kawaida na haikupi taarifa yoyote kuhusu maunzi (hardware).

Hatua ya 2: ondoa uwezekano wa diski inayozunguka (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"

Faili la rotational huhifadhi 1 wakati kernel inapoamini kuwa kifaa kina sahani zinazozunguka, na 0 kwa vifaa vingine vyote. Kwenye seva ya kawaida (bare metal), thamani hii hutoka kwenye diski yenyewe. Chini ya virtio-blk, thamani hii hutoka kwenye bit ya kipengele iliyowekwa na host, kwa hivyo 0 huondoa uwezekano wa diski ngumu ya kawaida lakini haithibitishi chochote zaidi ya hapo. Isome hata hivyo: 1 kwenye mpango unaouzwa kama hifadhi ya solid state ni mgongano wa wazi, na ni picha moja ya skrini ambayo timu ya usaidizi haiwezi kuibishia.

readlink -f hutatua symlink ya sysfs na kuchapisha basi (bus) ambalo kifaa kimeunganishwa:

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

Neno virtio katika njia hiyo ndilo jibu lako kwa hatua hii. Kifaa cha NVMe hutoa njia yenye nvme, kama vile /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1, na diski ya ATA iliyounganishwa moja kwa moja hutoa njia yenye ata1. Hii ni kweli ile ile ambayo lsblk ilichapisha, ikichukuliwa kutoka kwa kernel badala ya safu wima iliyoumbizwa, jambo ambalo ni muhimu wakati sehemu ya TRAN haina kitu.

Hatua ya 3: uliza nvme-cli na basi la 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 huchapisha mstari mmoja kwa kila namespace, pamoja na namba ya serial ya kidhibiti, kamba ya mfano na marekebisho ya firmware. Jedwali tupu linamaanisha kuwa hakuna kifaa cha NVMe kinachoonekana na mgeni wako. lspci kutochapisha mstari wowote unaolingana kunasema jambo lilelile kutoka upande mwingine: basi la PCI la mtandaoni ambalo mgeni wako anaweza kuliona halibebi kidhibiti chochote cha NVMe. Matokeo yote mawili yakiwa matupu ni hali ya kawaida kwenye VPS ya virtio, na hakuna hata moja inayothibitisha kuwa mwenyeji hana diski za NVMe.

Ikiwa namespace itaonekana, nvme-cli huenda mbali zaidi. sudo nvme id-ctrl /dev/nvme0 huchapisha utambulisho wa kidhibiti, na sudo nvme smart-log /dev/nvme0n1 huchapisha halijoto, saa za kufanya kazi na asilimia ya uwezo wa kuandika uliotumika. Endesha amri hizo tu wakati nvme list imeorodhesha kifaa, kwa sababu amri zote mbili zinahitaji node halisi ya /dev/nvme* ili kufunguka.

Kwa nini mwenyeji wa kweli wa NVMe bado anaonyesha /dev/vda

Hypervisor huamua ni modeli gani ya kifaa ambayo mgeni (guest) anaiona, na chaguo hilo halitegemei vyombo vya habari vilivyo chini yake. Mipangilio mitatu ni ya kawaida.

  • virtio-blk au virtio-scsi juu ya faili, logical volume, au ZFS dataset inayokaa kwenye drive za NVMe. Unaona vda au sda. Hifadhi hiyo ni NVMe. Mgeni hana njia ya kujua hilo.
  • Kidhibiti cha NVMe kilichoigizwa (emulated) mbele ya hifadhi yoyote ile. Unaona nvme0n1 hata wakati data inatua kwenye SATA array au kwenye network volume iliyo mbali kwa racks mbili.
  • PCIe passthrough, ambapo mwenyeji (host) hukabidhi kidhibiti halisi kwa mgeni mmoja. Unaona nvme0n1 halisi yenye kamba ya modeli halisi. Hii ni nadra kwenye mipango ya VPS inayoshirikiwa, kwa sababu kadi hiyo huwa imetengwa kwa ajili ya mteja huyo mmoja tu.

Kwa hivyo jina la kifaa linaweza kukupotosha katika pande zote mbili. Mbaya zaidi, mwenyeji anaweza kuweka write-back cache, safu ya RAID, au network volume iliyorudiwa kati ya maandishi yako na flash, na kila moja ya hayo hubadilisha utendaji unaopata bila kubadilisha jina hata moja katika /sys. Ndiyo maana jina ndipo unapoanzia na si mahali unapoishia. Ikiwa bado unachagua mpango, tofauti kati ya hifadhi ya NVMe na SATA SSD inaelezea kile ambacho kila ngazi inastahili kulipiwa.

Jaribio la kweli ni latency, kwa hivyo ipime

fio (flexible I/O tester) hufanya usomaji halisi dhidi ya faili halisi na kuripoti muda ambao kila usomaji ulichukua. Usomaji mdogo wa nasibu (random reads) ndio mzigo sahihi wa kazi hapa, kwa sababu unafichua muda wa safari ya kwenda na kurudi (round trip) kwenye kifaa cha kuhifadhia na hauwezi kuhudumiwa na read-ahead.

Kwanza tengeneza faili la majaribio na uthibitishe kuwa mfumo huu wa faili unakubali I/O isiyo na buffer. --direct=1 hufungua faili kwa O_DIRECT, ambayo hupita pembeni ya page cache. Bila hiyo, utakuwa unapima RAM yako mwenyewe na kupata namba ambazo diski yoyote haiwezi kuzizalisha.

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"

Ikiwa hiyo ilichapisha kukataa, njia uliyochagua iko kwenye mfumo wa faili usio na usaidizi wa O_DIRECT. Mifumo ya faili ya container overlay na baadhi ya mifumo ya faili ya mtandao hufanya kazi hivi. Chagua saraka (directory) kwenye mfumo wa faili wa mzizi wa VPS na ujaribu tena. Ikiwa ilichapisha mafanikio, endesha kipimo:

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

Uendeshaji huu umewekewa mipaka kwa makusudi: kazi moja, kina cha foleni (queue depth) 1, sekunde ishirini, 256 MB ya data. Haitajaza diski yako na haitakufanya uwekewe alama ya matumizi mabaya. Kina cha foleni 1 pia ndicho mpangilio wa kweli kwa swali hili, kwa sababu foleni ndefu huruhusu kifaa cha polepole kujificha nyuma ya parallelism wakati latency ikibaki juu.

Kusoma matokeo ya fio

Mistari miwili ni muhimu. Mstari wa muhtasari unaonekana kama read: IOPS=9012, BW=35.2MiB/s, na chini yake fio huchapisha kizuizi cha clat. clat ni latency ya kukamilisha: muda kati ya fio kuwasilisha ombi la kusoma na kernel kurudisha data. Soma thamani ya avg, kisha soma percentile ya 99.00th katika orodha ya clat percentiles. Wastani hukuambia daraja la hifadhi (storage class). Percentile ya 99 hukuambia ni mara ngapi jirani kwenye seva hiyo hiyo anakuchelewesha.

Fio huchapisha latency katika microseconds wakati thamani ni ndogo na hubadilika kwenda milliseconds wakati thamani si ndogo. Angalia kipimo katika mstari kabla ya kulinganisha chochote.

Ni namba zipi zinazotofautisha daraja la NVMe na daraja la SATA

Takwimu hapa chini ni thamani za kawaida zilizochapishwa kwa ajili ya 4k random reads ya kazi moja kwenye queue depth 1, zilizokusanywa kutoka nyaraka za wauzaji na benchmark za jamii kufikia Agosti 2026. Hizi ni bendi za kulinganishia, si vipimo kutoka kwenye seva yako.

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

Volume ya ndani ya NVMe hujibu 4k random read moja kwa takriban 110 microseconds na hufikia takriban 9,000 IOPS kwenye queue depth 1. SATA SSD ya ndani hukaa karibu na 320 microseconds na 3,100 IOPS. Network attached block storage hufika karibu na 900 microseconds na 1,100 IOPS, kwa sababu kila read moja huvuka network hop kabla ya flash yoyote kuguswa.

Kwenye queue depth 1 nguzo hizo mbili ni ukweli mmoja uliotajwa mara mbili: read moja kwa wakati mmoja inamaanisha throughput ni moja ikigawanywa na latency. Ikiwa wastani wako uko karibu zaidi na 110 kuliko 320 microseconds, uko kwenye storage ya daraja la NVMe bila kujali kile lsblk iliamua kukiita kifaa hicho. Ikiwa iko karibu zaidi na 900 microseconds, kuna kitu kinachopunguza kasi kuliko flash ya ndani kilichopo kwenye njia, na neno NVMe kwenye ukurasa wa kuagizia linaelezea drives za host badala ya volume yako.

Iendeshe zaidi ya mara moja kabla ya kulalamika

Jaribio moja ni sampuli tu, si matokeo ya mwisho. VPS hushiriki diski zake, kwa hivyo jirani mwenye shughuli nyingi anaweza kuongeza latency yako mara mbili kwa dakika kumi kisha akaacha. Baadhi ya majukwaa pia hutoa burst credits zinazofanya dakika za kwanza za jaribio lolote kuonekana bora sana. Iendeshe amri ileile mara tatu au nne katika saa tofauti za siku na ulinganishe matokeo mabaya zaidi, si yale bora. Jaribio moja baya ni hali ya muda tu. Mfumo wa matokeo mabaya ni hitilafu inayostahili ticket ya msaada, na ticket hiyo hupokelewa vyema ikiwa imeambatishwa na matokeo matatu ya fio yenye timestamp. Kwa picha pana inayohusu CPU na mtandao pamoja na diski, jaribio kamili la benchmark ya VPS hutumia nidhamu hiyo hiyo kwa mifumo mingine midogo.

Nini cha kufanya na jibu hili

Ikiwa latency iko ndani ya kiwango cha NVMe, acha kuhangaikia jina la kifaa na uendelee na mambo mengine. vda si kushushwa daraja. Huu ndio dereva wa diski pepe wa kasi zaidi ambao seva nyingi hutoa, na ndilo unalohitaji.

Ikiwa latency iko ndani ya kiwango cha hifadhi ya mtandao (network storage) kwenye mpango unaouzwa kama NVMe ya ndani, una dai mahususi linaloweza kuthibitika: amri kamili ya fio, wastani wa latency ya kukamilisha, na nyakati ulizoiendesha. Hilo ni suala la tiketi ya usaidizi (support ticket) badala ya mjadala wa kwenye jukwaa. Kabla ya kuituma, thibitisha kuwa diski haijajaa au kugawanyika vibaya (heavily fragmented), na uhakikishe kuwa hakuna kitu kwenye seva kinachoandika data kwa kasi wakati unafanya jaribio.

Fanya ukaguzi huu siku unayopata seva, si siku unapoona mambo yanakwenda polepole, ili uwe na msingi wa kulinganisha baadaye. Hili linafaa kiasili ndani ya dakika kumi za kwanza kwenye VPS mpya, sambamba na kusanidi firewall na funguo za SSH. Ikiwa tofauti kati ya viwango vya hifadhi bado haijawa wazi, kile ambacho SSD VPS inakupa kihalisi kinafafanua misingi iliyo chini ya mada hii.

FAQ

Kwa nini lsblk inaonyesha /dev/vda wakati mwenyeji wangu anatangaza NVMe?

Kwa sababu vda inataja dereva wa virtio-blk ndani ya mfumo wako wa wageni, si maunzi yaliyopo kwenye seva mwenyeji. KVM hypervisor huwasilisha kifaa cha kuzuia cha paravirtual ambacho kimeungwa mkono na faili, logical volume au dataset, na hifadhi hiyo inaweza kuwa kwenye diski za NVMe bila mfumo wa wageni kujua. Jina hilo linaelezea safu ya uboreshaji wa mtandaoni (virtualization layer). Kipimo cha latency pekee ndicho kinachoelezea vyombo vya habari vya hifadhi.

Je, rotational 0 inathibitisha kuwa nina diski ya NVMe?

Hapana. /sys/block/<dev>/queue/rotational kuwa na 0 inamaanisha kernel haiamini kuwa kifaa hicho kina sahani zinazozunguka, na chini ya virtio thamani hiyo huwekwa na bit ya kipengele ambayo mwenyeji huchagua. Hii huondoa uwezekano wa diski ngumu ya kawaida. Haiwezi kutofautisha NVMe na SATA SSD, na haiwezi kutofautisha flash ya ndani na volume ya mtandao. 1 bado inafaa kufanyiwa kazi, kwa sababu inapingana na mpango wowote unaouzwa kama hifadhi ya solid state.

Kwa nini nvme list haina kitu kwenye VPS yangu?

Kwa sababu hakuna kidhibiti cha NVMe kilichofichuliwa kwa mfumo wako wa wageni. nvme list na lspci zote husoma kile ambacho mashine ya mtandaoni inaweza kuona, na diski ya virtio-blk au virtio-scsi haionyeshi kidhibiti cha NVMe cha kuorodhesha. Jedwali tupu ni matokeo ya kawaida kwenye mipango mingi ya VPS na si uthibitisho kwamba mwenyeji hana diski za NVMe. Sakinisha nvme-cli kwa kutumia sudo apt install -y nvme-cli na utarajie jedwali tupu isipokuwa kama kidhibiti kimepitishwa (passed through).

Ni matokeo gani ya fio yanayohesabika kama hifadhi ya daraja la NVMe?

Katika kina cha foleni (queue depth) cha 1 na usomaji wa nasibu wa 4k na --direct=1, wastani wa latency ya kukamilisha karibu na 110 microseconds ni ya daraja la NVMe, na takriban 9,000 IOPS hufuata kutoka hapo. Karibu 320 microseconds inaashiria SATA SSD, na karibu 900 microseconds inaashiria hifadhi iliyounganishwa kwenye mtandao, ambapo kila usomaji huvuka hatua ya mtandao. Hizo ni bendi za kawaida zilizochapishwa kwa Agosti 2026, kwa hivyo linganisha ukubwa wa maagizo badala ya takwimu kamili, na urudie jaribio hilo kwa saa tofauti kabla ya kufikia hitimisho.