Diferencia entre sdX y vdX

33

Cuando uso Ubuntu y CentOS, veo /dev/sday /dev/vda. Entonces, ¿no puedo entender cuál es la diferencia entre los dos anteriores?

Supun Rathnayake
fuente
¿Está uno de estos en una VM?
Ricitos
Sí. Estoy usando VM .. :)
Supun Rathnayake

Respuestas:

29

Son diferentes dispositivos.

/dev/sdaes el primer disco que es SCSI o (más probablemente) que proporciona la API de la unidad SCSI a la tierra del usuario. Esto incluye unidades SATA y unidades IDE que usan libata. Esto también puede ser un IDE / SATA / SCSI / etc. unidad emulada por el hipervisor.

/dev/vdaes el primer disco que usa el controlador de disco compatible con la virtualización. El rendimiento debería ser mucho mejor, ya que el hipervisor no tiene que emular alguna interfaz de hardware.

Si el disco ha sido expuesto a su VM en ambas interfaces, debería preferirlo, /dev/vdaya que seguramente será más rápido.

derobert
fuente
2
¿Cuál sería el objetivo de tener ambos dispositivos / dev / sdX y / dev / vdX en una máquina?
chromechris
1
@ user42076 Lo único en lo que puedo pensar es en una empresa de alojamiento que no sabe exactamente qué sistema operativo que está ejecutando en su VM podría ofrecer ambas interfaces, en caso de que su sistema operativo no sea más rápido /dev/vda. Aparte de eso ... no tengo idea de por qué lo harías. Si realmente lo está viendo en algún lugar, probablemente valga la pena su propia pregunta.
derobert
@ user42076 Sí, voy a preguntar sobre esto. . . . . lol
chromechris
15

/dev/sdxy /dev/hdxson unidades de disco físicas (duras) o unidades de disco físicas (duras) emuladas. Cuando el núcleo o algún programa de E / S es para estos, hace todo tipo de cosas, como llevar el disco al lugar correcto y hacer todo tipo de "cosas" específicas para el físico.

/dev/vdxes para unidades de disco virtuales (duras). Todo lo que hace el núcleo cuando tiene que hacer I / O es decirle al software de virtualización que los bits necesitan ser leídos / escritos y listo. En general, vdxes más rápido porque el núcleo no necesita decirle al disco duro que haga una gran cantidad de basura aleatoria que realmente no debería ser necesaria porque solo necesita decirle al hipervisor VM que haga cosas.

Pido disculpas por la palabra "cosas", no podría pensar en una palabra mejor: D

Zeb McCorkle
fuente
La palabra es bastante expresiva, gracias por su respuesta.
mikeserv
1
¿Cosas? No se le ocurrió "algo" o "la operación de E / S solicitada". Disculpa no aceptada. ;)
Johan
4

En las udevreglas /lib/udev/rules.d/*se define qué tipo de hardware obtiene qué nombre del núcleo.

Vea las reglas para /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}"

También lo /dev/vdaes el primer disco duro virtual (sin identificadores de hardware) y una identificación de bus virtio. Parece un invitado qemu / kvm.

Las reglas de udev para /dev/sd*dispositivos pueden ser tipos de hardware más diferentes: scsi, ata, ieee1394, usb, ...

caos
fuente
2

/dev/ es la parte del árbol de directorios de Unix que contiene todos los archivos de "dispositivo". Tradicionalmente, Unix trata casi todo lo que puede acceder como un archivo para leer o escribir.

En esencia, /dev/sdatodos los archivos de dispositivos se encuentran en su disco duro, mientras /dev/vdaque todos los archivos de dispositivos se encuentran en el espacio asignado para su máquina virtual.

ryekayo
fuente
0

Una forma bastante fundamental en la que /dev/.dadifieren estos archivos de dispositivos que aún no se ha mencionado es que representan diferentes números principales del núcleo . Si sigue ese enlace, aterrizará en una página de documentación de la fuente del núcleo que contiene una tabla de la mayoría de los números principales de dispositivos asignados. Este mismo archivo también es muy probable en su disco duro en alguna parte.

Esto es lo que me ha surgido un CTRL-F rápido con respecto a su pregunta:

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.

El 112número que aparece en la parte superior indica el número principal asignado y los diversos 0...8...200números que figuran antes de cada línea indican los posibles rangos de números menores. Estos números, entre muchas otras cosas, son utilizados por el kernel de Linux para emparejar módulos de controladores con dispositivos físicos: identifican un tipo de dispositivo.

La lista anterior representa 3 de 4 coincidencias encontradas con CTRL-F : aquí está el cuarto:

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.

Definitivamente parece haber una tendencia entre los vdatipos de bloque. Tenga en cuenta que estos pueden no estar completamente actualizados en la documentación, incluso si están vinculados en kernel.org. Los desarrolladores son, después de todo, solo humanos. Pero otra posible fuente de discrepancia es donde los encargados de su distribución eligieron ubicar los dispositivos. Una gran cantidad de las rutas enumeradas son poco más que sugerencias: hay muchas formas de reubicarlas.

Y aquí está 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.

Como ya se señaló, estas rutas son eminentemente configurables, pero los números mayor / menor sirven como identificadores bastante explícitos. Puede verificar esto con una statllamada a un archivo de dispositivo.

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: -

Esa es mi /dev/sda. Hay mucha información allí, pero a la derecha puede ver que Device Typese especifica como número mayor 8, número menor 0. Puede identificar prácticamente cualquier archivo de dispositivo de esa manera comparando su maj / min con la tabla vinculada.

mikeserv
fuente