{"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\/da\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2","title":{"rendered":"Virtuelle filsystemer i Linux: hvorfor de er n\u00f8dvendige, og hvordan de fungerer? Del 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej alle sammen, vi deler nu den anden del af publikationen \u201eVirtuelle filsystemer i Linux: hvorfor de er n\u00f8dvendige, og hvordan de fungerer?\u201c Den f\u00f8rste del kan l\u00e6ses <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/446614\/\">her<\/a><\/noindex>. Vi minder om, at denne serie af publikationer er knyttet til lanceringen af et nyt hold for kurset <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/tjnD\/\">\u00abLinux Administrator\u00bb<\/a><\/noindex>, som snart starter.<\/p>\n<p><b>Hvordan man overv\u00e5ger VFS med eBPF og bcc v\u00e6rkt\u00f8jer<\/b><\/p>\n<p>Den nemmeste m\u00e5de at forst\u00e5, hvordan kernen arbejder med filer <code>sysfs<\/code> \u2013 er at observere dette i praksis, og den nemmeste m\u00e5de at overv\u00e5ge ARM64 p\u00e5 er at bruge eBPF. eBPF (forkortelse for Berkeley Packet Filter) best\u00e5r af en virtuel maskine, der k\u00f8rer i <noindex><a rel=\"nofollow\" href=\"https:\/\/events.linuxfoundation.org\/sites\/events\/files\/slides\/bpf_collabsummit_2015feb20.pdf\">kernen<\/a><\/noindex>, som privilegerede brugere kan anmode om (<code>query<\/code>) fra kommandolinjen. Kildeteksterne i kernen fort\u00e6ller l\u00e6seren, hvad kernen kan g\u00f8re; at k\u00f8re eBPF v\u00e6rkt\u00f8jer i et belastet system viser, hvad kernen faktisk g\u00f8r. <\/p>\n<p><img decoding=\"async\" alt=\"Virtuelle filsystemer i Linux: hvorfor de er n\u00f8dvendige, og hvordan de fungerer? Del 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>Heldigvis er det ret nemt at begynde at bruge eBPF med <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\">bcc<\/a><\/noindex>v\u00e6rkt\u00f8jer, der er tilg\u00e6ngelige som pakker fra den generelle distribution <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/INSTALL.md\">Linux<\/a><\/noindex> og grundigt dokumenteret <noindex><a rel=\"nofollow\" href=\"http:\/\/brendangregg.com\/ebpf.html\">af Bernard Greggs<\/a><\/noindex>. V\u00e6rkt\u00f8jer <code>bcc<\/code> \u2013 er scripts i Python med sm\u00e5 kodeindsatser i C, hvilket betyder, at enhver, der er fortrolig med begge sprog, nemt kan modificere dem. I <code>bcc\/tools<\/code> er der 80 Python scripts, s\u00e5 det er sandsynligt, at udvikleren eller systemadministratoren kan finde noget passende til deres opgave. <br \/>\nFor at f\u00e5 en overfladisk forst\u00e5else af, hvilken opgave VFS udf\u00f8rer i et k\u00f8rende system, kan du pr\u00f8ve <code>vfscount<\/code> eller <code>vfsstat<\/code>. Det viser for eksempel, at dusinvis af kald <code>vfs_open()<\/code> og \"dets venner\" sker bogstaveligt talt hver sekund.<\/p>\n<p><img decoding=\"async\" alt=\"Virtuelle filsystemer i Linux: hvorfor de er n\u00f8dvendige, og hvordan de fungerer? Del 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> er et Python-script med C-kodeindsatser, der simpelthen t\u00e6ller VFS-funktionskald.<\/p><\/blockquote>\n<p>Lad os give et mere banalt eksempel og se, hvad der sker, n\u00e5r vi inds\u00e6tter et USB-flashdrev i computeren, og systemet opdager det.<\/p>\n<p><img decoding=\"async\" alt=\"Virtuelle filsystemer i Linux: hvorfor de er n\u00f8dvendige, og hvordan de fungerer? Del 2\" src=\"\/wp-content\/uploads\/2019\/04\/5c756fe1b6d4c5906631e5da24b59dca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<blockquote><p>Med eBPF kan vi se, hvad der sker i <code>\/sys<\/code>, n\u00e5r et USB-flashdrev inds\u00e6ttes. Her vises et simpelt og komplekst eksempel.<\/p><\/blockquote>\n<p>I eksemplet vist ovenfor <code>bcc<\/code> v\u00e6rkt\u00f8jet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/tools\/trace_example.txt\">trace.py<\/a><\/noindex> udskriver en meddelelse, n\u00e5r kommandoen <code>sysfs_create_files()<\/code>k\u00f8res. Vi ser, at <code>sysfs_create_files()<\/code> blev k\u00f8rt ved hj\u00e6lp af <code>kworker<\/code> str\u00f8mmen i respons p\u00e5 det, at USB-stikket blev indsat, men hvilken fil blev oprettet? Det andet eksempel viser hele styrken af eBPF. Her <code>trace.py<\/code> udskriver en kerne-backtrace (kernel backtrace) (indstillingen -K) og navnet p\u00e5 den fil, der blev oprettet. <code>sysfs_create_files()<\/code>Inds\u00e6ttelse i enkle udsagn er kode i C, der inkluderer en let genkendelig formatstreng, der leveres af et Python-script, som k\u00f8rer LLVM. <i>just-in-time kompilator<\/i>. Denne streng kompilere og udf\u00f8rer den i en virtuel maskine inde i kernen. Den fulde funktionssignatur <code>sysfs_create_files ()<\/code> skal gengives i den anden kommando, s\u00e5 formatstrengen kan referere til en af parametrene. Fejl i dette C-kodefragment f\u00f8rer til genkendelige fejl fra C-kompilatoren. For eksempel, hvis parameteren -l udelades, vil du se \u00abFailed to compile BPF text.\u00bb Udviklere, der er fortrolige med C og Python, vil finde v\u00e6rkt\u00f8jerne <code>bcc<\/code> lette at udvide og \u00e6ndre.<\/p>\n<p>N\u00e5r USB-drevet s\u00e6ttes ind, vil kerne-backtrace vise, at PID 7711 er den proces <code>kworker<\/code>, der oprettede filen <code>\u00abevents\u00bb<\/code> i <code>sysfs<\/code>. Tilsvarende vil et kald til <code>sysfs_remove_files()<\/code> vise, at fjernelsen af drevet f\u00f8rte til slettelsen af filen <code>events<\/code>, hvilket svarer til det overordnede koncept med referenceopt\u00e6lling. I denne forbindelse vil visning af <code>sysfs_create_link ()<\/code> med eBPF under inds\u00e6ttelse af USB-drevet vise, at der er oprettet mindst 48 symbolske links.<\/p>\n<p>Hvad er s\u00e5 form\u00e5let med filen events? Brug <noindex><a rel=\"nofollow\" href=\"http:\/\/northstar-www.dartmouth.edu\/doc\/solaris-forte\/manuals\/c\/user_guide\/cscope.html\">cscope<\/a><\/noindex> til at s\u00f8ge efter <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>, viser, at den kalder <code>disk_add_events ()<\/code>, og enten <code>\"media_change\"<\/code>, eller <code>\"eject_request\"<\/code> kan blive skrevet til begivenhedens fil. Her informerer kerne-lagsystemet userspace om tilstedev\u00e6relsen og fjernelsen af disk. Bem\u00e6rk, hvor informativ denne unders\u00f8gelsesmetode er med hensyn til inds\u00e6ttelse af USB-drevet sammenlignet med at fors\u00f8ge at finde ud af, hvordan alt fungerer, udelukkende fra kildeteksten.<\/p>\n<p><b>Rodfiltrene, der kun er til l\u00e6sning, muligg\u00f8r indbyggede enheder.<\/b><\/p>\n<p>Selvf\u00f8lgelig slukker ingen serveren eller deres computer ved at tr\u00e6kke stikket ud af stikkontakten. Men hvorfor? Det er fordi, at monterede filsystemer p\u00e5 fysiske lagringsenheder kan have forsinkede optegnelser, og datastrukturen, der registrerer deres tilstand, muligvis ikke synkroniseres med optegnelserne i lagringen. N\u00e5r dette sker, m\u00e5 systemejere vente p\u00e5 den n\u00e6ste boot for at k\u00f8re <code>fsck filesystem-recovery<\/code> og i v\u00e6rste fald miste data. <\/p>\n<p>Men vi ved alle, at mange IoT-enheder, samt routere, termostater og biler nu k\u00f8rer p\u00e5 Linux. Mange af disse enheder har stort set ikke nogen brugergr\u00e6nseflade, og der er ingen m\u00e5de at slukke for dem 'rent'. Forestil dig at starte en bil med et fladt batteri, n\u00e5r str\u00f8mmen til kontrolenheden konstant svinger op og ned. <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.automotivelinux.org\/_media\/eg-rhsa\/agl_referencehardwarespec_v0.1.0_20171018.pdf\">Linux<\/a><\/noindex> Hvordan er det muligt, at systemet starter uden en lang <code>fsck<\/code>, n\u00e5r motoren endelig begynder at k\u00f8re? Svaret er enkelt. Indbyggede enheder er afh\u00e6ngige af det rodf\u00e6stede filsystem <noindex><a rel=\"nofollow\" href=\"https:\/\/elinux.org\/images\/1\/1f\/Read-only_rootfs.pdf\">kun til l\u00e6sning<\/a><\/noindex> (forkortet <code>ro-rootfs<\/code> (read-only root filesystem). <\/p>\n<p><code>ro-rootfs<\/code> tilbyder mange fordele, der er mindre \u00e5benlyse end uforfalsket. En fordel er, at malware ikke kan skrive til <code>\/usr<\/code> eller <code>\/lib<\/code>, hvis ingen Linux-processer kan skrive dertil. En anden fordel er, at i h\u00f8j grad uforanderligt filsystem er afg\u00f8rende for feltsupport af fjerndrevne enheder, da supportpersonalet bruger lokale systemer, der nominelt er identiske med systemerne p\u00e5 stedet. M\u00e5ske den vigtigste (men ogs\u00e5 mest snedige) fordel er, at ro-rootfs tvinger udviklere til at beslutte, hvilke systemobjekter der skal v\u00e6re uforanderlige, allerede p\u00e5 designstadiet. Arbejde med ro-rootfs kan v\u00e6re besv\u00e6rligt og smertefuldt, som det ofte er med konstante variabler i programmeringssprog, men deres fordele opvejer let de ekstra omkostninger.<\/p>\n<p>Oprettelse <code>rootfs<\/code> i skrivebeskyttet tilstand kr\u00e6ver nogle ekstra bestr\u00e6belser fra udviklerne af indlejrede systemer, og det er netop her, VFS kommer ind i billedet. Linux kr\u00e6ver, at filer i <code>\/var<\/code> skal v\u00e6re tilg\u00e6ngelige til skrivning, og desuden vil mange popul\u00e6re applikationer, der k\u00f8rer indbyggede systemer, fors\u00f8ge at oprette konfigurations- <code>dot-filer<\/code> i <code>$HOME<\/code>. En af l\u00f8sningerne for konfigurationsfiler i hjemmemappen er normalt deres forudgenerering og samling i <code>rootfs<\/code>. For <code>\/var<\/code> en af de mulige tilgange er at montere den i en separat partition, der er tilg\u00e6ngelig for skrivning, mens selve <code>\/<\/code> monteres kun kun-l\u00e6sning. En anden popul\u00e6r alternativ er brugen af bind- eller overlay mounts.<\/p>\n<p><b>Bind- og overlay mounts, brugen af dem i containere<\/b> <\/p>\n<p>Udf\u00f8relse af kommandoen <code>man mount<\/code> er den bedste m\u00e5de at l\u00e6re om bind- og overlay mounts, som giver udviklere og systemadministratorer mulighed for at opbygge et filsystem p\u00e5 \u00e9n sti og derefter give det til applikationer p\u00e5 en anden. For indlejrede systemer betyder dette muligheden for at gemme filer i <code>\/var<\/code> p\u00e5 et skrivebeskyttet USB-drev, men overlay- eller bind-mounting af stien fra <code>tmpfs<\/code> i <code>\/var<\/code> ved opstart vil tillade applikationer at skrive til det. Ved n\u00e6ste opstart vil \u00e6ndringerne i <code>\/var<\/code> v\u00e6re tabt. Overlay mounting skaber en fusion mellem <code>tmpfs<\/code> og det underliggende filsystem og tillader tilsyneladende \u00e6ndringer af eksisterende filer i <code>ro-tootf<\/code> mens bind mounting kan g\u00f8re nye tomme <code>tmpfs<\/code> mapper synlige som skrivebare i <code>ro-rootfs<\/code> stier. Mens <code>overlayfs<\/code> er den korrekte (<code>correct<\/code>) type filsystem, er bind mounting implementeret i <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/tree\/Documentation\/filesystems\/sharedsubtree.txt\">VFS-navnerum<\/a><\/noindex>.<\/p>\n<p>Baseret p\u00e5 beskrivelsen af overlay og bind mounting er det ingen overraskelse, at <noindex><a rel=\"nofollow\" href=\"https:\/\/coreos.com\/os\/docs\/latest\/kernel-modules.html\">Linux-containere<\/a><\/noindex> aktivt bruger dem. Lad os se, hvad der sker, n\u00e5r vi bruger <noindex><a rel=\"nofollow\" href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd-nspawn.html\">systemd-nspawn<\/a><\/noindex> til at starte en container ved hj\u00e6lp af v\u00e6rkt\u00f8jet <code>mountsnoop<\/code> fra <code>bcc<\/code>.<\/p>\n<p>Kald <code>system-nspawn<\/code> starter containeren under k\u00f8rslen <code>mountsnoop.py<\/code>.<\/p>\n<p>Lad os se, hvad vi har f\u00e5et:<\/p>\n<p>K\u00f8rsel <code>mountsnoop<\/code> under \u2018opstarten\u2019 af containeren viser, at containerens k\u00f8remilj\u00f8 i h\u00f8j grad afh\u00e6nger af bind-mounting (Kun starten af en lang output vises).<\/p>\n<p>Her <code>systemd-nspawn<\/code> giver udvalgte filer fra <code>. Funktioner<\/code> og <code>sysfs<\/code> v\u00e6rten til containeren som stier i dens <code>rootfs<\/code>. Udover <code>MS_BIND<\/code> flaget, der indstiller bind mounting, bestemmer nogle andre flag i det monterede system forholdet mellem \u00e6ndringerne i v\u00e6rtsnavnerummet og containeren. For eksempel kan bind mounting enten tillade \u00e6ndringer i <code>\/proc<\/code> og <code>\/sys<\/code> i containeren eller skjule dem afh\u00e6ngigt af kaldet. <\/p>\n<p><b>Konklusion<\/b><\/p>\n<p>At forst\u00e5 den indre struktur af Linux kan virke som en uoverkommelig opgave, da selve kernen indeholder en enorm m\u00e6ngde kode, uden at tage h\u00f8jde for brugerrummets applikationer og systemopkaldsintrfaces i bibliotekerne p\u00e5 C, som <code>glibc<\/code>. En af m\u00e5derne at g\u00f8re fremskridt p\u00e5 er at l\u00e6se kildekoden til en del af kernen med fokus p\u00e5 at forst\u00e5 systemopkald og overskrifter, der henvender sig til brugerrummet, samt de grundl\u00e6ggende interne gr\u00e6nseflader i kernen, for eksempel tabellen <code>file_operations<\/code>. Filoperationer sikrer principperne bag \"alt er en fil\", s\u00e5 h\u00e5ndtering af dem er s\u00e6rlig tilfredsstillende. Kildefilerne til kernen p\u00e5 C i den \u00f8verste mappe <code>fs\/<\/code> repr\u00e6senterer implementeringen af virtuelle filsystemer, som er et lag af skaller, der giver bred og relativt nem kompatibilitet med popul\u00e6re filsystemer og lagringsenheder. Montering med binding og overlay gennem Linux-navneomr\u00e5der er magien ved VFS, som g\u00f8r det muligt at skabe containere og rodfilsystemer, der kun er skrivebeskyttede. I kombination med studiet af kildekoden, kernens eBPF-v\u00e6rkt\u00f8j og dets gr\u00e6nseflade <code>bcc<\/code><br \/>\n g\u00f8r det nemmere at forske i kernen end nogensinde f\u00f8r.<\/p>\n<p>Venner, skriv venligst, var denne artikel nyttig for dig? M\u00e5ske har du nogle kommentarer eller bem\u00e6rkninger? Og for dem, der er interesserede i kurset \u201dLinux Administrator\u201d, inviterer vi til <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/u5Jw\/\">\u00e5bent hus<\/a><\/noindex>, som finder sted den 18. april.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/446614\/\">F\u00f8rste del.<\/a><\/noindex><br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Virtuelle filsystemer i Linux: hvad de er gode for, og hvordan de fungerer? Del 2 | ProHoster","description":"Hej alle sammen, vi deler nu den anden del af publikationen \u201eVirtuelle filsystemer i Linux: hvorfor de er n\u00f8dvendige, og hvordan de fungerer?\u201c Den f\u00f8rste del kan l\u00e6ses","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/31333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=31333"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/31333\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/23299"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=31333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=31333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=31333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}