Dokumentáció/SL9.3/Rendszer/A hotplug-rendszer

Icon-hotplug.png A hotplug-rendszer vezérli a számítógép legtöbb eszközének inicializását. Ez nem csak a művelet alatt beilleszthető vagy eltávolítható eszközökhöz használható, hanem a rendszer indítása során észlelt összes eszközhöz. Ez a sysfs fájlrendszerrel és az udev paranccsal működik szorosan együtt (Dinamikus eszközcsomópontok és az udev). A fejezetben leírt hardver- és szoftverjellemzők nagy része eltér az IBM S/390 és zSeries gépek esetében.

Bevezetés

A kernel indításáig csak a feltétlenül szükséges eszközök – mint például a buszrendszer, a rendszerindító lemez és a billentyűzet – kerülnek inicializálásra. A kernel aktiválja az összes észlelt eszközre vonatkozó hotplug-eseményeket. Az udevd démon figyeli ezeket az eseményeket és az eszközök inicializálásához meghívja a megfelelő hotplug-parancsfájlokat. Az automatikusan nem felismerhető eszközökhöz, illetve azokhoz, amelyek eseménye a rendszerindítás korai szakaszában elveszett, a coldplug áll rendelkezésre. Ez újra lejátssza a rögzített eseményeket, megkeresi a rendszer nem inicializált eszközeit és statikus konfigurációt használ az olyan régi eszközökhöz, mint például az ISA.

Néhány kivételtől eltekintve a legtöbb eszköz azonnal inicializálásra kerül, amint a rendszerindítás során elérhetővé válik vagy akkor, ha az eszközök üzem közben kerültek csatlakoztatásra. Az inicializálás közben a csatolók bejegyzésre kerülnek a kernelben. Ez a bejegyzés további hotplug-eseményeket aktivál, amelyek kiváltják a megfelelő csatoló automatikus konfigurációját.

A SUSE LINUX korábbi verziói a konfigurációs adatok statikus halmazát használták alapul az eszközök inicializálásához. A rendszer ezután végignézi az összes rendelkezésre álló eszközt és megkeresi a megfelelő konfigurációs adatokat, vagy előállítja ezeket.

A legfontosabb hotplug-funkciók beállítása két fájlban történik. Az első az /etc/sysconfig/hotplug fájl, amely a hotplug és coldplug viselkedését befolyásoló változókat tartalmazza. Minden változó mellett megjegyzés található. A második fájl, a /proc/sys/kernel/hotplug tartalmazza a kernel által meghívott végrehajtható program nevét. Az eszközbeállításokat az /etc/sysconfig/hardware könyvtár tartalmazza. A SUSE LINUX 9.3-tól kezdődően ez a könyvtár általában üres, mivel az udevd a hotplug-üzeneteket egy netlink socketen keresztül kapja meg.

Eszközök és csatolók

A hotplug-rendszer nemcsak az eszközöket adminisztrálja, hanem a csatolókat is. Az eszköz egy buszhoz vagy csatolóhoz van csatlakoztatva. A busz egy többszörös csatolónak számít. A csatoló összeköti az eszközöket egymással vagy egy alkalmazással. Léteznek virtuális eszközök is, ilyenek például a hálózati alagutak. Az eszközökhöz gyakran illesztőprogramokra van szükség, kernelmodulok formájában. A csatolókat legtöbbször az udev által létrehozott eszközcsomópontok ábrázolják. Az eszközök és a csatolók megkülönböztetése fontos az elvek megértéséhez. A sysfs fájlrendszerben megadott eszközök a /sys/devices könyvtárban találhatók. A csatolók a /sys/class vagy /sys/block könyvtárban találhatók. A sysfs minden csatolójának rendelkeznie kell egy, az eszközre mutató lánccal. Még mindig van azonban néhány illesztőprogram, amelyik nem hozza létre automatikusan ezt a láncot. A lánc nélkül nem lehet tudni, hogy a csatoló melyik eszközhöz tartozik és nem található meg a megfelelő konfiguráció. Az eszközöket az eszközleírás címzi meg. Ez a sysfs fájlban lévő eszközelérési út (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0), a csatlakoztatási pont leírása (bus-pci-0000:02:00.0), egy egyedi azonosító (id-32311AE03FB82538) vagy valami hasonló lehet. Régebben a csatolókat a nevükkel címezték. Ezek a nevek a meglévő eszközök egy egyszerű számozását jelentették, amelyek az eszközök hozzáadásakor vagy eltávolításakor megváltozhattak.

