/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.
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.
/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, ...
/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.
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.
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.
Respostas:
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.fonte
/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./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
fonte
Nas
udev
regras,/lib/udev/rules.d/*
é definido que tipo de hardware obtém qual nome do kernel.Veja as regras para
/dev/vd*
:Assim
/dev/vda
é o primeiro disco rígido virtual (sem identificadores de hardware) e uma identificação de barramentovirtio
. 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, ...fonte
/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/sda
são todos os arquivos de dispositivo encontrados no seu disco rígido, enquanto/dev/vda
todos os arquivos de dispositivo são encontrados no espaço alocado para sua máquina virtual.fonte
Uma maneira bastante fundamental pela qual esses
/dev/.da
arquivos 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:
O
112
nú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:
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
: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
stat
chamada para um arquivo de dispositivo.Essa é a minha
/dev/sda
. Há muita informação lá, mas à direita você pode ver que eleDevice 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.fonte