Różnica między sdX i vdX


33

Kiedy używam Ubuntu i CentOS, widzę /dev/sdai /dev/vda. Więc nie rozumiem, czym różni się między powyższymi dwoma?


Czy jeden z nich jest na maszynie wirtualnej?
goldilocks

Tak. Używam VM .. :)
Supun Rathnayake

Odpowiedzi:


29

To różne urządzenia.

/dev/sdajest pierwszym dyskiem, który jest albo SCSI, albo (bardziej prawdopodobne) udostępnia interfejs API napędu SCSI do lądowania użytkownika. Obejmuje to dyski SATA i dyski IDE korzystające z libata. Może to być również IDE / SATA / SCSI / itp. dysk emulowany przez hiperwizora.

/dev/vdajest pierwszym dyskiem korzystającym ze sterownika dysku obsługującego wirtualizację. Wydajność powinna być znacznie lepsza, ponieważ hypervisor nie musi emulować interfejsu sprzętowego.

Jeśli dysk został udostępniony maszynie wirtualnej w obu interfejsach, powinieneś preferować, /dev/vdaponieważ prawie na pewno będzie on szybszy.


2
Jaki byłby cel posiadania urządzeń / dev / sdX i / dev / vdX na komputerze?
chromechris,

1
@ user42076 Jedyne, co mogę wymyślić, to firma hostingowa, która nie wie dokładnie, jaki system operacyjny działa na swojej maszynie wirtualnej, może oferować oba interfejsy, na wypadek gdyby Twój system operacyjny nie obsługiwał szybszego /dev/vda. Poza tym ... nie mam pojęcia, dlaczego to zrobiłeś. Jeśli faktycznie gdzieś to robisz, prawdopodobnie warto zadać sobie pytanie.
derobert

@ user42076 Tak, zamierzam o to zapytać. . . . . lol
chromechris

15

/dev/sdxi /dev/hdxsą dyskami fizycznymi (twardymi) lub emulowanymi dyskami fizycznymi (twardymi). Kiedy jądro lub jakiś program we / wy do nich wykonuje, robi różne rzeczy, takie jak doprowadzanie dysku we właściwe miejsce i wykonywanie różnego rodzaju „fizycznych rzeczy”.

/dev/vdxjest przeznaczony dla wirtualnych (twardych) dysków. Jądro, które wykonuje operacje we / wy, mówi wszystkim oprogramowaniu do wirtualizacji, że bity należy odczytać / zapisać i gotowe. Zasadniczo vdxjest szybszy, ponieważ jądro nie musi mówić dyskowi twardemu, aby zrobił całą masę losowych śmieci, które tak naprawdę nie powinny być potrzebne, ponieważ po prostu musi poinformować hiperwizora VM, aby zrobił różne rzeczy.

Przepraszam za słowo „rzeczy”, nie mogłem wymyślić lepszego słowa: D


Słowo było pełne ekspresji - dziękuję za odpowiedź.
mikeserv

1
Rzeczy? Nie można pomyśleć o „czymś” lub „żądanej operacji IO”. Przeprosiny nie są akceptowane. ;)
Johan

4

W udevregułach /lib/udev/rules.d/*jest zdefiniowany, jaki rodzaj sprzętu pobiera nazwę z jądra.

Zobacz zasady dotyczące /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}"

Podobnie /dev/vdajest z pierwszym wirtualnym dyskiem twardym (bez identyfikatorów sprzętowych) i identyfikatorem magistrali virtio. Wygląda na gościa qemu / kvm.

Reguły udev dla /dev/sd*urządzeń mogą być bardziej różnymi typami sprzętu: scsi, ata, ieee1394, usb, ...


2

/dev/ jest częścią drzewa katalogów unix, która zawiera wszystkie pliki „urządzeń” - unix tradycyjnie traktuje prawie wszystko, co można uzyskać, jako plik do odczytu lub zapisu.

Zasadniczo więc /dev/sdawszystkie pliki urządzeń znajdują się na dysku twardym, a /dev/vdawszystkie pliki urządzeń znajdują się w miejscu przydzielonym dla maszyny wirtualnej.


0

Jednym z dość fundamentalnych /dev/.daróżnic między tymi plikami urządzeń, o których jeszcze nie wspomniano, jest to, że reprezentują różne główne liczby jądra . Jeśli podążysz za tym linkiem, wylądujesz na stronie dokumentacji źródłowej jądra zawierającej tabelę zawierającą głównie wszystkie przydzielone główne numery urządzeń. Ten sam plik jest również bardzo prawdopodobne na twoim twardym dysku.

Oto, co pokazało mi szybkie CTRL-F w związku z twoim pytaniem:

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.

112Numer podany na górze wskazuje przydzielony numer główny oraz różne 0...8...200numery wymienione przed każdą linią wskazania możliwych zakresów numerycznych niewielkie. Liczby te, między innymi, są używane przez jądro Linuksa do parowania modułów sterowników z urządzeniami fizycznymi - identyfikują typ urządzenia.

Powyższa lista zawiera 3 z 4 dopasowań znalezionych za pomocą CTRL-F - oto czwarty:

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.

Zdecydowanie wydaje się, że istnieje pewien trend wśród vdatypów bloków. Zauważ, że mogą one nie być całkowicie aktualne w dokumentacji - nawet jak na link w kernel.org. W końcu twórcy są tylko ludźmi. Ale innym możliwym źródłem rozbieżności jest miejsce, w którym opiekunowie Twojej dystrybucji zdecydowali się zlokalizować urządzenia. Duża liczba wymienionych ścieżek to niewiele więcej niż sugestie - istnieje wiele sposobów ich przeniesienia.

A oto 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.

Jak już wspomniano - te ścieżki są doskonale konfigurowalne - ale same liczby główne / podrzędne służą jako dość wyraźne identyfikatory. Możesz to sprawdzić, statwywołując plik urządzenia.

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

To mój /dev/sda. Jest tam wiele informacji, ale po prawej stronie widać, że Device Typejest on określony jako numer główny 8, numer dodatkowy 0. Można w ten sposób zidentyfikować dowolny plik urządzenia, porównując jego maj / min z połączoną tabelą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.