Разница между SDX и VDX

33

Когда я использую Ubuntu и CentOS, я вижу /dev/sdaи /dev/vda. Так что я не могу понять, в чем разница между двумя выше?

Супун Ратнаяке
источник
Один из них в ВМ?
Златовласка
Да. Я использую ВМ .. :)
Supun Rathnayake

Ответы:

29

Это разные устройства.

/dev/sdaэто первый диск, который либо SCSI, либо (что более вероятно) предоставляет API-интерфейс диска SCSI для пользователей. Это включает в себя диски SATA и IDE с использованием libata. Это также может быть IDE / SATA / SCSI / и т.д. диск эмулируется гипервизором.

/dev/vdaэто первый диск, использующий драйвер диска с поддержкой виртуализации. Производительность должна быть намного лучше, поскольку гипервизор не должен эмулировать какой-либо аппаратный интерфейс.

Если диск был открыт для вашей виртуальной машины под обоими интерфейсами, вы должны предпочесть, /dev/vdaпоскольку он почти наверняка будет быстрее.

derobert
источник
2
Какова цель наличия на машине обоих устройств / dev / sdX и / dev / vdX?
Chromechris
1
@ user42076 Единственное, о чем я могу думать, - это хостинговая компания, которая не знает точно, какая ОС, на которой вы работаете, на своей виртуальной машине может предложить оба интерфейса, если ваша ОС не поддерживает более быструю /dev/vda. Кроме этого ... понятия не имею, зачем ты это делаешь. Если вы на самом деле видите, что это было сделано где-то, возможно, это стоит того, чтобы ответить на этот вопрос.
Дероберт
@ user42076 Да, я собираюсь спросить об этом. , , , , LOL
Chromechris
15

/dev/sdxи /dev/hdxявляются физическими (жесткими) дисками или эмулируемыми физическими (жесткими) дисками. Когда ядро ​​или какой-либо программный ввод / вывод работают с ними, он делает все, что угодно, например, приводит диск в нужное место и выполняет всякие физические «вещи».

/dev/vdxдля виртуальных (жестких) дисков. Все, что делает ядро ​​при вводе / выводе, - это сообщает программному обеспечению для виртуализации, что биты должны быть прочитаны / записаны, и все готово. В целом, vdxэто быстрее, потому что ядру не нужно указывать жесткому диску делать целую кучу случайного мусора, который на самом деле не нужен, потому что ему просто нужно сказать гипервизору виртуальной машины, чтобы он что-то делал.

Я прошу прощения за слово "вещи", я не мог придумать лучшего слова: D

Зеб маккоркл
источник
Слово было достаточно выразительным - спасибо за ваш ответ.
mikeserv
1
Материал? Вы не могли думать о «чем-то» или «запрошенной операции ввода-вывода». Извинения не принимаются. ;)
Йохан
4

В 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, ...

хаос
источник
2

/dev/ это часть в дереве каталогов unix, которая содержит все файлы «устройств» - unix традиционно рассматривает практически все, к чему вы можете обращаться, как файл для чтения или записи.

Таким образом, по сути, /dev/sdaэто все файлы устройств, найденные в жестком диске, в то время /dev/vdaкак все файлы устройств находятся в пространстве, выделенном для вашей виртуальной машины.

ryekayo
источник
0

Один довольно фундаментальный способ /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 со связанной таблицей.

mikeserv
источник