Unterschied zwischen sdX und vdX

33

Wenn ich Ubuntu und CentOS benutze, sehe ich /dev/sdaund /dev/vda. Also kann ich nicht verstehen, was der Unterschied zwischen den beiden oben ist?

Supun Rathnayake
quelle
Ist eine davon in einer VM?
Goldlöckchen
Ja. Ich benutze VM .. :)
Supun Rathnayake

Antworten:

29

Sie sind verschiedene Geräte.

/dev/sdaDies ist die erste Festplatte, die entweder SCSI oder (wahrscheinlicher) die SCSI-Laufwerk-API für Benutzer bereitstellt. Dies schließt SATA-Laufwerke und IDE-Laufwerke mit libata ein. Dies kann auch eine IDE / SATA / SCSI / etc sein. Laufwerk vom Hypervisor emuliert.

/dev/vdaist die erste Festplatte, die den virtualisierungsfähigen Festplattentreiber verwendet. Die Leistung sollte viel besser sein, da der Hypervisor keine Hardwareschnittstelle emulieren muss.

Wenn die Festplatte unter beiden Schnittstellen Ihrer VM ausgesetzt war, sollten Sie dies vorziehen, /dev/vdada sie mit ziemlicher Sicherheit schneller ist.

derobert
quelle
2
Was wäre das Ziel, wenn beide / dev / sdX- und / dev / vdX-Geräte in einer Maschine vorhanden wären?
Chromechris
1
@ user42076 Das einzige, was ich mir vorstellen kann, ist ein Hosting-Unternehmen, das nicht genau weiß, welches Betriebssystem auf seiner VM beide Schnittstellen bietet, falls Ihr Betriebssystem die schnelleren nicht unterstützt /dev/vda. Davon abgesehen ... keine Ahnung, warum du es tun würdest. Wenn Sie es tatsächlich irgendwo machen lassen, ist es wahrscheinlich eine eigene Frage wert.
Derobert
@ user42076 Ja, ich werde danach fragen. . . . . lol
chromechris
15

/dev/sdxund /dev/hdxsind physische (Festplatten-) Laufwerke oder emulierte physische (Festplatten-) Laufwerke. Wenn der Kernel oder ein Programm E / A-Vorgänge für diese ausführt, werden alle möglichen Dinge ausgeführt, z. B. die Festplatte an die richtige Stelle zu bringen und alle möglichen physikspezifischen "Dinge" zu erledigen.

/dev/vdxist für virtuelle (Festplatten-) Laufwerke. Der Kernel teilt der Virtualisierungssoftware lediglich mit, dass Bits gelesen / geschrieben werden müssen, und fertig. Im Allgemeinen vdxist es schneller, weil der Kernel die Festplatte nicht anweisen muss, eine ganze Reihe zufälliger Junk-E-Mails zu erstellen, die eigentlich nicht benötigt werden sollten, da der VM-Hypervisor lediglich angewiesen werden muss, bestimmte Aufgaben auszuführen.

Ich entschuldige mich für das Wort "Zeug", ich konnte mir kein besseres Wort vorstellen: D

Zeb McCorkle
quelle
Das Wort war sehr aussagekräftig - vielen Dank für Ihre Antwort.
MikeServ
1
Zeug? Sie konnten nicht an "etwas" oder "die angeforderte E / A-Operation" denken. Entschuldigung nicht akzeptiert. ;)
Johan
4

In den udevRegeln in /lib/udev/rules.d/*wird definiert, welche Art von Hardware welchen Namen vom Kernel bekommt.

Siehe die Regeln für /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}"

So /dev/vdaist die erste, virtuelle Festplatte (keine Hardware-Identifikatoren) und eine Bus-ID virtio. Sieht aus wie ein qemu / kvm-Gast.

Die udev-Regeln für /dev/sd*Geräte können verschiedene Hardwaretypen sein: scsi, ata, ieee1394, usb, ...

Chaos
quelle
2

/dev/ ist der Teil in der Unix-Verzeichnisstruktur, der alle "Geräte" -Dateien enthält. Unix behandelt traditionell fast alles, auf das Sie zugreifen können, als Datei, aus der Sie lesen oder in die Sie schreiben können.

Im Wesentlichen befinden sich /dev/sdaalso alle Gerätedateien auf Ihrer Festplatte, während /dev/vdasich alle Gerätedateien auf dem für Ihre virtuelle Maschine zugewiesenen Speicherplatz befinden.

Ryekayo
quelle
0

Ein ziemlich grundlegender /dev/.daUnterschied zwischen diesen Gerätedateien, der noch nicht erwähnt wurde, besteht darin, dass sie unterschiedliche Kernel-Hauptnummern darstellen . Wenn Sie diesem Link folgen, gelangen Sie auf eine Kernel-Quelldokumentationsseite, die eine Tabelle mit den meisten zugewiesenen Gerätenummern enthält. Dieselbe Datei befindet sich höchstwahrscheinlich auch irgendwo auf Ihrer Festplatte.

Hier ist, was für ein schnelles STRG-F für mich in Bezug auf Ihre Frage aufgetaucht ist:

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.

Die 112oben aufgeführte Nummer gibt die zugewiesene Hauptnummer an, und die verschiedenen 0...8...200vor jeder Zeile aufgeführten Nummern geben die möglichen Nebennummernbereiche an. Diese Nummern werden unter anderem vom Linux-Kernel verwendet, um Treibermodule mit physischen Geräten zu koppeln - sie identifizieren einen Gerätetyp.

Die obige Liste enthält 3 von 4 Übereinstimmungen, die mit STRG-F gefunden wurden - hier ist die vierte:

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.

Es scheint definitiv einen Trend unter vdaden Blocktypen zu geben. Beachten Sie, dass diese in der Dokumentation möglicherweise nicht vollständig auf dem neuesten Stand sind - auch wenn sie unter kernel.org verlinkt sind. Die Entwickler sind schließlich nur Menschen. Eine weitere mögliche Ursache für Unstimmigkeiten besteht darin, wo die Verantwortlichen Ihrer Distribution die Geräte gefunden haben. Viele der aufgeführten Pfade sind nur Vorschläge - es gibt viele Möglichkeiten, sie zu verlagern.

Und hier ist 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.

Wie bereits erwähnt, sind diese Pfade in hohem Maße konfigurierbar, aber die Haupt- / Nebennummern selbst dienen als ziemlich explizite Kennungen. Sie können diese durch statAufrufen einer Gerätedatei überprüfen .

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: -

Das ist meine /dev/sda. Dort gibt es viele Informationen, aber rechts können Sie sehen, dass Device Typees als Hauptzahl 8 und Nebenzahl 0 angegeben ist. Sie können so ziemlich jede Gerätedatei identifizieren, indem Sie ihre Maj / Min mit der verknüpften Tabelle vergleichen.

mikeserv
quelle