Diferença entre sdX e vdX

33

Quando uso o Ubuntu e o CentOS, vejo /dev/sda e /dev/vda . Então não consigo entender qual é a diferença entre os dois acima?

    
por Supun Rathnayake 18.07.2014 / 19:30

5 respostas

29

Eles são dispositivos diferentes.

/dev/sda é o primeiro disco que é SCSI ou (mais provavelmente) fornece a API da unidade SCSI ao usuário. Isso inclui unidades SATA e unidades IDE usando libata. Isso também pode ser um IDE / SATA / SCSI / etc. drive emulado 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 hipervisor não precisa emular alguma interface de hardware.

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

    
por 18.07.2014 / 19:49
15

/dev/sdx e /dev/hdx são unidades de disco físico (rígido) ou unidades de disco físico (rígido) emulado. Quando o kernel ou algum programa I / O para estes, faz todos os tipos de coisas como trazer o disco para o local certo e fazer todos os tipos de "coisas físicas" específicas.

/dev/vdx é para unidades de disco virtuais (hard). Tudo o que o kernel faz quando está em E / S é dizer 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 dizer ao disco rígido para fazer um monte de lixo aleatório que realmente não deveria ser necessário, porque ele precisa apenas dizer ao hipervisor da VM para fazer coisas.

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

    
por 19.07.2014 / 02:06
4

No udev regras em /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}"

Portanto, /dev/vda é o primeiro disco rígido virtual (sem identificadores de hardware) e um id de barramento virtio . Parece um convidado qemu / kvm.

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

    
por 18.07.2014 / 19:59
2

/dev/ é a parte na árvore de diretório unix que contém todos os arquivos "device" - unix tradicionalmente trata praticamente tudo que você pode acessar como um arquivo para ler ou gravar.

Portanto, em essência, o /dev/sda é todos os arquivos de dispositivos encontrados em seu disco rígido, enquanto o /dev/vda é todos os arquivos de dispositivos encontrados no espaço alocado para sua máquina virtual.

    
por 18.07.2014 / 19:53
0

Uma maneira bastante fundamental na qual esses arquivos de dispositivo /dev/.da diferem e que ainda não foi mencionado é que eles representam diferentes números principais do kernel . Se você seguir esse link, você acessará uma página de documentação do kernel contendo uma tabela de principalmente todos os números principais do dispositivo alocado. Este mesmo arquivo também é muito provável em seu disco rígido em algum lugar.

Veja o que uma rápida CTRL-F apareceu para mim 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 número 112 listado na parte superior indica o número principal alocado e os vários números 0...8...200 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 os módulos do driver com dispositivos físicos - eles identificam um tipo de dispositivo.

A lista acima representa 3 de 4 correspondências encontradas com CTRL-F - aqui está 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 os tipos de bloco vda . Note que estes podem não estar completamente atualizados na documentação - mesmo quando linkados no kernel.org. Os devs são, afinal, apenas humanos. Mas outra possível fonte de discrepância é onde os mantenedores da sua distribuição escolheram localizar os dispositivos. Um grande número de caminhos listados é pouco mais do que sugestões - há muitas maneiras de realocá-los.

E aqui está o 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 verificar isso com uma chamada stat 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: -

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

    
por 20.07.2014 / 08:58

Tags