Quando uso o Ubuntu e o CentOS, vejo /dev/sda
e /dev/vda
. Então, eu não consigo entender qual é a diferença entre os dois acima?
Quando uso o Ubuntu e o CentOS, vejo /dev/sda
e /dev/vda
. Então, eu não consigo entender qual é a diferença entre os dois acima?
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.
/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
Nas udev
regras, /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/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.
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:
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 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:
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 stat
chamada 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.