sdX 和 vdX 之间的区别

sdX 和 vdX 之间的区别

当我使用 Ubuntu 和 CentOS 时,我看到/dev/sda/dev/vda。所以我不明白上面两者有什么不同?

答案1

它们是不同的设备。

/dev/sda是第一个 SCSI 磁盘或(更有可能)向用户空间提供 SCSI 驱动器 API 的磁盘。这包括使用 libata 的 SATA 驱动器和 IDE 驱动器。这也可以是 IDE/SATA/SCSI/等。由虚拟机管理程序模拟的驱动器。

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

如果磁盘已在两个接口下暴露给您的虚拟机,您应该更喜欢,/dev/vda因为它几乎肯定会更快。

答案2

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

/dev/vdx用于虚拟(硬盘)磁盘驱动器。当内核进行 I/O 操作时,它所做的就是告诉虚拟化软件需要读取/写入位,然后就完成了。一般来说,vdx速度更快,因为内核不需要告诉硬盘驱动器执行一大堆随机垃圾,这些垃圾实际上不需要,因为它只需要告诉 VM 管理程序执行操作。

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

答案3

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,虚拟硬盘驱动器(无硬件标识符)和总线 id virtio。看起来像 qemu/kvm 来宾。

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

答案4

这些设备文件的一种相当基本的/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 内核使用这些数字将驱动程序模块与物理设备配对 - 它们标识设备类型。

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

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 与链接的表进行比较来识别几乎任何设备文件。

相关内容