GNU/Linux >> Znalost Linux >  >> Linux

/dev/shm změna oprávnění po restartu uzlu

Sdílená paměť je způsob, jak sdílet stav mezi procesy. Sdílená paměť, jak již název napovídá, je metoda „sdílení“ dat mezi procesy. Oba procesy definují stejnou paměťovou oblast jako „sdílenou“ a mohou si pak vyměňovat informace pouhým zápisem do ní. To (bývalo a stále je poněkud) rychlejší než alternativa posílání zpráv mezi procesy prostřednictvím sítě nebo potrubí.

Pokud paměť vidíte jako prostředek k ukládání dat, soubor v systému souborů lze považovat za sdílenou paměť (tj. sdílený soubor). Je těžké počítat se sdílenou pamětí. Patří to k jednomu procesu? Oba? Ani? Pokud naivně sečteme paměť patřící více procesům, hrubě „přepočítáme“.

Jak název napovídá, sdílená (virtuální) paměť označuje virtuální paměť, kterou sdílí více než jeden proces a poté ji může používat více programů současně. Přestože virtuální paměť umožňuje procesům mít oddělené (virtuální) adresní prostory, jsou chvíle, kdy procesy potřebují ke sdílení paměti. Sdílená paměť (SHM) je další metodou meziprocesové komunikace (IPC), kdy několik procesů sdílí jeden kus paměti pro komunikaci.

Sdílená paměť poskytuje nejrychlejší způsob, jak si procesy vzájemně předávají velké množství dat. /dev/shm není nic jiného než implementace tradičního konceptu sdílené paměti. Je to účinný prostředek pro předávání dat mezi programy. Jeden program vytvoří paměťovou část, ke které mají přístup jiné procesy (pokud je to povoleno). To povede k urychlení práce na Linuxu.

Problém

Při každém restartu serveru se změní oprávnění /dev/shm:

$ ls -alrt /dev/ | grep shm
drwxr-xr-t. 2 root root 60 jul 6 11:14 shm 

Původní povolení (1777):

# ls -ld /dev/shm
drwxrwxrwt. 2 root root 200 Aug 20 03:44 /dev/shm

Stávající oprávnění (1754):

$ ls -alrt /dev/ | grep shm
drwxr-xr-t. 2 root root 60 jul 6 11:14 shm

Řešení

Příčinou problému je existující balíček initscripts [initscripts-9.49.37-1.0.1.el7_3.1.x86_64].

Řešení

Krok 1 :Maskování služby ( rhel-import-state):

# systemctl mask rhel-import-state

Krok 2 :Zkontrolujte stav služby. Bude vypadat podobně jako níže:

rhel-import-state.service
  Loaded: masked (/dev/null; bad) <<  Active: active (exited) since Fri 2017-07-21 18:28:05 EDT; 2 weeks 3 days ago
 Main PID: 600 (code=exited, status=0/SUCCESS)
  CGroup: /system.slice/rhel-import-state.service

Krok 3 :Restartujte počítač a ověřte, zda se stejný problém opakuje nebo ne.

Poznámka :Toto je akční plán řešení. Pro trvalé řešení upgradujte verzi balíčku initscripts na 9.49.39-1.0.1, která je součástí aktualizace CentOS/RHEL7 4.

Vrácení změn

Změny můžete také vrátit zpět provedením níže uvedeného příkazu k odmaskování maskované služby.

# systemctl unmask rhel-import-state.service
# systemctl status rhel-import-state.service


Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Kdy použít /dev/random vs /dev/urandom?

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. Co je /dev/mem?

  2. Jak mohu změnit množství a velikost linuxových ramdisků (/dev/ram0 - /dev/ram15)?

  3. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0

  1. jádro:deaktivace /dev/kmem a /dev/mem

  2. Je špatné propojit /dev/random s /dev/urandom v Linuxu?

  3. Proč se na některých systémech Linux kořenový souborový systém zobrazuje jako /dev/root místo /dev/<uzel skutečného zařízení>v mtab?