Когда я использую Ubuntu и CentOS, я вижу /dev/sdaи /dev/vda. Так что я не могу понять, в чем разница между двумя выше?
Когда я использую Ubuntu и CentOS, я вижу /dev/sdaи /dev/vda. Так что я не могу понять, в чем разница между двумя выше?
Ответы:
Это разные устройства.
/dev/sdaэто первый диск, который либо SCSI, либо (что более вероятно) предоставляет API-интерфейс диска SCSI для пользователей. Это включает в себя диски SATA и IDE с использованием libata. Это также может быть IDE / SATA / SCSI / и т.д. диск эмулируется гипервизором.
/dev/vdaэто первый диск, использующий драйвер диска с поддержкой виртуализации. Производительность должна быть намного лучше, поскольку гипервизор не должен эмулировать какой-либо аппаратный интерфейс.
Если диск был открыт для вашей виртуальной машины под обоими интерфейсами, вы должны предпочесть, /dev/vdaпоскольку он почти наверняка будет быстрее.
/dev/vda. Кроме этого ... понятия не имею, зачем ты это делаешь. Если вы на самом деле видите, что это было сделано где-то, возможно, это стоит того, чтобы ответить на этот вопрос.
/dev/sdxи /dev/hdxявляются физическими (жесткими) дисками или эмулируемыми физическими (жесткими) дисками. Когда ядро или какой-либо программный ввод / вывод работают с ними, он делает все, что угодно, например, приводит диск в нужное место и выполняет всякие физические «вещи».
/dev/vdxдля виртуальных (жестких) дисков. Все, что делает ядро при вводе / выводе, - это сообщает программному обеспечению для виртуализации, что биты должны быть прочитаны / записаны, и все готово. В целом, vdxэто быстрее, потому что ядру не нужно указывать жесткому диску делать целую кучу случайного мусора, который на самом деле не нужен, потому что ему просто нужно сказать гипервизору виртуальной машины, чтобы он что-то делал.
Я прошу прощения за слово "вещи", я не мог придумать лучшего слова: D
В 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как и первый виртуальный жесткий диск (без аппаратных идентификаторов) и идентификатор шины virtio. Похоже, гость QEMU / KVM.
Правила udev для /dev/sd*устройств могут быть разных типов оборудования: scsi, ata, ieee1394, usb, ...
/dev/ это часть в дереве каталогов unix, которая содержит все файлы «устройств» - unix традиционно рассматривает практически все, к чему вы можете обращаться, как файл для чтения или записи.
Таким образом, по сути, /dev/sdaэто все файлы устройств, найденные в жестком диске, в то время /dev/vdaкак все файлы устройств находятся в пространстве, выделенном для вашей виртуальной машины.
Один довольно фундаментальный способ /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 для сопряжения модулей драйверов с физическими устройствами - они идентифицируют тип устройства.
Приведенный выше список учитывает 3 из 4 совпадений, найденных с помощью 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 со связанной таблицей.