A csatolók a hozzájuk tartozó eszköz leírásával is megcímezhetők. A kontextus általában jelzi, hogy a leírás magára az eszközre hivatkozik vagy a csatolóra. Tipikus példa eszközökre, csatolókra és leírásokra:

PCI hálózati kártya
A PCI-buszhoz csatlakoztatott eszköz (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0 vagy bus-pci-0000:02:00.0), amely egy hálózati csatolóval rendelkezik (eth0, id-00:0d:60:7f:0b:22 vagy bus-pci-0000:02:00.0). A hálózati szolgáltatások által használt vagy a virtuális hálózati eszközökhöz csatlakozó hálózati illesztő, mint például egy csatolóval rendelkező alagút vagy VLAN.
PCI SCSI-vezérlő
Eszköz (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0 vagy bus-scsi-1:0:0:0), amely számos fizikai csatolót elérhetővé tesz busz formájában (/sys/class/scsi_host/host1).
SCSI-merevlemez
Eszköz (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0 vagy bus-scsi-1:0:0:0) több csatolóval (/sys/block/sda*).

Hotplug-események

Minden eszköz és csatoló rendelkezik egy hozzárendelt hotplug-eseménnyel, amelyet az udev és a felelős hotplug-ügynök dolgoz fel. A hotplug-eseményeket a kernel aktiválja, amikor egy hivatkozás jön létre az eszközhöz, vagy amikor az illesztőprogram bejegyez vagy töröl egy csatolót. A SUSE LINUX 9.3-as változata óta az udevd fogadja és terjeszti a hotplug-eseményeket. Vagy az udevd figyeli a közvetlenül a kerneltől érkező netlink-üzeneteket, vagy meg kell adni a /proc/sys/kernel/hotplug könyvtárban az /sbin/udevsend fájlt. Miután az udevd elvégezte a feladatát (Dinamikus eszközcsomópontok és az udev ), az esemény típusának megfelelő hotplug-ügynököt keres az /etc/hotplug.d/ könyvtárban.

Hotplug-ügynökök

A hotplug-ügynök egy végrehajtható program, amely az eseménynek megfelelő műveleteket végrehajtja. Az eszközeseményekhez tartozó ügynökök az /etc/hotplug.d/eseménynév és az/etc/hotplug.d/default könyvtárban találhatók. Az ezekben a könyvtárakban található .hotplug utótaggal rendelkező programok ábécérendben kerülnek végrehajtásra.

Ahhoz, hogy a rendszer figyelmen kívül hagyjon egy adott típusú eseményt, törölni kell a végrehajtást engedélyező jogosultságbiteket a megfelelő hotplug-ügynökökből. Egy másik lehetőség a .hotplug utótag lecserélése. Az eszközügynökök általában csak betöltik a kernelmodulokat, de néha további parancsokat is meghívnak. IBM S390 számítógépeken például egy adott értéket kell megadni minden eszközhöz a procfs vagy sysfs fájlban az inicializálni kívánt eszközhöz. SUSE LINUX alatt ezt az /sbin/hwup vagy az /sbin/hwdown kezeli. Ezek a programok az /etc/sysconfig/hardware könyvtárban található eszközhöz megfelelő konfigurációt keresnek, és alkalmazzák azt. Egy adott eszköz inicializálásának megakadályozásához hozzon létre egy megfelelő konfigurációs fájlt a manual vagy off indítási mód segítségével. Ha az /sbin/hwup nem talál konfigurációt, akkor az ügynök automatikusan betölti a modulokat. Ebben az esetben az ügynökök automatikusan létrehoznak konfigurációs fájlokat a hwup parancshoz. Ez a következő futtatáskor gyorsabbá teszi az ügynököt. További információ: Automatikus modulbetöltés. Az /sbin/hwup fájllal kapcsolatos további információt az /usr/share/doc/packages/sysconfig/README fájl és a man hwup kézikönyvoldal tartalmaz. A csatolóügynökök meghívása előtt az udev általában előállít egy eszközcsomópontot, amelyet a rendszer el tud érni. Az udev lehetővé teszi, hogy a csatolókhoz állandó neveket rendeljünk. Részletes információ: Dinamikus eszközcsomópontok és az udev . Ezután az egyedi ügynökök beállítják a csatolókat. Néhány csatoló eljárása az alábbiakban olvasható.

