Die tyd namespace in Linux laat per-namespace offsets toe vir die stelsel monotonic en opstart-tyd kloks. Dit word algemeen gebruik in Linux houers om die datum/tyd binne 'n houer te verander en kloks aan te pas na herstel vanaf 'n kontrolepunt of snapshot.
Laboratorium:
Skep verskillende Namespaces
CLI
sudounshare-T [--mount-proc] /bin/bash
Deur 'n nuwe instansie van die /proc lêerstelsel te monteer as jy die parameter --mount-proc gebruik, verseker jy dat die nuwe monteernaamruimte 'n akkurate en geïsoleerde siening van die prosesinligting spesifiek vir daardie naamruimte het.
Fout: bash: fork: Kan nie geheue toewys nie
Wanneer unshare sonder die -f opsie uitgevoer word, word 'n fout ondervind weens die manier waarop Linux nuwe PID (Proses ID) naamruimtes hanteer. Die sleutelbesonderhede en die oplossing word hieronder uiteengesit:
Probleemverklaring:
Die Linux-kern laat 'n proses toe om nuwe naamruimtes te skep met die unshare stelselaanroep. Die proses wat die skepping van 'n nuwe PID naamruimte inisieer (genoem die "unshare" proses) betree egter nie die nuwe naamruimte nie; slegs sy kindproses doen.
Om %unshare -p /bin/bash% te loop, begin /bin/bash in dieselfde proses as unshare. Gevolglik is /bin/bash en sy kindproses in die oorspronklike PID naamruimte.
Die eerste kindproses van /bin/bash in die nuwe naamruimte word PID 1. Wanneer hierdie proses verlaat, aktiveer dit die opruiming van die naamruimte as daar geen ander prosesse is nie, aangesien PID 1 die spesiale rol het om weesprosesse aan te neem. Die Linux-kern sal dan PID-toewysing in daardie naamruimte deaktiveer.
Gevolg:
Die uitgang van PID 1 in 'n nuwe naamruimte lei tot die opruiming van die PIDNS_HASH_ADDING vlag. Dit lei tot die mislukking van die alloc_pid funksie om 'n nuwe PID toe te wys wanneer 'n nuwe proses geskep word, wat die "Kan nie geheue toewys nie" fout veroorsaak.
Oplossing:
Die probleem kan opgelos word deur die -f opsie saam met unshare te gebruik. Hierdie opsie maak dat unshare 'n nuwe proses fork nadat die nuwe PID naamruimte geskep is.
Om %unshare -fp /bin/bash% uit te voer, verseker dat die unshare opdrag self PID 1 in die nuwe naamruimte word. /bin/bash en sy kindproses is dan veilig binne hierdie nuwe naamruimte, wat die voortydige uitgang van PID 1 voorkom en normale PID-toewysing toelaat.
Deur te verseker dat unshare met die -f vlag loop, word die nuwe PID naamruimte korrek gehandhaaf, wat toelaat dat /bin/bash en sy sub-prosesse funksioneer sonder om die geheue toewysing fout te ondervind.
sudofind/proc-maxdepth3-typel-nametime-execreadlink{} \; 2>/dev/null|sort-u# Find the processes with an specific namespacesudofind/proc-maxdepth3-typel-nametime-execls-l{} \; 2>/dev/null|grep<ns-number>