Différence entre sdX et vdX

33

Quand j'utilise Ubuntu et CentOS, je vois /dev/sdaet /dev/vda. Donc, je ne peux pas comprendre quelle est la différence entre deux ci-dessus?

Supun Rathnayake
la source
Est-ce que l'un d'entre eux est dans une VM?
goldilocks
Oui. J'utilise VM .. :)
Supun Rathnayake

Réponses:

29

Ils sont différents appareils.

/dev/sdaest le premier disque SCSI ou (plus probablement) fournissant l’API du lecteur SCSI à l’utilisateur. Cela inclut les disques SATA et les disques IDE utilisant libata. Cela peut aussi être un IDE / SATA / SCSI / etc. lecteur imité par l'hyperviseur.

/dev/vdaest le premier disque utilisant le pilote de disque prenant en charge la virtualisation. Les performances devraient être bien meilleures, car l'hyperviseur n'a pas à émuler une interface matérielle.

Si le disque a été exposé à votre machine virtuelle sous les deux interfaces, préférez-le, /dev/vdacar il sera certainement plus rapide.

derobert
la source
2
Quel serait l'objectif d'avoir les deux périphériques / dev / sdX et / dev / vdX sur une machine?
chromechris
1
@ user42076 La seule chose à laquelle je peux penser est une société d'hébergement qui ne sait pas exactement quel système d'exploitation vous exécutez sur sa machine virtuelle pourrait offrir les deux interfaces, au cas où votre système d'exploitation ne prend pas en charge le plus rapidement /dev/vda. Autre que cela ... aucune idée pourquoi vous le feriez. Si vous le constatez quelque part, cela vaut probablement la peine de poser sa propre question.
derobert
@ user42076 Oui, je vais poser une question à ce sujet. . . . . lol
chromechris
15

/dev/sdx et /dev/hdx sont des lecteurs de disque physiques (durs) ou des lecteurs de disque physique (durs) émulés. Lorsque le noyau ou un programme fait des entrées / sorties, il fait toutes sortes de choses, comme placer le disque au bon endroit et faire toutes sortes de "choses" spécifiques à la physique.

/dev/vdxest pour les disques virtuels (durs). Tout ce que le noyau fait quand il / elle dit est de dire au logiciel de virtualisation que les bits doivent être lus / écrits et c'est fait. En général, vdxc'est plus rapide, car le noyau n'a pas besoin d'indiquer au disque dur de faire toute une série de fichiers aléatoires inutiles, car il doit simplement indiquer à l'hyperviseur de machine virtuelle d'effectuer certaines tâches.

Je m'excuse pour le mot "substance", je ne pouvais pas penser à un meilleur mot: D

Zeb McCorkle
la source
Le mot est très expressif - merci de votre réponse.
mikeserv
1
Des trucs? Vous ne pouviez pas penser à "quelque chose" ou à "l'opération IO demandée". Les excuses ne sont pas acceptées. ;)
Johan
4

Dans les udevrègles de/lib/udev/rules.d/* on définit quel type de matériel tire quel nom du noyau.

Voir les règles pour /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}"

Il en /dev/vdava de même du premier disque dur virtuel (sans identificateur matériel) et d’un identifiant de bus.virtio . Ressemble à un invité qemu / kvm.

Les règles udev pour les /dev/sd*périphériques peuvent être des types de matériel plus différents: scsi, ata, ieee1394, usb, ...

le chaos
la source
2

/dev/ est la partie de l’arborescence de répertoires unix qui contient tous les fichiers "périphériques" - unix traite généralement à peu près tout ce à quoi vous pouvez accéder en tant que fichier à lire ou à écrire.

En /dev/sdarésumé , tous les fichiers de périphérique trouvés dans votre disque dur /dev/vdasont tous contenus dans l’espace alloué à votre machine virtuelle.

Ryekayo
la source
0

Une différence assez fondamentale entre ces /dev/.dafichiers de périphériques et qui n'a pas encore été mentionnée est qu'ils représentent des nombres majeurs différents du noyau . Si vous suivez ce lien, vous arriverez sur une page de documentation du noyau contenant un tableau contenant la plupart des numéros majeurs de périphériques alloués. Ce même fichier est également très probablement sur votre disque dur quelque part.

Voici ce qu'un rapide CTRL-F a fait surface pour moi concernant votre question:

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.

Le 112numéro en haut indique le numéro majeur attribué et les différents numéros.0...8...200 numéros répertoriés avant chaque ligne indiquent les plages de numéros mineurs possibles. Ces nombres, parmi beaucoup d'autres choses, sont utilisés par le noyau Linux pour associer des modules de pilotes à des périphériques physiques - ils identifient un type de périphérique.

La liste ci-dessus représente 3 sur 4 correspondances trouvées avec CTRL-F - en voici le quatrième:

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.

Il semble bien y avoir une tendance parmi vda les types de blocs. Notez que ces informations peuvent ne pas être complètement à jour dans la documentation, même si elles sont liées à kernel.org. Les développeurs ne sont, après tout, que des humains. Mais une autre source possible de divergence réside dans le choix des responsables de la maintenance de votre distribution pour localiser les périphériques. Un grand nombre des chemins énumérés ne représentent guère plus que des suggestions - il existe de nombreuses façons de les déplacer.

Et voici 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.

Comme indiqué plus haut, ces chemins sont parfaitement configurables, mais les nombres majeurs / mineurs servent eux-mêmes d’identifiants assez explicites. Vous pouvez les vérifier en statappelant un fichier de périphérique.

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

C'est mon /dev/sda. Il y a beaucoup d'informations ici, mais à droite vous pouvez voir qu'il Device Typeest spécifié comme numéro majeur 8, numéro mineur 0. Vous pouvez identifier à peu près n'importe quel fichier de périphérique de cette manière en comparant son rapport maj / min à la table liée.

Mikeserv
la source