sdX和vdX之间的区别


Answers:


29

他们是不同的设备。

/dev/sda是第一个使用SCSI或(更可能)将SCSI驱动器API提供给用户土地的磁盘。这包括使用libata的SATA驱动器和IDE驱动器。这也可以是IDE / SATA / SCSI / etc。系统管理程序模拟的驱动器。

/dev/vda是使用虚拟化感知磁盘驱动程序的第一个磁盘。由于虚拟机管理程序不必模拟某些硬件接口,因此性能应该会好得多。

如果磁盘在两个接口下都已暴露给您的VM,则您应该选择磁盘,/dev/vda因为它几乎肯定会更快。


2
在机器中同时拥有/ dev / sdX和/ dev / vdX设备的目标是什么?
chromechris '16

1
@ user42076我唯一能想到的是一个托管公司,如果您的OS不支持更快的速度,那么它不完全知道您在其VM上运行的OS可以同时提供两个接口/dev/vda。除此之外...不知道为什么要这么做。如果您实际上在某处看到它完成了,那么可能值得考虑一下。
derobert

@ user42076是的,我要问这个。。。。。大声笑
chromechris '16

15

/dev/sdx并且/dev/hdx是物理(硬盘)磁盘驱动器或模拟的物理(硬盘)磁盘驱动器。当内核或某个程序的I / O对它们进行处理时,它会执行各种操作,例如将磁盘放到正确的位置并进行各种物理特定的“填充”。

/dev/vdx用于虚拟(硬盘)驱动器。当需要I / O时,内核所做的所有事情就是告诉虚拟化软件需要读取/写入位,并且已经完成。通常,vdx速度更快是因为内核不需要告诉硬盘驱动器来做一堆真正不需要的随机垃圾,因为它只需要告诉VM虚拟机管理程序即可完成工作。

我为“东西”这个词表示歉意,我想不出更好的词了:D


这个词表达力很强-感谢您的回答。
mikeserv

1
东西?您无法想到“某物”或“请求的IO操作”。道歉不被接受。;)
Johan

4

udev规则中/lib/udev/rules.d/*定义了哪种硬件从内核获取哪个名称。

请参阅以下规则/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}"

所以/dev/vda是第一,虚拟硬盘(无硬件identificators)和总线ID virtio。看起来像qemu / kvm来宾。

/dev/sd*设备的udev规则可以是更多不同的硬件类型:scsi,ata,ieee1394,usb,...


2

/dev/ 是Unix目录树中包含所有“设备”文件的部分-UNIX传统上将您可以访问的所有内容都视为文件,以供读取或写入。

因此,实质上,/dev/sda是在硬盘驱动器中找到的所有设备文件,而在/dev/vda为虚拟机分配的空间中找到的所有设备文件。


0

/dev/.da尚未提及的这些设备文件的一种相当基本的方式是,它们代表不同的内核主编号。如果您点击该链接,您将进入内核源代码文档页面,其中包含一个主要由以下内容组成的表所有已分配设备主编号的表。同一文件也很可能在您硬盘上的某个位置。

这是关于您的问题的快速CTRL-F对我浮出水面的:

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.

112顶部列出的数字表示分配的专业编号和各种0...8...200号码,每行之前列出数字指示可能的次要电话号码范围。这些数字,除其他外,Linux内核用于将驱动程序模块与物理设备配对-它们标识设备类型。

上面的列表说明了CTRL-F找到的4个匹配项中的3个-这是第四个:

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.

vda块类型之间肯定存在趋势。请注意,这些内容在文档中可能不是最新的-甚至链接到kernel.org。毕竟,开发人员只是人。但是,差异的另一个可能来源是您的发行版的维护人员选择查找设备的位置。列出的大量路径只不过是建议而已-有许多方法可以将其重新放置。

这是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.

如前所述,这些路径是可配置的,但是主要/次要数字本身是非常明确的标识符。您可以通过stat调用设备文件来检查这些内容。

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: -

那是我的/dev/sda。那里有很多信息,但是在右边您可以看到它Device Type被指定为主要数字8,次要数字0。通过将其设备的maj / min与链接的表进行比较,可以以此方式标识几乎任何设备文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.