Hálózati csatolók aktiválása

A hálózati csatolók az /sbin/ifup fájl segítségével kerülnek inicializálásra, az /sbin/ifdown segítségével pedig letiltásra. Részletes információt az /usr/share/doc/packages/sysconfig/README és a man ifup kézikönyvoldal tartalmaz.

Ha a számítógép több, különböző illesztőprogramokkal rendelkező hálózati eszközt tartalmaz, akkor a csatoló jelölése megváltozhat, ha egy másik illesztőprogram gyorsabban töltődik be a rendszer indítása során. Emiatt a SUSE LINUX a PCI hálózati eszközök eseményeit egy sor segítségével kezeli. Ez a funkció az /etc/sysconfig/hotplug fájl HOTPLUG_PCI_QUEUE_NIC_EVENTS=no változója segítségével letiltható.

A legjobb megoldás azonban az állandó csatolójelölések alkalmazása. Az egyedi csatolók neve a konfigurációs fájlokban adható meg. Az eljárás részletes leírását az /usr/share/doc/packages/sysconfig/README fájl tartalmazza. A SUSE LINUX 9.3-tól kezdődően az udev a hálózati csatolókat is kezeli annak ellenére, hogy ezek nem eszközcsomópontok. Így az állandó csatolónevek egységesebben használhatók.

Tárolóeszközök aktiválása

A tárolóeszközök eléréséhez a csatolóikat fel kell kapcsolni. Ez teljesen automatizálható vagy előre beállítható. A konfiguráció az /etc/sysconfig/hotplug és az /etc/fstab fájlok HOTPLUG_DO_MOUNT, HOTPLUG_MOUNT_TYPE és HOTPLUG_MOUNT_SYNC változóival történik. A teljesen automatizált működés a HOTPLUG_DO_MOUNT=yes beállítással kapcsolható be. Letiltani a változó no értékre állításával lehet.

A két mód között a HOTPLUG_MOUNT_TYPE változó segítségével kétféle mód között lehet váltani: ez a subfs vagy az fstab. HOTPLUG_MOUNT_TYPE=subfs módban a /media könyvtárban létrejön egy alkönyvtár. Az alkönyvtár neve az eszköztulajdonságokból származik. Az adathordozó elérésekor azt a submountd automatikusan fel- és lecsatolja. Az eszközök ebben a módban egyszerűen eltávolíthatók, ha már nem érhetők el. HOTPLUG_MOUNT_TYPE=fstab módban a tárolóeszközök hagyományos módon kerülnek felcsatolásra, az /etc/fstab fájl megfelelő bejegyzésével.

A HOTPLUG_MOUNT_SYNC változó beállításával engedélyezhető a szinkron és aszinkron módú hozzáférés. Aszinkron módban az írási hozzáférés gyorsabb, mivel az eredmények a pufferbe kerülnek. Az adathordozó nem körültekintő eltávolítása azonban befejezetlen adatírást eredményezhet. Szinkron módban minden adat azonnal írásra kerül, de a hozzáférés tovább tart. Az eszközt az umount parancs segítségével kézzel kell eltávolítani.

