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