Kiedy używam Ubuntu i CentOS, widzę /dev/sda
i /dev/vda
. Więc nie rozumiem, czym różni się między powyższymi dwoma?
Kiedy używam Ubuntu i CentOS, widzę /dev/sda
i /dev/vda
. Więc nie rozumiem, czym różni się między powyższymi dwoma?
Odpowiedzi:
To różne urządzenia.
/dev/sda
jest 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/vda
jest 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/vda
ponieważ prawie na pewno będzie on szybszy.
/dev/vda
. Poza tym ... nie mam pojęcia, dlaczego to zrobiłeś. Jeśli faktycznie gdzieś to robisz, prawdopodobnie warto zadać sobie pytanie.
/dev/sdx
i /dev/hdx
są 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/vdx
jest 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 vdx
jest 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
W udev
reguł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/vda
jest 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, ...
/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/sda
wszystkie pliki urządzeń znajdują się na dysku twardym, a /dev/vda
wszystkie pliki urządzeń znajdują się w miejscu przydzielonym dla maszyny wirtualnej.
Jednym z dość fundamentalnych /dev/.da
róż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.
112
Numer podany na górze wskazuje przydzielony numer główny oraz różne 0...8...200
numery 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 vda
typó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ć, stat
wywoł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 Type
jest 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ą.