Célszerű az állandó eszköznevek használata, mivel a hagyományos eszköznevek az inicializálási sorrendtől függően változhatnak. Az állandó eszköznevekkel kapcsolatos részletes információt az alábbi rész tartalmaz: Dinamikus eszközcsomópontok és az udev.

Automatikus modulbetöltés

Ha egy eszköz nem inicializálható az /sbin/hwup segítségével, akkor az ügynök a modulleképezésekben megkeresi a megfelelő illesztőprogramot. Először az /etc/hotplug/*.handmap fájlban lévő leképezéseket keresi. Ha itt nem találja meg az illesztőprogramot, akkor a /lib/modules/<kernelversion>/modules.*map fájlban keresi. Ha nem a kernel szabványos illesztőprogramját kívánja használni, akkor az /etc/hotplug/*.handmap fájlban adja meg, mivel ez a fájl kerül elsőként beolvasásra. Az USB-ügynök felhasználói módú illesztőprogramokat is keres az /etc/hotplug/usb.usermap és az /etc/hotplug/usb/*.usermap fájlok között. A felhasználói módú illesztőprogramok olyan programok, amelyek egy kernelmodul helyett végzik az eszköz elérésének vezérlését. Ily módon adott eszközökhöz meg lehet hívni végrehajtható programokat. PCI-eszközök esetén a pci.agent először lekérdezi az illesztőprogram-modulokkal kapcsolatos hwinfo-t. Ha a hwinfo nem ismeri az illesztőprogramot, akkor az ügynök a pci.handmap könyvtárban és a kernelleképezésben keres. Mivel a hwinfo már keresett ezeken a helyeken, így a vizsgálat sikertelen lesz. A hwinfo egy kiegészítő adatbázist használ az illesztőprogram-leképezésekhez. Betölti azonban a pci.handmap fájlt is annak ellenőrzéséhez, hogy a fájlban lévő egyedi leképezések alkalmazásra kerülnek-e. A pci.agent ügynök adott típusú eszközökre vagy a /lib/modules/<kernelverzió>/kernel/drivers egy adott alkönyvtárából származó illesztőprogram-modulokra korlátozható. Az első esetben a PCI-eszközosztályok az /usr/share/pci.ids fájl végén találhatók és az /etc/sysconfig/hotplug fájl HOTPLUG_PCI_CLASSES_WHITELIST és HOTPLUG_PCI_CLASSES_BLACKLIST változóiban adhatók meg. A második esetben a HOTPLUG_PCI_DRIVERTYPE_WHITELIST és HOTPLUG_PCI_DRIVERTYPE_BLACKLIST változóban adjon meg egy vagy több könyvtárat. A kihagyott könyvtárakban lévő modulok nem kerülnek betöltésre. Mindkét esetben egy üres fehérlista (whitelist) jelzi, hogy az összes lehetőség – a feketelistában (blacklist) kizártakon kívül – engedélyezve van. Egyes modulok is kizárhatók a betöltésből. Csak adja meg azokat a modulokat az /etc/hotplug/blacklist fájlban, amelyeket az ügynöknek sosem kell betöltenie. Minden modulnevet írjon külön sorba.

Ha több megfelelő modul található a leképezésfájlban, akkor csak az első modul kerül betöltésre. Az összes modul betöltéséhez állítsa be a HOTPLUG_LOAD_MULTIPLE_MODULES=yes változót. Érdemesebb azonban egy külön /etc/sysconfig/hardware/hwcfg-* eszközkonfigurációt készíteni az eszközhöz.

A hwup segítségével betöltött modulokra ez nem érvényes. Automatikus modulbetöltés csak kivételes esetekben történik, és a SUSE LINUX következő verzióiban tovább lesz korlátozva. Ha nem található megfelelő modul, akkor az ügynök létrehoz egy hwup konfigurációs fájlt, amely a következő alkalommal kerül használatra. Ez növeli az eszközinicializálás sebességét.

Üzem közbeni csatlakoztatás PCI-vel

Néhány számítógép lehetővé teszi a PCI-eszközök üzem közbeni csatlakoztatását. Ennek teljeskörű használatához speciális kernelmodulokat kell betölteni. Ezek a modulok azonban a nem PCI hotplug számítógépeken problémát okozhatnak. Sajnálatos módon a hotplug (üzem közbeni cserét lehetővé tevő) PCI-bővítőhelyek nem ismerhetők fel automatikusan. A kézzel való konfigurációhoz állítsa az /etc/sysconfig/hotplug fájlban lévő HOTPLUG_DO_REAL_PCI_HOTPLUG változót yes értékre.

A rendszerindítási coldplug parancsfájl

A boot.coldplug felel az összes nem automatikusan felismert eszközért, valamint azokért, amelyhez nincsenek előállítva hotplug-események. Ez mindössze csak annyit tesz, hogy az /etc/sysconfig/hardware/hwcfg-static-*-ként megjelölt minden statikus eszközkonfigurációhoz meghívja a hwup parancsot. Ennek segítségével a beépített eszközök más sorrendben inicializálhatók, mint a hotplug használata esetén, mivel a coldplug a hotplug előtt kerül végrehajtásra.

Hibaelemzés

Naplófájlok

Hacsak nincs másképp megadva, akkor a hotplug csak néhány fontos üzenetet küld a syslog-hoz. A részletesebb naplózáshoz állítsa be az /etc/sysconfig/hotplug fájlban található HOTPLUG_DEBUG változót yes értékre. Ha a változót max értékre állítja, akkor az összes hotplug-parancsfájl minden parancsa naplózásra kerül. Ennek hatására a /var/log/messages fájl mérete, amelyben a syslog az összes üzenetet tárolja, nagyon megnőhet. Mivel a syslog a rendszerindítás során kerül elindításra, a hotplug és coldplug után, lehetséges, hogy az első üzenetek nem kerülnek naplózásra. Ha ezek az üzenetek fontosak, akkor a HOTPLUG_SYSLOG változóban adjon meg egy másik naplófájlt. A témakörrel kapcsolatos információ az /etc/sysconfig/hotplug fájlban olvasható.

Rendszerindítási problémák

Ha a számítógép a rendszerindítási folyamat során lefagy, akkor a rendszerindítási promptnál a NOHOTPLUG=yes vagy NOCOLDPLUG=yes beírásával tiltsa le a hotplug vagy coldplug funkciót. A hotplug-alrendszer letiltása következtében a kernel nem ad ki hotplug-eseményeket. A futó rendszeren az /etc/init.d/boot.hotplug start parancs segítségével aktiválható a hotplug-alrendszer. Az adott időpontig generált események ekkor kiadásra és végrehajtásra kerülnek. A sorban álló események visszautasításához először a /proc/sys/kernel/hotplug fájlba írja be a /bin/true bejegyzést, majd egy kis idő után állítsa vissza /sbin/hotplug-ra. A coldplug letiltása miatt a statikus konfigurációk nem kerülnek alkalmazásra. Statikus konfigurációk alkalmazásához később írja be az /etc/init.d/boot.coldplug start parancsot.

Annak meghatározásához, hogy a hotplug által betöltött adott modul felelős-e a problémáért, a rendszerindítási promptnál adja meg a HOTPLUG_TRACE=<N> parancsot. A betöltendő modulok nevei megjelennek a képernyőn, mielőtt N másodperc elteltével ténylegesen betöltésre kerülnének. A folyamatba nem avatkozhat bele.

Az eseményrögzítő

Az /sbin/hotplugeventrecorder parancsfájl az /sbin/hotplug által minden eseménykor végrehajtásra kerül. Ha létezik az /events könyvtár, akkor az összes hotplug-esemény egyedi fájlként, ebben a könyvtárban kerül tárolásra. Így az események tesztelési célokból újragenerálhatók. Ha ez a könyvtár nem létezik, akkor semmi sem kerül rögzítésre.