sdX 和 vdX 的区别

Sup*_*ake 35 virtual-machine udev

当我使用 Ubuntu 和 CentOS 时,我看到/dev/sda/dev/vda. 所以我无法理解上述两者之间有什么不同?

der*_*ert 31

它们是不同的设备。

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

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

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

  • 在一台机器中同时拥有 /dev/sdX 和 /dev/vdX 设备的目标是什么? (2认同)

小智 17

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

/dev/vdx用于虚拟(硬盘)磁盘驱动器。内核在 I/O 时所做的就是告诉虚拟化软件需要读/写位,然后就完成了。一般来说,vdx速度更快,因为内核不需要告诉硬盘驱动器做一大堆真正不需要的随机垃圾,因为它只需要告诉虚拟机管理程序做一些事情。

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


cha*_*aos 5

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}"
Run Code Online (Sandbox Code Playgroud)

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

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