Diferença entre sdX e vdX


Respostas:


29

Eles são dispositivos diferentes.

/dev/sdaé o primeiro disco que é SCSI ou (mais provável) que fornece a API da unidade SCSI para a terra do usuário. Isso inclui unidades SATA e IDE usando libata. Também pode ser um IDE / SATA / SCSI / etc. unidade emulada pelo hipervisor.

/dev/vdaé o primeiro disco usando o driver de disco com reconhecimento de virtualização. O desempenho deve ser muito melhor, pois o hypervisor não precisa emular alguma interface de hardware.

Se o disco foi exposto à sua VM em ambas as interfaces, você deve preferir /dev/vda, pois certamente será mais rápido.


2
Qual seria o objetivo de ter ambos os dispositivos / dev / sdX e / dev / vdX em uma máquina?
Chromechris

1
@ user42076 A única coisa em que consigo pensar é em uma empresa de hospedagem que não sabe exatamente o SO que você está executando em sua VM poderia oferecer as duas interfaces, caso o seu SO não suporte mais rapidamente /dev/vda. Fora isso ... não faço ideia por que você faria isso. Se você está realmente vendo isso em algum lugar, provavelmente vale a pena.
derobert

@ user42076 Sim, vou perguntar sobre isso. . . . . lol
chromechris

15

/dev/sdx e /dev/hdx são unidades de disco físicas (rígidas) ou unidades de disco físicas (rígidas) emuladas. Quando o kernel ou algum programa de E / S é feito para isso, ele faz todo tipo de coisa, como colocar o disco no lugar certo e fazer todo tipo de "material" físico-específico.

/dev/vdxé para unidades de disco virtuais (rígidas). Tudo o que o kernel faz quando é E / S é informar ao software de virtualização que os bits precisam ser lidos / gravados e pronto. Em geral, vdxé mais rápido, porque o kernel não precisa instruir o disco rígido para fazer um monte de lixo aleatório que realmente não deveria ser necessário, porque só precisa dizer ao hipervisor da VM para fazer as coisas.

Peço desculpas pela palavra "coisas". Não consegui pensar em uma palavra melhor: D


A palavra é bastante expressiva - obrigado pela sua resposta.
Mikeerv

1
Coisa? Você não conseguia pensar em "algo" ou "na operação de E / S solicitada". Desculpas não aceitas. ;)
Johan

4

Nas udevregras, /lib/udev/rules.d/*é definido que tipo de hardware obtém qual nome do kernel.

Veja as regras 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}"

Assim /dev/vdaé o primeiro disco rígido virtual (sem identificadores de hardware) e uma identificação de barramento virtio. Parece um convidado qemu / kvm.

As regras do udev para /dev/sd*dispositivos podem ser de tipos mais diferentes de hardware: scsi, ata, ieee1394, usb, ...


2

/dev/ é a parte da árvore de diretórios do unix que contém todos os arquivos de "dispositivos" - o unix tradicionalmente trata quase tudo o que você pode acessar como um arquivo para ler ou gravar.

Portanto, em essência, /dev/sdasão todos os arquivos de dispositivo encontrados no seu disco rígido, enquanto /dev/vdatodos os arquivos de dispositivo são encontrados no espaço alocado para sua máquina virtual.


0

Uma maneira bastante fundamental pela qual esses /dev/.daarquivos de dispositivo diferem e que ainda não foi mencionado é que eles representam diferentes números principais do kernel . Se você seguir esse link, chegará a uma página de documentação de origem do kernel contendo uma tabela composta principalmente por dos principais números de dispositivos alocados. Esse mesmo arquivo também é muito provável em seu disco rígido em algum lugar.

Aqui está o que uma rápida CTRL-F me apareceu em relação à sua pergunta:

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.

O 112número listado na parte superior indica o número principal alocado e os vários0...8...200 números listados antes de cada linha indicam os possíveis intervalos de números menores. Esses números, entre muitas outras coisas, são usados ​​pelo kernel do linux para emparelhar módulos de driver com dispositivos físicos - eles identificam um tipo de dispositivo.

A lista acima representa 3 de 4 correspondências encontradas com CTRL-F - eis a quarta:

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 haver uma tendência entre vda tipos de bloco. Observe que eles podem não estar completamente atualizados na documentação - mesmo como vinculados no kernel.org. Afinal, os desenvolvedores são apenas humanos. Mas outra fonte possível de discrepância é onde os mantenedores da sua distribuição optaram por localizar os dispositivos. Um grande número de caminhos listados equivale a pouco mais do que sugestões - existem muitas maneiras de realocá-los.

E aqui 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 já foi observado - esses caminhos são eminentemente configuráveis ​​- mas os números maiores / menores servem como identificadores bastante explícitos. Você pode verificá-las com uma statchamada para um arquivo 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: -

Essa é a minha /dev/sda. Há muita informação lá, mas à direita você pode ver que ele Device Typeé especificado como número principal 8, número menor 0. Você pode identificar praticamente qualquer arquivo de dispositivo dessa maneira comparando seu maj / min com a tabela vinculada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.