Linux VPS uzerinde NVMe disk dogrulama yontemleri
Linux VPS ortaminda disk turunu dogrulamak icin lsblk, sysfs ve nvme-cli komutlarini kullanin. Fio ile gecikme testi yaparak sanal disk arkasindaki gercek donanimi teshis edin.
Linux üzerinde bir NVMe diski dört adımda doğrulama
Bir Linux VPS üzerinde bir NVMe diski doğrulamak için şu dört kontrolü sırasıyla çalıştırın: cihaz adı için lsblk, sysfs içindeki rotational bayrağı ve veri yolu yolu, gerçek bir NVMe denetleyicisi için nvme list ve bir ana bilgisayarın taklit edemeyeceği tek sayı için kısa bir fio çalıştırılması. İlk üçü birer saniye sürer. Sonuncusu ise konuyu netleştirir, çünkü çoğu VPS platformunda hipervizör fiziksel diski konuk sistemden gizler.
NVMe (non-volatile memory express), flash depolamanın PCIe (peripheral component interconnect express) hatları üzerinden konuştuğu protokoldür. Dönen diskler için tasarlanmış SATA ve AHCI yolunun yerini almıştır ve CPU ile flash arasındaki kuyruklama darboğazını ortadan kaldırdığı için hızlıdır. Bir sanal makine içinde bu protokolü nadiren kullanırsınız. Ana bilgisayarın sizin için bir araya getirdiği sanal bir diskle konuşursunuz, bu nedenle konuk sisteminizdeki cihaz adı, raftaki medyayı değil, bir sürücüyü tanımlar.
Adım 1: lsblk ne gösterir?
lsblk, çekirdeğin blok aygıtları listesini okur. -d bayrağı bölümleri gizler, böylece disk başına tek bir satır görürsünüz.
lsblk -d -o NAME,ROTA,SIZE,TYPE,TRAN,MODELBir KVM VPS genellikle şu şekilde yanıt verir:
NAME ROTA SIZE TYPE TRAN MODEL
vda 1 80G disk virtioÜç adlandırma düzeni neredeyse tüm Linux sunucularını kapsar:
nvme0n1, NVMe denetleyicisi 0 üzerindeki 1 numaralı ad alanıdır. Konuk sisteminiz gerçek veya emüle edilmiş bir NVMe aygıtı kullanmaktadır.sda, SCSI katmanıdır. Gerçek SATA ve SAS diskler ile virtio-scsi sürücüsü burada yer alır.vda, çoğu KVM ana bilgisayarının varsayılan olarak kullandığı paravirtual blok sürücüsü olan virtio-blk'dir.
TRAN (taşıma) sütunu, NVMe aygıtı için nvme, konuğun doğrudan görebildiği bir SATA diski için ise sata değerini okur. virtio-blk altında, güncel util-linux sürümleri virtio değerini yazdırır; bu değer lsblk tarafından vd aygıt adından çıkarılır, eski sürümler ise bu alanı boş bırakır. Her iki durumda da konuğun raporlayabileceği fiziksel bir taşıma katmanı yoktur. MODEL aynı nedenden dolayı boştur. Bir VPS üzerinde boş bir model dizisi normaldir ve donanım hakkında herhangi bir bilgi vermez.
Adım 2: dönen disk ihtimalini eleme
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 dosyası, çekirdek cihazı dönen plakalı olarak değerlendirdiğinde 1, aksi takdirde 0 değerini tutar. Fiziksel sunucularda (bare metal) bu değer doğrudan sürücüden gelir. virtio-blk altında ise bu değer hiçbir yerden gelmez: virtio-blk spesifikasyonunda medya türü veya dönüş hızı için bir özellik biti yoktur ve Linux virtio-blk sürücüsü her diski dönen disk olarak işaretler. Bu nedenle bir vda, bir udev kuralı ile 0 değerine zorlanmadığı sürece, tamamen flash tabanlı bir sunucuda bile normalde 1 değerini okur. Bir virtio-scsi sda üzerinde ise bu değer, ana makinenin yapılandırmayı seçtiği değerdir. Dolayısıyla bir VPS içinde bu bayrak, bir sabit diskin varlığını kesin olarak kanıtlayamaz veya çürütemez; bu nedenle tek başına bir 1, destek talebi oluşturmak için yeterli bir gerekçe değildir. Aşağıdaki fio testi bu soruya yanıt veren yöntemdir.
readlink -f, sysfs sembolik bağını çözer ve cihazın bağlı olduğu veri yolunu yazdırır:
/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vdaBu yoldaki virtio kelimesi, bu adım için aradığınız cevaptır. Bir NVMe cihazı, /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1 gibi nvme içeren bir yol verir; doğrudan bağlı bir ATA diski ise ata1 içeren bir yol verir. Bu, lsblk tarafından yazdırılan bilginin aynısıdır; ancak biçimlendirilmiş bir sütundan ziyade doğrudan çekirdekten alınmıştır ve TRAN alanı boş olduğunda oldukça kullanışlıdır.
Adım 3: nvme-cli ve PCI veri yolunu sorgulama
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, her namespace için denetleyicinin seri numarası, model dizisi ve aygıt yazılımı sürümünü içeren bir satır yazdırır. Boş bir tablo, konuk sisteminize hiçbir NVMe aygıtının sunulmadığı anlamına gelir. lspci komutunun eşleşen bir satır döndürmemesi de aynı durumu diğer taraftan doğrular: konuk sisteminizin görebildiği sanal PCI veri yolunda hiçbir NVMe denetleyicisi bulunmamaktadır. Her iki sonucun da boş olması, virtio tabanlı bir VPS üzerinde normal bir durumdur ve ana makinede NVMe sürücüsü olmadığı anlamına gelmez.
Eğer bir namespace listelenirse, nvme-cli ile daha fazla bilgi alınabilir. sudo nvme id-ctrl /dev/nvme0 denetleyici kimliğini, sudo nvme smart-log /dev/nvme0n1 ise sıcaklık, çalışma saati ve tahmini yazma ömrünün yüzde kaçının kullanıldığını yazdırır. Bu komutları yalnızca nvme list bir aygıt listelediğinde çalıştırın; çünkü her iki komut da işlem yapabilmek için gerçek bir /dev/nvme* düğümüne ihtiyaç duyar.
Gerçek bir NVMe ana makinesinde neden hala /dev/vda görünür
Hipervizör, konuk işletim sisteminizin hangi cihaz modelini göreceğine karar verir ve bu seçim, alttaki fiziksel ortamdan bağımsızdır. Üç yaygın yapılandırma mevcuttur.
- NVMe sürücüler üzerinde bulunan bir dosya, mantıksal bir birim veya ZFS veri kümesi üzerinde çalışan virtio-blk veya virtio-scsi. Bu durumda
vdaveyasdagörürsünüz. Depolama birimi NVMe'dir ancak konuk sistemin bunu öğrenmesinin bir yolu yoktur. - Herhangi bir depolama biriminin önünde emüle edilmiş bir NVMe denetleyicisi. Veriler bir SATA dizisine veya iki raf ötedeki bir ağ birimine yazılsa bile
nvme0n1görürsünüz. - Ana makinenin fiziksel bir denetleyiciyi tek bir konuğa atadığı PCIe passthrough. Bu durumda gerçek bir model dizisine sahip gerçek bir
nvme0n1görürsünüz. Bu durum paylaşımlı VPS planlarında nadirdir, çünkü kart o müşteriye özel hale gelir.
Dolayısıyla cihaz adı sizi her iki yönde de yanıltabilir. Daha da kötüsü, ana makine yazma işlemleriniz ile flash bellek arasına bir write-back önbelleği, bir RAID katmanı veya çoğaltılmış bir ağ birimi koyabilir; bunların her biri /sys içindeki tek bir ismi bile değiştirmeden elde ettiğiniz performansı değiştirir. Bu yüzden cihaz adı, incelemeye başladığınız yerdir, bitirdiğiniz yer değil. Eğer hala bir plan seçme aşamasındaysanız, NVMe ve SATA SSD depolama arasındaki fark her bir katmanın gerçekte ne kadar ödemeye değer olduğunu açıklar.
Gecikme süresi en dürüst testtir, bu yüzden ölçün
fio (flexible I/O tester), gerçek bir dosya üzerinde gerçek okuma işlemleri gerçekleştirir ve her birinin ne kadar sürdüğünü raporlar. Küçük rastgele okumalar bu senaryo için doğru iş yüküdür; çünkü bu işlemler depolama birimine gidiş-dönüş süresini ortaya çıkarır ve "read-ahead" (önceden okuma) mekanizmasıyla hızlandırılamazlar.
Öncelikle test dosyasını oluşturun ve dosya sisteminin arabelleksiz (unbuffered) I/O işlemlerini kabul ettiğini doğrulayın. --direct=1, dosyayı O_DIRECT bayrağı ile açar; bu bayrak sayfa önbelleğini (page cache) devre dışı bırakır. Bu bayrak kullanılmazsa, disklerin asla ulaşamayacağı RAM hızlarını ölçmüş olursunuz.
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"Eğer bu komut bir reddetme mesajı döndürürse, seçtiğiniz yol O_DIRECT desteği olmayan bir dosya sistemi üzerindedir. Konteyner overlay dosya sistemleri ve bazı ağ dosya sistemleri bu şekilde davranır. VPS kök dosya sistemi üzerinde bir dizin seçin ve tekrar deneyin. Eğer başarı mesajı döndürürse, ölçümü başlatın:
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.tmpTestin kapsamı bilinçli olarak sınırlandırılmıştır: tek bir iş, 1 kuyruk derinliği, yirmi saniye ve 256 MB veri. Bu işlem diskinizi doldurmaz ve kötüye kullanım nedeniyle işaretlenmenize yol açmaz. Kuyruk derinliğinin 1 olması, bu soru için en dürüst ayardır; çünkü derin kuyruklar, gecikme süresi yüksek kalsa bile yavaş bir cihazın paralellik arkasına saklanmasına olanak tanır.
fio çıktısını okuma
İki satır önem taşır. Özet satırı read: IOPS=9012, BW=35.2MiB/s şeklinde görünür ve altında fio bir clat bloğu yazdırır. clat, tamamlanma gecikmesidir: fio'nun bir okuma isteği göndermesi ile çekirdeğin veriyi geri döndürmesi arasında geçen süredir. avg değerini okuyun, ardından clat percentiles listesindeki 99.00th yüzdelik dilimini inceleyin. Ortalama değer size depolama sınıfını belirtir. 99. yüzdelik dilim ise okumaların en yavaş yüzde 1'lik kısmının ne kadar yavaş olduğunu gösterir; paylaşımlı bir sunucudaki çekişme genellikle ilk olarak burada ortaya çıkar.
fio, değerler küçük olduğunda gecikmeyi mikrosaniye cinsinden yazdırır, değerler büyüdüğünde ise milisaniyeye geçer. Herhangi bir karşılaştırma yapmadan önce satırdaki birimi kontrol edin.
NVMe sınıfını SATA sınıfından ayıran değerler nelerdir
Aşağıdaki rakamlar, Ağustos 2026 itibarıyla üretici belgelerinden ve topluluk kıyaslamalarından derlenen, 1 kuyruk derinliğinde (queue depth 1) tek işli 4k rastgele okuma işlemleri için tipik yayınlanmış değerlerdir. Bunlar sunucunuzdan alınan ölçümler değil, karşılaştırma yapabileceğiniz referans aralıklarıdır.
Bu grafiğin arkasındaki veriler
[
{
"label": "Local NVMe",
"avg_latency_us": 110
},
{
"label": "Local SATA SSD",
"avg_latency_us": 320
},
{
"label": "Network block storage",
"avg_latency_us": 900
}
]Bu grafiğin arkasındaki veriler
[
{
"label": "Local NVMe",
"iops": "9,000"
},
{
"label": "Local SATA SSD",
"iops": "3,100"
},
{
"label": "Network block storage",
"iops": "1,100"
}
]Yerel bir NVMe birimi, 4k rastgele okuma isteğini yaklaşık 110 mikrosaniyede yanıtlar ve 1 kuyruk derinliğinde yaklaşık 9,000 IOPS değerine ulaşır. Yerel bir SATA SSD ise 320 mikrosaniye ve 3,100 IOPS civarındadır. Ağ üzerinden bağlanan blok depolama (network attached block storage) ise yaklaşık 900 mikrosaniye ve 1,100 IOPS civarında seyreder; çünkü ana bilgisayar tarafındaki önbelleği ıskalayan bir okuma işlemi, flash belleğe ulaşmadan önce ağ üzerinden geçmek zorundadır.
1 kuyruk derinliğinde bu iki sütun neredeyse aynı gerçeğin iki farklı ifadesidir: Aynı anda tek bir okuma işlemi sürerken, verimlilik (throughput) yaklaşık olarak birin gecikme süresine bölümüyle elde edilir; istek başına düşen ek yük hesaba katıldığında bu değer biraz daha düşüktür. Ortalama değeriniz 320 mikrosaniyeden ziyade 110 mikrosaniyeye daha yakınsa, lsblk cihazı nasıl adlandırırsa adlandırsın NVMe sınıfı depolama kullanıyorsunuz demektir. Eğer değer 900 mikrosaniyeye daha yakınsa, ya yol üzerinde yerel flash bellekten daha yavaş bir bileşen vardır ya da ana bilgisayar biriminizin IOPS değerini kısıtlıyordur; QEMU gibi hipervizörler, alttaki depolama birimi ne olursa olsun bunu yapabilir. Her iki durumda da, sipariş sayfasında ana bilgisayarın sürücüleri hakkında ne yazarsa yazsın, biriminiz NVMe sınıfı gecikme süresi sunmuyordur.
Şikayet etmeden önce birden fazla kez çalıştırın
Tek bir çalıştırma sonuç değil, yalnızca bir örnektir. Bir VPS diskleri paylaşımlı kullanır; bu nedenle yoğun bir komşu, gecikme sürenizi on dakikalığına iki katına çıkarıp sonra ortadan kaybolabilir. Bazı platformlar, testin ilk dakikalarının mükemmel görünmesini sağlayan ani performans artışı (burst) kredileri tanımlar. Aynı komutu günün farklı saatlerinde üç veya dört kez çalıştırın ve en iyi sonucu değil, en kötü sonucu karşılaştırın. Tek bir kötü sonuç hava durumuna bağlı geçici bir durumdur. Bir örüntü ise destek talebi açmaya değer bir hatadır; destek talebi, zaman damgalı üç adet fio çıktısı eklendiğinde daha etkili olur. CPU ve ağı da kapsayan daha geniş bir disk performansı resmi için tam bir VPS benchmark testi, diğer alt sistemlerde de aynı disiplini kullanır.
Yanıt ile ne yapılmalı
Gecikme NVMe bandındaysa, cihaz adını dert etmeyi bırakın ve devam edin. vda bir sürüm düşürme değildir. Çoğu ana makinenin sunduğu en hızlı sanal disk sürücüsüdür ve kullanmanız gereken de budur.
Eğer gecikme, yerel NVMe olarak satılan bir planda ağ depolama bandındaysa, elinizde belirli ve tekrarlanabilir bir iddia var demektir: tam fio komutu, ortalama tamamlama gecikmesi ve testi çalıştırdığınız zamanlar. Bu, bir forum tartışmasından ziyade bir destek talebi konusudur. Göndermeden önce diskin dolu veya aşırı parçalanmış olmadığını doğrulayın ve test sırasında sunucuda yoğun yazma işlemi yapan başka bir süreç olmadığından emin olun.
Bu kontrolü, bir şeylerin yavaş hissettirdiği gün değil, sunucuyu teslim aldığınız gün yapın; böylece daha sonra karşılaştırma yapabileceğiniz bir temel veriniz olur. Bu işlem, yeni bir VPS'teki ilk on dakika rehberine, güvenlik duvarı ve SSH anahtarlarının ayarlanmasıyla birlikte doğal bir şekilde uyum sağlar. Depolama katmanları arasındaki fark hala belirsizse, bir SSD VPS'in size gerçekte ne sunduğu konusu bu temel bilgileri kapsamaktadır.
FAQ
lsblk komutu neden NVMe donanımına sahip olduğum halde /dev/vda çıktısını veriyor?
Çünkü vda, konuk sisteminizdeki virtio-blk sürücüsünü ifade eder, ana makinedeki donanımı değil. Bir KVM hipervizörü, bir dosya, mantıksal birim veya veri kümesi tarafından desteklenen sanallaştırılmış bir blok aygıtı sunar; bu destekleyici depolama alanı, konuk sistemin haberi olmadan NVMe sürücüleri üzerinde bulunabilir. İsim, sanallaştırma katmanını tanımlar. Yalnızca bir gecikme ölçümü ortamın türünü tanımlayabilir.
rotational 0 değeri NVMe diske sahip olduğumu kanıtlar mı?
Hayır. /sys/block/<dev>/queue/rotational değerinin 0 olması, çekirdeğin aygıtı dönen plakalı bir disk olarak işlemediği anlamına gelir; ancak bir VPS içinde bu bir ölçüm değil, bir ayardır. virtio-blk sürücüsünün ortam türü için bir özellik biti yoktur ve Linux virtio-blk sürücüsü, aksi belirtilmedikçe her disk için 1 raporlar. Bu nedenle, orada görülen bir 0 genellikle birisi tarafından manuel olarak ayarlandığı anlamına gelir. Bu değer, NVMe ile SATA SSD'yi veya yerel flash bellek ile ağ birimini birbirinden ayıramaz. Bir VPS içindeki 1 değeri, fiziksel bir sabit diskin varlığını da kanıtlamaz; bu yüzden bu bayrağa değil, fio gecikme değerlerine göre hareket edin.
VPS üzerinde nvme list komutu neden boş dönüyor?
Çünkü konuk sisteminize hiçbir NVMe denetleyicisi sunulmamıştır. nvme list ve lspci komutlarının her ikisi de sanal makinenin görebildiklerini okur; bir virtio-blk veya virtio-scsi diski, listelenecek bir NVMe denetleyicisi sunmaz. Çoğu VPS planında boş bir tablo normal bir sonuçtur ve ana makinede NVMe sürücülerinin bulunmadığının kanıtı değildir. nvme-cli aracını sudo apt install -y nvme-cli ile kurun ve bir denetleyici doğrudan geçirilmediği (passthrough) sürece boş bir tablo görmeyi bekleyin.
Hangi fio sonucu NVMe sınıfı depolama olarak kabul edilir?
Kuyruk derinliği 1'de (queue depth 1), 4k rastgele okuma ve --direct=1 ile yapılan testlerde, 110 mikrosaniye civarındaki ortalama tamamlanma gecikmesi NVMe sınıfıdır ve bu değer yaklaşık 9,000 IOPS değerine karşılık gelir. 320 mikrosaniye civarı bir SATA SSD'ye, 900 mikrosaniye civarı ise ana makinenin önbelleğine takılmayan okumaların bir ağ sıçraması gerçekleştirdiği ağ tabanlı depolamaya veya ana makinenin hız sınırlaması uyguladığı bir birime işaret eder. Bunlar Ağustos 2026 itibarıyla tipik yayınlanmış bant aralıklarıdır; bu nedenle kesin rakamlardan ziyade büyüklük sıralarını karşılaştırın ve bir sonuca varmadan önce testi farklı saatlerde tekrarlayın.