Differenza tra sdX e vdX


33

Quando uso Ubuntu e CentOS, vedo /dev/sdae /dev/vda. Quindi non riesco a capire qual è la differenza tra i due precedenti?


Uno di questi è in una macchina virtuale?
Goldilocks,

Sì. Sto usando VM .. :)
Supun Rathnayake, il

Risposte:


29

Sono dispositivi diversi.

/dev/sdaè il primo disco che è SCSI o (più probabilmente) che fornisce l'API dell'unità SCSI per atterrare l'utente. Ciò include le unità SATA e le unità IDE che usano libata. Questo può anche essere un IDE / SATA / SCSI / ecc. unità emulata dall'hypervisor.

/dev/vdaè il primo disco che utilizza il driver del disco compatibile con la virtualizzazione. Le prestazioni dovrebbero essere molto migliori, poiché l'hypervisor non deve emulare alcune interfacce hardware.

Se il disco è stato esposto alla tua VM in entrambe le interfacce, dovresti preferire /dev/vdain quanto sarà quasi sicuramente più veloce.


2
Quale sarebbe l'obiettivo di avere entrambi i dispositivi / dev / sdX e / dev / vdX in una macchina?
Chromechris,

1
@ user42076 L'unica cosa che mi viene in mente è una società di hosting che non sa esattamente quale sistema operativo in esecuzione sulla sua VM possa offrire entrambe le interfacce, nel caso in cui il tuo sistema operativo non supporti il ​​più veloce /dev/vda. A parte questo ... non ho idea del perché lo faresti. Se lo stai vedendo effettivamente fatto da qualche parte, probabilmente vale la sua domanda.
derobert il

@ user42076 Sì, ho intenzione di chiedere questo. . . . . lol
chromechris,

15

/dev/sdxe /dev/hdxsono unità disco (rigide) fisiche o unità disco (rigide) fisiche emulate. Quando il kernel o alcuni I / O del programma sono su questi, fa ogni sorta di cose come portare il disco nel posto giusto e fare ogni sorta di "roba" fisica specifica.

/dev/vdxè per unità disco (rigide) virtuali. Tutto ciò che il kernel fa quando deve eseguire l'I / O è dire al software di virtualizzazione che i bit devono essere letti / scritti e il gioco è fatto. In generale, vdxè più veloce perché il kernel non ha bisogno di dire al disco rigido di fare un sacco di spazzatura casuale che in realtà non dovrebbe essere necessaria perché deve solo dire all'hypervisor VM di fare cose.

Mi scuso per la parola "roba", non riuscivo a pensare a una parola migliore: D


La parola è stata molto espressiva - grazie per la risposta.
Mikeserv,

1
Cose? Non si potrebbe pensare a "qualcosa" o "l'operazione di I / O richiesta". Scuse non accettate ;)
Johan

4

Nelle udevregole in /lib/udev/rules.d/*è definito quale tipo di hardware ottiene quale nome dal kernel.

Vedi le regole per /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}"

Così /dev/vdaè il primo disco rigido virtuale (senza identificatori hardware) e un ID bus virtio. Sembra un ospite qemu / kvm.

Le regole udev per i /dev/sd*dispositivi possono essere tipi di hardware più diversi: scsi, ata, ieee1394, usb, ...


2

/dev/ è la parte nella struttura di directory di unix che contiene tutti i file "dispositivo": unix tratta tradizionalmente quasi tutto ciò a cui è possibile accedere come file da cui leggere o scrivere.

Quindi, in sostanza, /dev/sdasono tutti i file di dispositivo trovati nel tuo Harddrive mentre /dev/vdasono tutti i file di dispositivo trovati nello spazio allocato per la tua macchina virtuale.


0

Un modo abbastanza fondamentale in cui /dev/.dadifferiscono questi file di dispositivo che non è stato ancora menzionato è che rappresentano numeri principali del kernel diversi . Se segui quel link, finirai su una pagina di documentazione sorgente del kernel che contiene una tabella contenente principalmente tutti i principali numeri di dispositivo allocati. Questo stesso file è anche molto probabile sul tuo hard disk da qualche parte.

Ecco cosa mi è emerso in breve CTRL-F per quanto riguarda la tua domanda:

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.

Il 112numero elencato in alto indica il numero maggiore assegnato e i vari 0...8...200numeri elencati prima di ogni riga indicano i possibili intervalli di numeri minori. Questi numeri, tra le altre cose, sono usati dal kernel Linux per accoppiare i moduli driver con dispositivi fisici - identificano un tipo di dispositivo.

L'elenco sopra riportato rappresenta 3 di 4 corrispondenze trovate con CTRL-F - ecco il quarto:

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.

Sembra che ci sia sicuramente una tendenza tra i vdatipi di blocco. Si noti che questi potrebbero non essere completamente aggiornati nella documentazione, anche se collegati a kernel.org. Dopotutto, gli sviluppatori sono solo umani. Ma un'altra possibile fonte di discrepanza è dove i manutentori della tua distribuzione hanno scelto di localizzare i dispositivi. Un gran numero di percorsi elencati equivale a poco più che a suggerimenti: ci sono molti modi per trasferirli.

Ed ecco 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.

Come già notato - questi percorsi sono eminentemente configurabili - ma i numeri maggiori / minori stessi fungono da identificatori piuttosto espliciti. Puoi verificarli con una statchiamata a un file del 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: -

Questo è il mio /dev/sda. Ci sono molte informazioni lì, ma a destra puoi vedere che Device Typeè specificato come numero maggiore 8, numero minore 0. Puoi identificare praticamente qualsiasi file di dispositivo in questo modo confrontando il suo maj / min con la tabella collegata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.