Hálózati blokkoló eszköz
A Network blokkeszköz ( Engl. A hálózati blokk eszköz , rövidítve NBD ) egyfajta virtuális merevlemez , amelyre a számítógép segítségével az Internet Protocol elérheti. Az NBD-t egy NBD szerver biztosítja . Erre a célra saját merevlemezt, merevlemez-partíciót vagy fájlt kínál NBD-ként bizonyos más számítógépekhez ( kliensekhez ). Egy másik számítógép (vagy ugyanaz a számítógép) TCP kapcsolaton keresztül csatlakozhat az NBD szerverhez, majd a saját helyi merevlemezéhez hasonlóan használhatja az NBD-t.
Jelenleg egy teljes NBD implementáció van csak a Linux számára . A Linux az összes tárolóeszközt úgynevezett blokkeszközként címzi . Ha egy Linux számítógépnek hálózati blokkolóeszközt kell használni, akkor az NBD támogatást aktiválni kell a Linux kernel konfigurációjában, vagy be kell tölteni az nbd.ko kernelmodult . Az nbd-client nevű felhasználói hely - segédprogram most biztosítja a TCP kapcsolatot az NBD szerverrel, a meglévő kapcsolat jelzi a kernelt , majd kilép. Ennek az az előnye, hogy a kernelnek nem kell foglalkoznia a kapcsolat létrehozásával (és bármilyen hitelesítéssel stb.).
Az NBD szerver független az operációs rendszertől. Futtatható nem Linux rendszeren is, mivel nincs szükség Linux-specifikus funkciókra. Van egy nbd-server nevű program, amely nem mást csinál, mint egy adott fájlt (vagy partíciót stb.) Átadni egy adott TCP portnak .
Elvileg lehetséges egy számítógép merevlemez nélküli működtetése az NBD-n keresztül, amelynek egyetlen tárolóeszköze az NBD. Mivel azonban a kapcsolat létrehozásához külső programra ( nbd-client ) van szükség, ez csak olyan fogalmakkal valósítható meg, mint például az init-ramdisk , egy virtuális fájlrendszer, amelyet RAM-ban tartanak és magában a kernel tárolja, hogy a hajók számára rendelkezésre álló után használható.
Mivel az NBD eredeti verziójának vannak gyengeségei (például az NBD-nként 4 gigabájtra korlátozódik ), különféle kiterjesztések vannak, amelyek közül néhányat továbbfejlesztett NBD-nek neveznek. Ezek azonban nem kompatibilisek az eredeti NBD-vel.
NBD protokoll (a 2.6 verziótól)
A protokoll bináris protokoll. Az összes többbájtos értéket hálózati bájtsorrendben küldi el .
Kézfogás
Először van egy inicializálási szakasz, amelyben az adatokat kicserélik az NBD szerver és az NBD kliens program között. Ez a protokoll független a Linux kernel NBD illesztőprogramjától, és a különböző NBD implementációktól függ.
Verzió ≤2.9.16
A régi kézfogási protokoll portonként pontosan egy blokkoló eszközt támogat. Amint egy ügyfél csatlakozott az NBD szerverhez, a kiszolgáló a következő adatszerkezetet küldi:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | char [8] | INIT_PASSWD | Azonosító karakterlánc {'N', 'B', 'D', 'M', 'A', 'G', 'I', 'C'}
|
| 8. | uint64_t | cliserv_magic | Varázsszám 0x00420281861253 |
| 16. | uint64_t | export_méret | Az exportált blokkeszköz mérete (bájtban) |
| 24. | uint32_t | zászlók | Zászlók:
|
| 28. | char [124] | fenntartott | Foglalva (jelenleg nulla bájttal töltve) |
Ha az ügyfél nem fogadja el az azonosító karakterláncot vagy a mágikus számot, akkor bezárja a kapcsolatot. Ellenkező esetben a kapcsolat sikeresnek tekinthető.
≥ 2.9.17 verzió
Az új kézfogási protokoll az IANA által regisztrált 10809 portot és egy másik üzenetformátumot használ, amely lehetővé teszi a szervernek, hogy több blokkoló eszközt kínáljon egy TCP porton keresztül, amelyek közül az ügyfél név szerint kiválaszthat egyet. Ezenkívül a 32 bites zászlókat 2 16 bites részre osztották, amelyek lehetővé teszik a szerver-globális és az eszközfüggő zászlók elkülönítését.
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | char [8] | INIT_PASSWD | Azonosító karakterlánc {'N', 'B', 'D', 'M', 'A', 'G', 'I', 'C'}
|
| 8. | uint64_t | cliserv_magic | Varázsszám 0x49484156454F5054 (= "IHAVEOPT") |
| 16. | uint16_t | server_flags | A teljes kiszolgálóra vonatkozó jelölések. A zászlók értéke általában 0003 hex . A bitek részletesen jelentik:
|
Az ügyfél jelzőivel válaszol. Mivel eddig nem definiáltak zászlókat, csak 32 nulla bitből állnak:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | uint32_t | client_flags | Korábban ugyanaz volt a jelentése, mint a server_flags, általában 0000'0003 hex . |
Ezután az ügyfél különféle opciókat küld, amelyeket a szerver elfogad vagy elutasít:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | uint64_t | cliserv_magic | Varázsszám 0x49484156454F5054 (= "IHAVEOPT") |
| 8. | uint32_t | opció_szám | Azonosító szám / opció típusa |
| 12. | uint32_t | opció_hossz | Az opció hossza (bájtban) |
| 16. | változó | opció_adatok | Opciós adatok (az opció típusától függően) |
Eddig 3 lehetőséget határoztak meg:
| Vezetéknév | érték | fontosságát |
|---|---|---|
| NBD_OPT_EXPORT_NAME | 1 | Az ügyfél kiválasztja a blokkoló eszköz nevét: a név a option_datamezőben következik. Ez az opció automatikusan kilép az opciók listájából. A szerver elküldi az inicializálás eszközfüggő részét (lásd alább).
|
| NBD_OPT_ABORT | 2 | Az ügyfél meg akarja szakítani a kapcsolatot |
| NBD_OPT_LIST | 3 | Az ügyfél kér egy listát az exportált blokkeszközök nevéről |
A kiszolgáló válaszcsomaggal válaszol egy válaszcsomaggal:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | uint64_t | válasz_mágikus | Varázsszám 0x0003e889045565a9 |
| 8. | uint32_t | opció_szám | Azonosító szám / választható opció típusa |
| 12. | uint32_t | válasz_típus | A válasz típusa |
| 16. | uint32_t | válasz_hossz | A válaszadatok hossza |
| 20 | változó | válasz_adatok | Válaszadatok, ha a válasz_hossz> 0 |
A következő választípusokat határozták meg eddig:
| Vezetéknév | érték | fontosságát |
|---|---|---|
| NBD_REP_ACK | 1 | A szerver elfogadja az opciót, vagy nincs további válaszadata (az NBD_OPT_LIST használatával) |
| NBD_REP_SERVER | 2 | A blokkoló eszköz leírása. Ezt követi a név hossza 32 bites számként, a név és - ha van még hely a válaszcsomagban - további leíró részletek egyszerű szövegben. |
| NBD_REP_ERR_UNSUP | 8000 0001 hex | Az ügyfél ismeretlen lehetőséget küldött |
| NBD_REP_ERR_POLICY | 8000 0002 hex | A szerver megértette az opciót, de a szerver nem fogadhatja el az opciót (pl. Az NBD_OPT_LIST engedélyezhető vagy tiltható a konfigurációs fájlban) |
| NBD_REP_ERR_INVALID | 8000 0003 hex | A szerver megértette az opciót, de szintaktikailag érvénytelen volt |
| NBD_REP_ERR_PLATFORM | 8000 0004 hex | Az opciót nem támogatja az a platform, amelyen a kiszolgáló fut. (jelenleg nem használt) |
A tárgyalási szakasz befejeződik, amint a szerver pozitívan nyugtázta az NBD_OPT_EXPORT_NAME opciót. Ezután elküldi az exportált blokkeszköz azonosító adatait az ügyfélnek:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | uint64_t | eszköz_méret | Az exportált blokkeszköz mérete (bájtban) |
| 8. | uint16_t | device_flags | Az exportált eszközre vonatkozó jelölések:
|
| 10. | uint8_t [124] | párnázás | nem használt, mind a 0 |
Adatfázis
Az NBD kliens speciális rendszerhívásokon keresztül továbbítja a blokkeszköz méretére, az esetleges zászlókra és a nyitott aljzatra vonatkozó információkat a kernelnek, és megszünteti önmagát. A kernel ekkor átveszi a további kommunikációt ezen a foglalaton keresztül.
Az ügyféloldali kernel most olvasási és írási kéréseket küld a szervernek. Ezek a következő csomagszerkezettel rendelkeznek:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | uint32_t | varázslat | Varázsszám 0x25609513 |
| 4 | uint32_t | típus | 0: olvasási hozzáférés; 1: írási hozzáférés; 2: a csatlakozás vezérelt vége; 3: öblítő gyorsítótár; 4: TRIM parancs |
| 8. | char [8] | törvény | 8 bájt, amelyek azonos módon kerülnek elküldésre a válaszban, így hozzárendelhetők egy kéréshez |
| 16. | uint64_t | tól től | Eltolás (bájtban), ahonnan olvasni / írni lehet |
| 24. | uint32_t | len | Az adatblokk hossza |
Írásbeli hozzáférés esetén az írandó adatok azonnal következnek. A szerver minden kérésre válaszol. Ennek a következő szerkezete van:
| Eltolás | Adattípus | Vezetéknév | leírás |
|---|---|---|---|
| 0 | uint32_t | varázslat | Varázsszám 0x67446698 |
| 4 | uint32_t | hiba | 0 = OK (nem történt hiba) |
| 8. | char [8] | törvény | A fogantyú másolata a kapcsolódó kérésben |
Olvasási kérésekre adott válaszok esetén a kért adatok azonnal következnek.
Lásd még
- Loop eszköz : Ugyanez az ötlet egy helyi eszközzel is
- iSCSI : Versenyző rendszer
- Hálózati fájlrendszer : Más szinten működik, de sokkal szélesebb körben is ismert
