Perbedaan antara sdX dan vdX

33

Ketika saya menggunakan Ubuntu dan CentOS, saya melihat /dev/sdadan /dev/vda. Jadi saya tidak mengerti apa perbedaan antara dua di atas?

Supun Rathnayake
sumber
Apakah salah satunya di VM?
goldilocks
Iya nih. Saya menggunakan VM .. :)
Supun Rathnayake

Jawaban:

29

Mereka adalah perangkat yang berbeda.

/dev/sdaadalah disk pertama yang entah SCSI atau (lebih mungkin) menyediakan drive SCSI API ke pengguna tanah. Ini termasuk drive SATA dan drive IDE menggunakan libata. Ini juga bisa berupa IDE / SATA / SCSI / dll. drive ditiru oleh hypervisor.

/dev/vdaadalah disk pertama yang menggunakan driver disk virtualisasi-sadar. Kinerja harus jauh lebih baik, karena hypervisor tidak harus meniru beberapa antarmuka perangkat keras.

Jika disk telah terkena VM Anda di kedua antarmuka, Anda harus memilih /dev/vdakarena hampir pasti akan lebih cepat.

derobert
sumber
2
Apa yang menjadi tujuan memiliki kedua perangkat / dev / sdX & / dev / vdX di mesin?
chromechris
1
@ user42076 Satu-satunya hal yang dapat saya pikirkan adalah perusahaan hosting yang tidak tahu persis apa OS yang Anda jalankan pada VM-nya dapat menawarkan kedua antarmuka, jika OS Anda tidak mendukung lebih cepat /dev/vda. Selain itu ... tidak tahu mengapa Anda melakukannya. Jika Anda benar-benar melihatnya dilakukan di suatu tempat, mungkin itu layak untuk ditanyakan sendiri.
derobert
@ user42076 Ya, saya akan bertanya tentang ini. . . . . lol
chromechris
15

/dev/sdxdan /dev/hdxmerupakan drive disk fisik (keras) atau drive disk fisik (keras) yang diemulasikan. Ketika kernel atau program I / O's untuk ini, ia melakukan segala macam hal seperti membawa disk ke tempat yang tepat dan melakukan segala macam "barang" spesifik fisik.

/dev/vdxadalah untuk drive disk virtual (keras). Semua kernel tidak ketika itu I / O akan memberitahu perangkat lunak virtualisasi bahwa bit perlu dibaca / ditulis dan selesai. Secara umum, vdxini lebih cepat karena kernel tidak perlu memberitahu hard drive untuk melakukan sejumlah sampah acak yang benar-benar tidak diperlukan karena hanya perlu memberitahu hypervisor VM untuk melakukan hal-hal.

Saya minta maaf untuk kata "barang," saya tidak bisa memikirkan kata yang lebih baik: D

Zeb McCorkle
sumber
Kata itu banyak ekspresif - terima kasih atas jawaban Anda.
mikeserv
1
Barang? Anda tidak dapat memikirkan "sesuatu" atau "operasi IO yang diminta". Permintaan maaf tidak diterima. ;)
Johan
4

