/dev/vda 和 /dev/sda 有什么区别

Mat*_*ert 23 virtualization devices

我正在准备认证,并在本地安装了 CentOS7(VirtualBox)和基于云的服务中的另一个实例。

在本地系统上我有一个/dev/sda,在基于云的系统上我有一个/dev/vda.

现在我想知道这种差异究竟意味着什么?这个设备的命名是否有标准(文档?),不同的名称代表什么?

编辑:

我觉得这个文档对理解命名非常有用:https : //www.kernel.org/doc/Documentation/admin-guide/devices.txt

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

但是我找不到关于/dev/vda 的一些信息。

Thi*_*sto 25

完全虚拟化与半虚拟化

/dev/sda是第一个检测到的 IDE/SATA/SCSI 类型的磁盘。在这种情况下,由管理程序模拟(完全虚拟化)。

/dev/vda是第一个检测到的半虚拟化磁盘驱动程序。如果两者都指向同一个磁盘,它比模拟 sdX 设备更快,因为与模拟驱动器相比,其操作开销更少。

参考:


http://www.ibm.com/developerworks/library/l-virtio/

完全虚拟化与半虚拟化

让我们先快速讨论两种不同类型的虚拟化方案:完全虚拟化和半虚拟化。在完全虚拟化中,来宾操作系统运行在位于裸机上的管理程序之上。来宾不知道它正在被虚拟化,因此无需更改即可在此配置中工作。相反,在半虚拟化中,来宾操作系统不仅知道它在虚拟机管理程序上运行,而且还包含使来宾到管理程序转换更高效的代码。

在完全虚拟化方案中,管理程序必须模拟设备硬件,它在对话的最低级别进行模拟(例如,对网络驱动程序进行模拟)。尽管在这种抽象上仿真是干净的,但它也是最低效和最复杂的。在半虚拟化方案中,guest 虚拟机和管理程序可以协同工作,使这种模拟有效。半虚拟化方法的缺点是操作系统知道它正在被虚拟化并且需要修改才能工作。

来自http://www.carfax.org.uk/docs/qemu-virtio

什么是半虚拟设备?

运行虚拟机时,虚拟环境必须向来宾操作系统提供设备——磁盘和网络是主要的两个(加上视频、USB、计时器等)。实际上,这是 VM 来宾看到的硬件。

现在,如果要让来宾完全不知道它是虚拟化的,这意味着主机必须模拟某种真实的硬件。这非常慢(特别是对于网络设备),并且是虚拟机性能降低的主要原因。

但是,如果您愿意让来宾操作系统知道它处于虚拟环境中,则可以避免模拟大部分真实硬件的开销,并使用更直接的路径来处理 VM 内的设备。这种方法称为半虚拟化。在这种情况下,客户操作系统需要安装一个特定的驱动程序来与准虚拟设备通信。在 Linux 下,此接口已标准化,称为“virtio”接口。

  • 此外,virtio-scsi 驱动程序比 virtio-blk 驱动程序更快,后者通过 sd* 寻址驱动器。所以 vd* 并不总是更快它所代表的是一个由半虚拟化驱动程序直接处理的块设备,而不是一个由硬件仿真或半虚拟化控制器间接处理的块设备。 (4认同)
  • 特别是,`/dev/vd*` 设备正在使用 `virtio` 半虚拟磁盘驱动程序。 (3认同)