我正在准备认证,并在本地安装了 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
但是我找不到有关 /dev/vda 的一些信息。
答案1
完全虚拟化与半虚拟化
/dev/sda是第一个检测到的 IDE/SATA/SCSI 类型的磁盘。在这种情况下,由虚拟机管理程序模拟(完全虚拟化)。
/dev/vda是第一个检测到的半虚拟化磁盘驱动程序。如果两者都引用同一个磁盘,它比模拟的 sdX 设备更快,因为与模拟驱动器相比,它的操作开销更少。
参考:
从http://www.ibm.com/developerworks/library/l-virtio/:
完全虚拟化与半虚拟化
首先,我们来简单讨论一下两种不同类型的虚拟化方案:完全虚拟化和半虚拟化。在完全虚拟化中,客户操作系统在位于裸机上的虚拟机管理程序上运行。客户操作系统不知道自己正在被虚拟化,并且不需要进行任何更改即可在此配置下工作。相反,在半虚拟化中,客户操作系统不仅知道它在虚拟机管理程序上运行,而且还包含使客户操作系统到虚拟机管理程序的转换更高效的代码。
在完全虚拟化方案中,虚拟机管理程序必须模拟设备硬件,即在对话的最低级别进行模拟(例如,模拟到网络驱动程序)。尽管这种抽象的模拟很清晰,但它也是效率最低、最复杂的。在半虚拟化方案中,客户机和虚拟机管理程序可以协同工作,使这种模拟更加高效。半虚拟化方法的缺点是操作系统知道它正在被虚拟化,需要进行修改才能正常工作。
从http://www.carfax.org.uk/docs/qemu-virtio:
什么是半虚拟设备?
运行虚拟机时,虚拟环境必须向客户操作系统提供设备 - 磁盘和网络是主要设备(另外还有视频、USB、计时器等)。实际上,这是 VM 客户机看到的硬件。
现在,如果要让客户机完全不知道它是虚拟化的,这意味着主机必须模拟某种真实硬件。这非常慢(特别是对于网络设备),并且是虚拟机性能下降的主要原因。
但是,如果您愿意让客户操作系统知道它处于虚拟环境中,则可以避免模拟大量真实硬件的开销,并使用更直接的路径来处理虚拟机内的设备。这种方法称为半虚拟化。在这种情况下,客户操作系统需要安装一个与半虚拟设备通信的特定驱动程序。在 Linux 下,此接口已标准化,称为“virtio”接口。