Dalam udevaturan di /lib/udev/rules.d/*didefinisikan jenis perangkat keras mana yang mendapatkan nama dari kernel.

Lihat aturan untuk /dev/vd*:

# partitions do not have hardware identifiers
ENV{DEVTYPE}!="disk",                   GOTO="persistent_storage_not_a_disk"
# nor do paravirtualized hard disks
KERNEL=="vd*",                          GOTO="persistent_storage_not_a_disk"

...

KERNEL=="vd*",                          ATTRS{serial}=="?*", \
ENV{ID_BUS}="virtio",   ENV{ID_SERIAL}="$attr{serial}"

Begitu /dev/vdajuga yang pertama, hard drive virtual (tidak ada pengidentifikasi perangkat keras) dan id bus virtio. Sepertinya tamu qemu / kvm.

Aturan udev untuk /dev/sd*perangkat dapat berupa tipe perangkat keras yang lebih berbeda: scsi, ata, ieee1394, usb, ...

kekacauan
sumber
2

/dev/ adalah bagian dalam pohon direktori unix yang berisi semua file "perangkat" - unix secara tradisional memperlakukan hampir semua yang dapat Anda akses sebagai file untuk dibaca atau ditulis.

Jadi pada intinya, /dev/sdasemua file perangkat ditemukan di Harddrive Anda sedangkan /dev/vdasemua file perangkat ditemukan di ruang yang dialokasikan untuk mesin virtual Anda.

ryekayo
sumber
0

Satu cara yang cukup mendasar di mana /dev/.dafile - file perangkat ini berbeda yang belum disebutkan adalah bahwa mereka mewakili nomor-nomor utama kernel yang berbeda . Jika Anda mengikuti tautan itu, Anda akan mendarat di halaman dokumentasi sumber kernel yang berisi tabel sebagian besar semua nomor utama perangkat yang dialokasikan. File yang sama ini juga sangat mungkin ada di harddisk Anda di suatu tempat.

Inilah yang diajukan CTRL-F singkat untuk saya mengenai pertanyaan Anda:

112 block IBM iSeries virtual disk
      0 = /dev/iseries/vda  First virtual disk, whole disk
      8 = /dev/iseries/vdb  Second virtual disk, whole disk
        ...
    200 = /dev/iseries/vdz  26th virtual disk, whole disk
    208 = /dev/iseries/vdaa 27th virtual disk, whole disk
        ...
    248 = /dev/iseries/vdaf 32nd virtual disk, whole disk

    Partitions are handled in the same way as for IDE
    disks (see major number 3) except that the limit on
    partitions is 7.

The 112nomor yang tercantum di atas menunjukkan angka utama dialokasikan dan berbagai 0...8...200nomor yang terdaftar sebelum setiap baris menunjukkan kemungkinan rentang jumlah kecil. Angka-angka ini, di antara banyak hal lain, digunakan oleh kernel linux untuk memasangkan modul driver dengan perangkat fisik - mereka mengidentifikasi tipe perangkat.

Daftar di atas menyumbang 3 dari 4 pertandingan yang ditemukan dengan CTRL-F - inilah yang keempat:

202 block   Xen Virtual Block Device
      0 = /dev/xvda       First Xen VBD whole disk
      16 = /dev/xvdb      Second Xen VBD whole disk
      32 = /dev/xvdc      Third Xen VBD whole disk
        ...
      240 = /dev/xvdp     Sixteenth Xen VBD whole disk

            Partitions are handled in the same way as for IDE
            disks (see major number 3) except that the limit on
            partitions is 15.

Tampaknya ada kecenderungan di antara vdajenis blok. Perhatikan bahwa ini mungkin tidak sepenuhnya terbaru dalam dokumentasi - bahkan sebagaimana ditautkan di kernel.org. Bagaimanapun, para devs hanyalah manusia. Tetapi sumber ketidaksesuaian lain yang mungkin adalah di mana pengelola distribusi Anda memilih untuk menemukan perangkat. Sejumlah besar jalur yang terdaftar jumlahnya tidak lebih dari saran - ada banyak cara untuk memindahkannya.

Dan inilah sda:

8 block SCSI disk devices (0-15)
      0 = /dev/sda      First SCSI disk whole disk
     16 = /dev/sdb      Second SCSI disk whole disk
     32 = /dev/sdc      Third SCSI disk whole disk
        ...
    240 = /dev/sdp      Sixteenth SCSI disk whole disk

    Partitions are handled in the same way as for IDE
    disks (see major number 3) except that the limit on
    partitions is 15.

Seperti yang sudah dicatat - jalur ini sangat dapat dikonfigurasi - tetapi bilangan utama / minor sendiri berfungsi sebagai pengidentifikasi yang cukup eksplisit. Anda dapat memeriksanya dengan statpanggilan ke file perangkat.

stat /dev/sda

  File: ‘/dev/sda’
  Size: 0               Blocks: 0          IO Block: 4096   block special file
Device: 5h/5d   Inode: 7598        Links: 1     Device type: 8,0
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)
Access: 2014-07-18 11:10:13.112495427 -0700
Modify: 2014-07-16 18:59:41.313323401 -0700
Change: 2014-07-16 18:59:41.313323401 -0700
 Birth: -

Itu milik saya /dev/sda. Ada banyak informasi di sana, tetapi di sebelah kanan Anda dapat melihat bahwa Device Typeitu ditentukan sebagai nomor utama 8, nomor kecil 0. Anda dapat id hampir semua file perangkat dengan cara itu dengan membandingkan maj / min ke tabel yang ditautkan.

mikeserv
sumber