{"id":31333,"date":"2019-10-31T21:40:44","date_gmt":"2019-10-31T18:40:44","guid":{"rendered":"https:\/\/prohoster.info\/blog\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2\/"},"modified":"2019-10-31T21:40:44","modified_gmt":"2019-10-31T18:40:44","slug":"virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2","title":{"rendered":"Wirtualne systemy plik\u00f3w w Linux: po co s\u0105 potrzebne i jak dzia\u0142aj\u0105? Cz\u0119\u015b\u0107 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107 wszystkim, dzielimy si\u0119 z Wami drug\u0105 cz\u0119\u015bci\u0105 publikacji \u201eWirtualne systemy plik\u00f3w w Linuxie: po co s\u0105 potrzebne i jak dzia\u0142aj\u0105?\u201d Pierwsz\u0105 cz\u0119\u015b\u0107 mo\u017cna przeczyta\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/446614\/\">tutaj<\/a><\/noindex>. Przypominamy, \u017ce ta seria publikacji jest zwi\u0105zana z uruchomieniem nowego kursu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/tjnD\/\">Administrator Linux<\/a><\/noindex>, kt\u00f3ry ju\u017c nied\u0142ugo si\u0119 zacznie.<\/p>\n<p><b>Jak monitorowa\u0107 VFS za pomoc\u0105 narz\u0119dzi eBPF i bcc<\/b><\/p>\n<p>Najprostszym sposobem zrozumienia, jak j\u0105dro operuje na plikach <code>sysfs<\/code> \u2013 jest obserwowanie tego w praktyce, a najprostszym sposobem na monitorowanie ARM64 jest u\u017cycie eBPF. eBPF (od Berkeley Packet Filter) sk\u0142ada si\u0119 z maszyny wirtualnej uruchomionej w <noindex><a rel=\"nofollow\" href=\"https:\/\/events.linuxfoundation.org\/sites\/events\/files\/slides\/bpf_collabsummit_2015feb20.pdf\">j\u0105drze<\/a><\/noindex>, kt\u00f3r\u0105 u\u017cytkownicy z uprawnieniami mog\u0105 wywo\u0142ywa\u0107 (<code>query<\/code>) z wiersza polece\u0144. \u0179r\u00f3d\u0142a j\u0105dra informuj\u0105 czytelnika, co mo\u017ce zrobi\u0107 j\u0105dro; uruchomienie narz\u0119dzi eBPF w obci\u0105\u017conym systemie pokazuje, co tak naprawd\u0119 robi j\u0105dro. <\/p>\n<p><img decoding=\"async\" alt=\"Wirtualne systemy plik\u00f3w w Linux: po co s\u0105 potrzebne i jak dzia\u0142aj\u0105? Cz\u0119\u015b\u0107 2\" src=\"\/wp-content\/uploads\/2019\/04\/95443cd3b1562b03eb43bf5fd229c508.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Na szcz\u0119\u015bcie, rozpocz\u0119cie u\u017cywania eBPF jest do\u015b\u0107 proste dzi\u0119ki narz\u0119dziom <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\">bcc<\/a><\/noindex>, kt\u00f3re s\u0105 dost\u0119pne jako pakiety w og\u00f3lnym dystrybucji <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/INSTALL.md\">Linuxa<\/a><\/noindex> i s\u0105 szczeg\u00f3\u0142owo udokumentowane <noindex><a rel=\"nofollow\" href=\"http:\/\/brendangregg.com\/ebpf.html\">Bernardem Greggiem<\/a><\/noindex>. Narz\u0119dzia <code>bcc<\/code> to skrypty w Pythonie z ma\u0142ymi fragmentami kodu w C, co oznacza, \u017ce ka\u017cdy, kto zna oba j\u0119zyki, mo\u017ce je \u0142atwo modyfikowa\u0107. W <code>bcc\/tools<\/code> jest 80 skrypt\u00f3w Pythona, co oznacza, \u017ce programista lub administrator systemu z pewno\u015bci\u0105 znajdzie co\u015b odpowiedniego do rozwi\u0105zania swojego zadania. <br \/>\nAby uzyska\u0107 cho\u0107by powierzchowne poj\u0119cie o tym, jak\u0105 prac\u0119 wykonuj\u0105 VFS w dzia\u0142aj\u0105cym systemie, spr\u00f3buj <code>vfscount<\/code> lub <code>vfsstat<\/code>. To poka\u017ce, na przyk\u0142ad, \u017ce dziesi\u0105tki wywo\u0142a\u0144 <code>vfs_open()<\/code> i \u201ejego przyjaci\u00f3\u0142\u201d wyst\u0119puj\u0105 dos\u0142ownie co sekund\u0119.<\/p>\n<p><img decoding=\"async\" alt=\"Wirtualne systemy plik\u00f3w w Linux: po co s\u0105 potrzebne i jak dzia\u0142aj\u0105? Cz\u0119\u015b\u0107 2\" src=\"\/wp-content\/uploads\/2019\/04\/3479caa65696a29831f00e48782e48b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<blockquote><p><code>vfsstat.py<\/code> to skrypt w Pythonie, z fragmentami kodu C, kt\u00f3ry po prostu zlicza wywo\u0142ania funkcji VFS.<\/p><\/blockquote>\n<p>Podamy bardziej trywialny przyk\u0142ad i zobaczymy, co si\u0119 dzieje, gdy wk\u0142adamy pami\u0119\u0107 USB do komputera i system j\u0105 rozpoznaje.<\/p>\n<p><img decoding=\"async\" alt=\"Wirtualne systemy plik\u00f3w w Linux: po co s\u0105 potrzebne i jak dzia\u0142aj\u0105? Cz\u0119\u015b\u0107 2\" src=\"\/wp-content\/uploads\/2019\/04\/5c756fe1b6d4c5906631e5da24b59dca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<blockquote><p>Dzi\u0119ki eBPF mo\u017cna zobaczy\u0107, co si\u0119 dzieje w <code>\/sys<\/code>, gdy w\u0142o\u017cono pami\u0119\u0107 USB. Oto prosty i zaawansowany przyk\u0142ad.<\/p><\/blockquote>\n<p>W przyk\u0142adzie pokazanym powy\u017cej, <code>bcc<\/code> narz\u0119dzie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/tools\/trace_example.txt\">trace.py<\/a><\/noindex> wyprowadza komunikat, gdy uruchamiana jest komenda <code>sysfs_create_files().<\/code>Widzimy, \u017ce <code>sysfs_create_files().<\/code> zosta\u0142o uruchomione za pomoc\u0105 <code>kworker<\/code> w odpowiedzi na to, \u017ce pami\u0119\u0107 USB zosta\u0142a w\u0142o\u017cona, ale jaki plik zosta\u0142 w tym czasie utworzony? Drugi przyk\u0142ad pokazuje ca\u0142\u0105 moc eBPF. Tutaj <code>trace.py<\/code> wyprowadza zrzut j\u0105dra (kernel backtrace) (opcja -K) oraz nazw\u0119 pliku, kt\u00f3ry zosta\u0142 stworzony <code>sysfs_create_files().<\/code>. Wstawianie w pojedynczych stwierdzeniach to kod w C, obejmuj\u0105cy \u0142atwo rozpoznawalny ci\u0105g formatu udost\u0119pniany przez skrypt Pythona, kt\u00f3ry uruchamia LLVM <i>kompilator just-in-time<\/i>. Ten ci\u0105g kompiluje i wykonuje w wirtualnej maszynie wewn\u0105trz j\u0105dra. Pe\u0142na sygnatura funkcji <code>sysfs_create_files()<\/code> musi by\u0107 powt\u00f3rzona w drugiej komendzie, aby ci\u0105g formatu m\u00f3g\u0142 odnosi\u0107 si\u0119 do jednego z parametr\u00f3w. B\u0142\u0119dy w tym fragmencie kodu w C prowadz\u0105 do rozpoznawalnych b\u0142\u0119d\u00f3w kompilatora C. Na przyk\u0142ad, je\u015bli parametr -l jest pomini\u0119ty, zobaczysz \u201eFailed to compile BPF text.\u201d Programi\u015bci, kt\u00f3rzy s\u0105 dobrze zaznajomieni z C i Pythonem, znajd\u0105 narz\u0119dzia <code>bcc<\/code> \u0142atwymi do rozszerzenia i zmiany.<\/p>\n<p>Gdy pendrive jest w\u0142\u0105czony, zrzut j\u0105dra poka\u017ce, \u017ce PID 7711 to w\u0105tek <code>kworker<\/code>, kt\u00f3ry stworzy\u0142 plik <code>\"events\"<\/code> do <code>sysfs<\/code>. Odpowiednio, wywo\u0142anie z <code>sysfs_remove_files()<\/code> poka\u017ce, \u017ce usuni\u0119cie no\u015bnika spowodowa\u0142o usuni\u0119cie pliku <code>events<\/code>, co odpowiada og\u00f3lnej koncepcji zliczania odniesie\u0144. W tym przypadku, przegl\u0105danie <code>sysfs_create_link()<\/code> z eBPF podczas w\u0142o\u017cenia pendrive\u2019a poka\u017ce, \u017ce utworzono co najmniej 48 dowi\u0105za\u0144 symbolicznych.<\/p>\n<p>Jaki wi\u0119c sens ma plik events? U\u017cycie <noindex><a rel=\"nofollow\" href=\"http:\/\/northstar-www.dartmouth.edu\/doc\/solaris-forte\/manuals\/c\/user_guide\/cscope.html\">cscope<\/a><\/noindex> do wyszukiwania <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/tree\/block\/genhd.c#n665\">__device_add_disk()<\/a><\/noindex>, pokazuje, \u017ce wywo\u0142uje <code>disk_add_events()<\/code>, a zar\u00f3wno <code>\"media_change\"<\/code>, albo <code>\"eject_request\"<\/code> mog\u0105 by\u0107 zapisane w pliku zdarze\u0144. Tutaj warstwa blokowa j\u0105dra informuje przestrze\u0144 u\u017cytkownika o pojawieniu si\u0119 i usuni\u0119ciu \u201edysku\u201d. Zauwa\u017c, jak informacyjna jest ta metoda badania na przyk\u0142adzie w\u0142o\u017cenia pendrive\u2019a w por\u00f3wnaniu do pr\u00f3b ustalenia, jak wszystko dzia\u0142a, wy\u0142\u0105cznie na podstawie \u017ar\u00f3de\u0142.<\/p>\n<p><b>Systemy plik\u00f3w tylko do odczytu umo\u017cliwiaj\u0105 dzia\u0142anie wbudowanych urz\u0105dze\u0144<\/b><\/p>\n<p>Oczywi\u015bcie nikt nie wy\u0142\u0105cza serwera ani komputera, wyci\u0105gaj\u0105c wtyczk\u0119 z gniazdka. Ale dlaczego? A to dlatego, \u017ce zamontowane systemy plik\u00f3w na fizycznych no\u015bnikach mog\u0105 mie\u0107 oczekuj\u0105ce zapisy, a struktury danych zapisuj\u0105ce ich stan mog\u0105 nie synchronizowa\u0107 si\u0119 z zapisami w magazynie. Kiedy to si\u0119 dzieje, w\u0142a\u015bciciele systemu musz\u0105 czeka\u0107 na nast\u0119pne uruchomienie, aby uruchomi\u0107 narz\u0119dzie <code>fsck filesystem-recovery<\/code> i, w najgorszym przypadku, straci\u0107 dane. <\/p>\n<p>Niemniej jednak wszyscy wiemy, \u017ce wiele urz\u0105dze\u0144 IoT, a tak\u017ce routery, termostaty i samochody, teraz dzia\u0142aj\u0105 na systemie Linux. Wiele z tych urz\u0105dze\u0144 praktycznie nie ma interfejsu u\u017cytkownika, a nie ma tak\u017ce mo\u017cliwo\u015bci ich \u201eczystego\u201d wy\u0142\u0105czenia. Wyobra\u017a sobie uruchomienie samochodu z roz\u0142adowan\u0105 bateri\u0105, gdy zasilanie urz\u0105dzenia steruj\u0105cego ci\u0105gle skacze w g\u00f3r\u0119 i w d\u00f3\u0142. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.automotivelinux.org\/_media\/eg-rhsa\/agl_referencehardwarespec_v0.1.0_20171018.pdf\">Linuxa<\/a><\/noindex> Jak to mo\u017cliwe, \u017ce system \u0142aduje si\u0119 bez d\u0142ugiego <code>fsck<\/code>, gdy silnik w ko\u0144cu zaczyna dzia\u0142a\u0107? Odpowied\u017a jest prosta. Wbudowane urz\u0105dzenia polegaj\u0105 na korzeniowej systemie plik\u00f3w <noindex><a rel=\"nofollow\" href=\"https:\/\/elinux.org\/images\/1\/1f\/Read-only_rootfs.pdf\">tylko do odczytu<\/a><\/noindex> (w skr\u00f3cie <code>ro-rootfs<\/code> (read-only root filesystem). <\/p>\n<p><code>ro-rootfs<\/code> Oferuj\u0105 wiele zalet, kt\u00f3re s\u0105 mniej oczywiste ni\u017c autentyczno\u015b\u0107. Jedn\u0105 z zalet jest to, \u017ce z\u0142o\u015bliwe oprogramowanie nie mo\u017ce pisa\u0107 do <code>\/usr<\/code> lub <code>\/lib<\/code>, je\u015bli \u017caden proces Linux nie mo\u017ce tam pisa\u0107. Inn\u0105 jest to, \u017ce w du\u017cej mierze niezmienna struktura systemu plik\u00f3w jest kluczowa dla wsparcia w terenie zdalnych urz\u0105dze\u0144, poniewa\u017c personel pomocniczy korzysta z lokalnych system\u00f3w, kt\u00f3re nominalnie s\u0105 identyczne z systemami na miejscu. By\u0107 mo\u017ce najwa\u017cniejsz\u0105 (ale i najbardziej podst\u0119pn\u0105) zalet\u0105 jest to, \u017ce ro-rootfs zmusza programist\u00f3w do zdecydowania, kt\u00f3re obiekty systemowe b\u0119d\u0105 niezmienne, ju\u017c na etapie projektowania systemu. Praca z ro-rootfs mo\u017ce by\u0107 niewygodna i bolesna, jak to cz\u0119sto ma miejsce z zmiennymi const w j\u0119zykach programowania, ale ich zalety \u0142atwo rekompensuj\u0105 dodatkowe koszty.<\/p>\n<p>Tworzenie <code>rootfs<\/code> tylko do odczytu wymaga dodatkowego wysi\u0142ku ze strony programist\u00f3w system\u00f3w wbudowanych, i w\u0142a\u015bnie tutaj na scen\u0119 wkracza VFS. Linux wymaga, aby pliki w <code>\/var<\/code> by\u0142y dost\u0119pne do zapisu, a ponadto wiele popularnych aplikacji, kt\u00f3re uruchamiaj\u0105 wbudowane systemy, b\u0119dzie pr\u00f3bowa\u0107 tworzy\u0107 pliki konfiguracyjne <code>dot-files<\/code> do <code>$HOME<\/code>. Jednym z rozwi\u0105za\u0144 dla plik\u00f3w konfiguracyjnych w katalogu domowym jest ich wst\u0119pna generacja i pakowanie w <code>rootfs<\/code>. Dla <code>\/var<\/code> jednym z mo\u017cliwych podej\u015b\u0107 jest zamontowanie go w osobnej partycji, dost\u0119pnej do zapisu, podczas gdy sam <code>\/<\/code> jest montowane tylko w trybie tylko do odczytu. Inn\u0105 popularn\u0105 alternatyw\u0105 s\u0105 montowanie powi\u0105zane lub nak\u0142adane (bind or overlay mounts).<\/p>\n<p><b>Monta\u017ce powi\u0105zane i nak\u0142adane, ich wykorzystanie przez kontenery<\/b> <\/p>\n<p>Wykonanie polecenia <code>man mount<\/code> to najlepszy spos\u00f3b, aby dowiedzie\u0107 si\u0119 o montowania powi\u0105zanego i nak\u0142adanego, kt\u00f3re daj\u0105 programistom i administratorom system\u00f3w mo\u017cliwo\u015b\u0107 tworzenia systemu plik\u00f3w w jednej \u015bcie\u017cce, a nast\u0119pnie udost\u0119pniania go aplikacjom w innej. Dla system\u00f3w wbudowanych oznacza to mo\u017cliwo\u015b\u0107 przechowywania plik\u00f3w w <code>\/var<\/code> na pami\u0119ci flash dost\u0119pnej tylko do odczytu, ale montowanie nak\u0142adane lub powi\u0105zane z \u015bcie\u017ck\u0105 z <code>tmpfs<\/code> do <code>\/var<\/code> podczas uruchamiania umo\u017cliwi aplikacjom zapisywanie na tym miejscu (scrawl). Przy nast\u0119pnym uruchomieniu zmiany w <code>\/var<\/code> zostan\u0105 utracone. Montowanie nak\u0142adane tworzy po\u0142\u0105czenie pomi\u0119dzy <code>tmpfs<\/code> a doln\u0105 warstw\u0105 systemu plik\u00f3w i pozwala na rzekome zmiany w istniej\u0105cych plikach w <code>ro-tootf<\/code> podczas gdy montowanie powi\u0105zane mo\u017ce sprawi\u0107, \u017ce nowe puste <code>tmpfs<\/code> foldery b\u0119d\u0105 widoczne jako dost\u0119pne do zapisu w <code>ro-rootfs<\/code> \u015bcie\u017ckach. Podczas gdy <code>overlayfs<\/code> to odpowiedni (<code>proper<\/code>) typ systemu plik\u00f3w, montowanie powi\u0105zane jest realizowane w <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/tree\/Documentation\/filesystems\/sharedsubtree.txt\">przestrzeni nazw VFS<\/a><\/noindex>.<\/p>\n<p>Na podstawie opisu montowania nak\u0142adanego i powi\u0105zanego, nikt nie dziwi si\u0119, \u017ce <noindex><a rel=\"nofollow\" href=\"https:\/\/coreos.com\/os\/docs\/latest\/kernel-modules.html\">kontenery Linux<\/a><\/noindex> aktywnie je wykorzystuj\u0105. Przyjrzyjmy si\u0119, co si\u0119 dzieje, gdy u\u017cywamy <noindex><a rel=\"nofollow\" href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd-nspawn.html\">systemd-nspawn<\/a><\/noindex> do uruchomienia kontenera, u\u017cywaj\u0105c narz\u0119dzia <code>mountsnoop<\/code> od <code>bcc<\/code>.<\/p>\n<p>Wywo\u0142anie <code>system-nspawn<\/code> uruchamia kontener podczas pracy <code>mountsnoop.py<\/code>.<\/p>\n<p>Zobaczmy, co si\u0119 wydarzy\u0142o:<\/p>\n<p>Uruchomienie <code>mountsnoop<\/code> podczas '\u0142adowania' kontenera pokazuje, \u017ce \u015brodowisko uruchomieniowe kontenera zale\u017cy od montowania powi\u0105zanego (Wy\u015bwietlane jest tylko pocz\u0105tki d\u0142ugiego wyj\u015bcia).<\/p>\n<p>Tutaj <code>systemd-nspawn<\/code> udost\u0119pnia wybrane pliki w <code>procfs<\/code> i <code>sysfs<\/code> gospodarza do kontenera jako \u015bcie\u017cki w jego <code>rootfs<\/code>. Opr\u00f3cz <code>MS_BIND<\/code> flaga, kt\u00f3ra ustawia montowanie powi\u0105zane, inne flagi w montowanym systemie okre\u015blaj\u0105 zwi\u0105zek mi\u0119dzy zmianami w przestrzeni nazw hosta a kontenera. Na przyk\u0142ad, montowanie powi\u0105zane mo\u017ce albo przepuszcza\u0107 zmiany w <code>\/proc<\/code> i <code>\/sys<\/code> w kontener, albo je ukrywa\u0107 w zale\u017cno\u015bci od wywo\u0142ania. <\/p>\n<p><b>Podsumowanie<\/b><\/p>\n<p>Zrozumienie wewn\u0119trznej struktury Linuxa mo\u017ce wydawa\u0107 si\u0119 niemal niemo\u017cliwe, poniewa\u017c samo j\u0105dro zawiera ogromn\u0105 ilo\u015b\u0107 kodu, nie wspominaj\u0105c o aplikacjach przestrzeni u\u017cytkownika Linuxa i interfejsach wywo\u0142a\u0144 systemowych w bibliotekach w j\u0119zyku C, takich jak <code>glibc<\/code>. Jednym ze sposob\u00f3w na osi\u0105gni\u0119cie post\u0119pu jest przeczytanie kodu \u017ar\u00f3d\u0142owego jednej z podsystem\u00f3w j\u0105dra, skupiaj\u0105c si\u0119 na zrozumieniu wywo\u0142a\u0144 systemowych i nag\u0142\u00f3wk\u00f3w zwracaj\u0105cych si\u0119 do przestrzeni u\u017cytkownika, a tak\u017ce g\u0142\u00f3wnych wewn\u0119trznych interfejs\u00f3w j\u0105dra, na przyk\u0142ad tabela <code>file_operations<\/code>. Operacje plikowe zapewniaj\u0105 zasad\u0119 \u201ewszystko jest plikiem\u201d, dlatego zarz\u0105dzanie nimi jest szczeg\u00f3lnie przyjemne. \u0179r\u00f3d\u0142owe pliki j\u0105dra w j\u0119zyku C znajduj\u0105 si\u0119 w katalogu g\u0142\u00f3wnym <code>fs\/<\/code> reprezentuj\u0105 implementacj\u0119 wirtualnych system\u00f3w plik\u00f3w, kt\u00f3re s\u0105 warstw\u0105 pow\u0142oki zapewniaj\u0105c\u0105 szerok\u0105 i stosunkowo prost\u0105 zgodno\u015b\u0107 popularnych system\u00f3w plik\u00f3w i urz\u0105dze\u0144 przechowuj\u0105cych. Montowanie zwi\u0105zane i nak\u0142adanie przez przestrzenie nazw Linuxa to magia VFS, kt\u00f3ra umo\u017cliwia tworzenie kontener\u00f3w i system\u00f3w plik\u00f3w tylko do odczytu. W po\u0142\u0105czeniu z nauk\u0105 kodu \u017ar\u00f3d\u0142owego, narz\u0119dzie j\u0105dra eBPF i jego interfejs <code>bcc<\/code><br \/>\n sprawiaj\u0105, \u017ce badanie j\u0105dra jest \u0142atwiejsze ni\u017c kiedykolwiek.<\/p>\n<p>Drodzy, dajcie zna\u0107, czy ten artyku\u0142 by\u0142 dla Was przydatny? Mo\u017ce macie jakie\u015b komentarze lub uwagi? A tych, kt\u00f3rzy s\u0105 zainteresowani kursem \u201eAdministrator Linux\u201d, zapraszamy na <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/u5Jw\/\">dzie\u0144 otwarty<\/a><\/noindex>, kt\u00f3ry odb\u0119dzie si\u0119 18 kwietnia.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/446614\/\">Pierwsza cz\u0119\u015b\u0107.<\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/447748\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u00ab\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 Linux: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442?\u00bb \u041f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0443\u0442. \u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u0438\u0443\u0440\u043e\u0447\u0435\u043d\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u043e \u043a\u0443\u0440\u0441\u0443 \u00ab\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 Linux\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0441\u043a\u043e\u0440\u043e. \u041a\u0430\u043a \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 VFS \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 eBPF \u0438 bcc \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23299,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31333","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u00ab\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 Linux: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442?\u00bb \u041f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 Linux: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442? \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u00ab\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 Linux: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442?\u00bb \u041f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:40:44+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:40:44+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Wirtualne systemy plik\u00f3w w Linuxie: po co s\u0105 i jak dzia\u0142aj\u0105? Cz\u0119\u015b\u0107 2 | ProHoster","description":"Cze\u015b\u0107 wszystkim, dzielimy si\u0119 z Wami drug\u0105 cz\u0119\u015bci\u0105 publikacji \u201eWirtualne systemy plik\u00f3w w Linuxie: po co s\u0105 potrzebne i jak dzia\u0142aj\u0105?\u201d Pierwsz\u0105 cz\u0119\u015b\u0107 mo\u017cna przeczyta\u0107","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 Linux: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442? \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u00ab\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 Linux: \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442?\u00bb \u041f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:40:44+00:00","article:modified_time":"2019-10-31T18:40:44+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31333","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 05:41:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:18:40","updated":"2026-01-21 05:41:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=31333"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31333\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/23299"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=31333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=31333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=31333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}