{"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\/pt\/blog\/administrirovanie\/virtualnye-fajlovye-sistemy-v-linux-zachem-oni-nuzhny-i-kak-oni-rabotayut-chast-2","title":{"rendered":"Sistemas de arquivos virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam? Parte 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1 a todos, compartilhamos com voc\u00eas a segunda parte da publica\u00e7\u00e3o \"Sistemas de Arquivos Virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam?\" A primeira parte pode ser lida <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/446614\/\">aqui<\/a><\/noindex>. Lembramos que esta s\u00e9rie de publica\u00e7\u00f5es est\u00e1 relacionada ao lan\u00e7amento de um novo curso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/tjnD\/\">Administrador Linux<\/a><\/noindex>, que come\u00e7ar\u00e1 em breve.<\/p>\n<p><b>Como monitorar o VFS com ferramentas eBPF e bcc<\/b><\/p>\n<p>A maneira mais simples de entender como o kernel opera os arquivos <code>sysfs<\/code> \u2013 \u00e9 observar isso na pr\u00e1tica, e a forma mais f\u00e1cil de observar o ARM64 \u00e9 usar o eBPF. eBPF (abrevia\u00e7\u00e3o de Berkeley Packet Filter) \u00e9 uma m\u00e1quina virtual executada no <noindex><a rel=\"nofollow\" href=\"https:\/\/events.linuxfoundation.org\/sites\/events\/files\/slides\/bpf_collabsummit_2015feb20.pdf\">kernel<\/a><\/noindex>, que usu\u00e1rios privilegiados podem acessar (<code>query<\/code>) a partir da linha de comando. O c\u00f3digo-fonte do kernel informa ao leitor o que o kernel pode fazer; executar ferramentas eBPF em um sistema carregado mostra o que o kernel realmente faz. <\/p>\n<p><img decoding=\"async\" alt=\"Sistemas de arquivos virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam? Parte 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>Felizmente, come\u00e7ar a usar o eBPF \u00e9 bastante f\u00e1cil com as ferramentas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\">bcc<\/a><\/noindex>, que est\u00e3o dispon\u00edveis como pacotes na distribui\u00e7\u00e3o geral <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/INSTALL.md\">Linux<\/a><\/noindex> e s\u00e3o amplamente documentadas <noindex><a rel=\"nofollow\" href=\"http:\/\/brendangregg.com\/ebpf.html\">por Bernard Greg<\/a><\/noindex>. As ferramentas <code>bcc<\/code> s\u00e3o scripts em Python com pequenos trechos de c\u00f3digo em C, o que significa que qualquer um que conhe\u00e7a ambas as linguagens pode facilmente modific\u00e1-los. No <code>bcc\/tools<\/code> existem 80 scripts em Python, o que significa que provavelmente um desenvolvedor ou administrador de sistemas conseguir\u00e1 encontrar algo adequado para resolver a tarefa. <br \/>\nPara ter pelo menos uma no\u00e7\u00e3o superficial do trabalho realizado pelo VFS em um sistema em execu\u00e7\u00e3o, experimente <code>vfscount<\/code> ou <code>vfsstat<\/code>. Isso mostrar\u00e1, por exemplo, que dezenas de chamadas <code>vfs_open()<\/code> e seus \"amigos\" ocorrem literalmente a cada segundo.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas de arquivos virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam? Parte 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> \u00e9 um script em Python, com inser\u00e7\u00f5es de c\u00f3digo em C, que simplesmente conta as chamadas de fun\u00e7\u00f5es VFS.<\/p><\/blockquote>\n<p>Vamos dar um exemplo mais trivial e ver o que acontece quando conectamos um pen drive ao computador e o sistema o detecta.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemas de arquivos virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam? Parte 2\" src=\"\/wp-content\/uploads\/2019\/04\/5c756fe1b6d4c5906631e5da24b59dca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<blockquote><p>Com o eBPF, podemos ver o que acontece em <code>\/sys<\/code>, quando o pen drive \u00e9 inserido. Aqui est\u00e1 um exemplo simples e um complicado.<\/p><\/blockquote>\n<p>No exemplo mostrado acima, <code>bcc<\/code> ferramenta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/tools\/trace_example.txt\">trace.py<\/a><\/noindex> gera uma mensagem quando o comando \u00e9 executado <code>sysfs_create_files()<\/code>. Vemos que <code>sysfs_create_files()<\/code> foi iniciado por meio de <code>kworker<\/code> em resposta \u00e0 inser\u00e7\u00e3o do pen drive, mas qual arquivo foi criado? O segundo exemplo mostra todo o poder do eBPF. Aqui <code>trace.py<\/code> exibe o backtrace do n\u00facleo (kernel backtrace) (op\u00e7\u00e3o -K) e o nome do arquivo que foi criado <code>sysfs_create_files()<\/code>. A inser\u00e7\u00e3o em declara\u00e7\u00f5es simples \u00e9 um c\u00f3digo em C que inclui uma string de formato facilmente reconhec\u00edvel, fornecida por um script Python que executa o LLVM <i>compilador just-in-time<\/i>. Essa string \u00e9 compilada e executada em uma m\u00e1quina virtual dentro do n\u00facleo. A assinatura completa da fun\u00e7\u00e3o <code>sysfs_create_files ()<\/code> deve ser reproduzida no segundo comando para que a string de formato possa se referir a um dos par\u00e2metros. Erros nesse trecho de c\u00f3digo em C levam a erros reconhec\u00edveis do compilador C. Por exemplo, se um par\u00e2metro -l for omitido, voc\u00ea ver\u00e1 \"Falha ao compilar o texto BPF.\" Desenvolvedores que est\u00e3o bem familiarizados com C e Python achar\u00e3o as ferramentas <code>bcc<\/code> simples de expandir e modificar.<\/p>\n<p>Quando o pen drive USB \u00e9 inserido, o backtrace do n\u00facleo mostrar\u00e1 que o PID 7711 \u00e9 o thread <code>kworker<\/code>, que criou o arquivo <code>\"events\"<\/code> em <code>sysfs<\/code>. Assim, a chamada com <code>sysfs_remove_files()<\/code> mostrar\u00e1 que a remo\u00e7\u00e3o do dispositivo resultou na exclus\u00e3o do arquivo <code>events<\/code>, o que corresponde ao conceito geral de contagem de refer\u00eancias. Nesse processo, visualizar <code>sysfs_create_link ()<\/code> com eBPF durante a inser\u00e7\u00e3o do pen drive USB mostrar\u00e1 que foram criadas pelo menos 48 links simb\u00f3licos.<\/p>\n<p>Ent\u00e3o, qual \u00e9 o significado do arquivo events? O uso de <noindex><a rel=\"nofollow\" href=\"http:\/\/northstar-www.dartmouth.edu\/doc\/solaris-forte\/manuals\/c\/user_guide\/cscope.html\">cscope<\/a><\/noindex> para buscar <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>, mostra que ela chama <code>disk_add_events ()<\/code>, e ou <code>\"media_change\"<\/code>, ou <code>\"eject_request\"<\/code> podem ser registrados no arquivo de eventos. Aqui, a camada de bloco do n\u00facleo informa o espa\u00e7o do usu\u00e1rio sobre a inser\u00e7\u00e3o e remo\u00e7\u00e3o de um \"disco\". Observe como esse m\u00e9todo de investiga\u00e7\u00e3o \u00e9 informativo, usando o exemplo da inser\u00e7\u00e3o do pen drive USB em compara\u00e7\u00e3o com as tentativas de descobrir como tudo funciona apenas a partir dos c\u00f3digos-fonte.<\/p>\n<p><b>Sistemas de arquivos somente leitura tornam poss\u00edveis os dispositivos incorporados<\/b><\/p>\n<p>Claro, ningu\u00e9m desliga um servidor ou seu computador puxando o plugue da tomada. Mas por qu\u00ea? Tudo porque os sistemas de arquivos montados em dispositivos de armazenamento f\u00edsico podem ter grava\u00e7\u00f5es pendentes, e as estruturas de dados que registram seu estado podem n\u00e3o estar sincronizadas com os registros no armazenamento. Quando isso acontece, os propriet\u00e1rios do sistema t\u00eam que esperar pela pr\u00f3xima inicializa\u00e7\u00e3o para executar a ferramenta <code>fsck filesystem-recovery<\/code> e, na pior das hip\u00f3teses, perder dados. <\/p>\n<p>No entanto, todos n\u00f3s sabemos que muitos dispositivos IoT, bem como roteadores, termostatos e autom\u00f3veis, agora funcionam com Linux. Muitos desses dispositivos praticamente n\u00e3o t\u00eam interface de usu\u00e1rio, e n\u00e3o h\u00e1 como deslig\u00e1-los 'limpamente'. Imagine ligar um carro com a bateria descarregada, enquanto a alimenta\u00e7\u00e3o do dispositivo de controle est\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.automotivelinux.org\/_media\/eg-rhsa\/agl_referencehardwarespec_v0.1.0_20171018.pdf\">Linux<\/a><\/noindex> constantemente oscilando. Como \u00e9 poss\u00edvel que o sistema inicie sem um longo <code>fsck<\/code>, quando finalmente o motor come\u00e7a a funcionar? A resposta \u00e9 simples. Dispositivos embarcados confiam no sistema de arquivos raiz <noindex><a rel=\"nofollow\" href=\"https:\/\/elinux.org\/images\/1\/1f\/Read-only_rootfs.pdf\">somente para leitura<\/a><\/noindex> (abreviado <code>ro-rootfs<\/code> (sistema de arquivos raiz somente leitura)). <\/p>\n<p><code>ro-rootfs<\/code> oferecem muitas vantagens que s\u00e3o menos \u00f3bvias do que a autenticidade. Uma das vantagens \u00e9 que malware n\u00e3o pode gravar em <code>\/usr<\/code> ou <code>\/lib<\/code>, se nenhum processo Linux puder escrever l\u00e1. Outra \u00e9 que um sistema de arquivos em grande parte imut\u00e1vel \u00e9 crucial para o suporte de campo de dispositivos remotos, pois a equipe de assist\u00eancia usa sistemas locais que s\u00e3o nominalmente id\u00eanticos aos sistemas no local. Talvez a vantagem mais importante (mas tamb\u00e9m a mais trai\u00e7oeira) seja que ro-rootfs for\u00e7a os desenvolvedores a decidir quais objetos de sistema ser\u00e3o imut\u00e1veis j\u00e1 na fase de design do sistema. Trabalhar com ro-rootfs pode ser inconveniente e doloroso, como costuma ser com vari\u00e1veis const em linguagens de programa\u00e7\u00e3o, mas suas vantagens compensam facilmente o custo adicional.<\/p>\n<p>Criar <code>rootfs<\/code> somente para leitura exige um esfor\u00e7o extra por parte dos desenvolvedores de sistemas embarcados, e \u00e9 aqui que entra o VFS. O Linux exige que arquivos em <code>\/var<\/code> sejam acess\u00edveis para grava\u00e7\u00e3o, e, al\u00e9m disso, muitos aplicativos populares que executam sistemas embarcados tentar\u00e3o criar <code>dot-files<\/code> em <code>$HOME<\/code>. Uma das solu\u00e7\u00f5es para arquivos de configura\u00e7\u00e3o no diret\u00f3rio home geralmente \u00e9 sua pr\u00e9-gera\u00e7\u00e3o e empacotamento em <code>rootfs<\/code>. Para <code>\/var<\/code> uma das abordagens poss\u00edveis \u00e9 mont\u00e1-lo em uma parti\u00e7\u00e3o separada, acess\u00edvel para grava\u00e7\u00e3o, enquanto o pr\u00f3prio <code>\/<\/code> monta apenas em modo somente leitura. Outra alternativa popular \u00e9 o uso de montagens vinculadas ou sobrepostas (bind ou overlay mounts).<\/p>\n<p><b>Montagens vinculadas e sobrepostas, seu uso por cont\u00eaineres<\/b> <\/p>\n<p>Executando o comando <code>man mount<\/code> \u00e9 a melhor maneira de aprender sobre montagens vinculadas e sobrepostas, que permitem que desenvolvedores e administradores de sistema criem um sistema de arquivos em um caminho e, em seguida, o disponibilizem para aplica\u00e7\u00f5es em outro. Para sistemas embutidos, isso significa poder armazenar arquivos em <code>\/var<\/code> em um pen drive dispon\u00edvel apenas para leitura, mas a montagem sobreposta ou vinculada de um caminho de <code>tmpfs<\/code> em <code>\/var<\/code> na inicializa\u00e7\u00e3o permitir\u00e1 que as aplica\u00e7\u00f5es escrevam l\u00e1 anota\u00e7\u00f5es (scrawl). Na pr\u00f3xima inicializa\u00e7\u00e3o, as mudan\u00e7as em <code>\/var<\/code> ser\u00e3o perdidas. A montagem sobreposta cria uma uni\u00e3o entre <code>tmpfs<\/code> e o sistema de arquivos subjacente e permite fazer altera\u00e7\u00f5es aparentemente em arquivos existentes em <code>ro-tootf<\/code> enquanto a montagem vinculada pode tornar novas pastas vazias vis\u00edveis como dispon\u00edveis para grava\u00e7\u00e3o em <code>tmpfs<\/code> caminhos. Enquanto <code>ro-rootfs<\/code> overlayfs <code>\u00e9 o tipo correto (<\/code> proper<code>) de sistema de arquivos, a montagem vinculada \u00e9 implementada no<\/code>espa\u00e7o de nomes VFS <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/tree\/Documentation\/filesystems\/sharedsubtree.txt\">Baseando-se na descri\u00e7\u00e3o de montagens sobrepostas e vinculadas, ningu\u00e9m se surpreende que<\/a><\/noindex>.<\/p>\n<p>cont\u00eaineres Linux <noindex><a rel=\"nofollow\" href=\"https:\/\/coreos.com\/os\/docs\/latest\/kernel-modules.html\">os utilizam ativamente. Vamos observar o que acontece quando usamos<\/a><\/noindex> systemd-nspawn <noindex><a rel=\"nofollow\" href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd-nspawn.html\">para iniciar um cont\u00eainer, utilizando a ferramenta<\/a><\/noindex> mountsnoop <code>system-nspawn<\/code> de <code>bcc<\/code>.<\/p>\n<p>Chamada <code>inicia o cont\u00eainer durante a execu\u00e7\u00e3o<\/code> mountsnoop.py <code>Vamos ver o que ocorreu:<\/code>.<\/p>\n<p>durante o \"in\u00edcio\" do cont\u00eainer, mostra que o ambiente de execu\u00e7\u00e3o do cont\u00eainer depende fortemente da montagem vinculada (Apenas o in\u00edcio de uma longa sa\u00edda \u00e9 exibido).<\/p>\n<p>Iniciar <code>system-nspawn<\/code> fornece arquivos selecionados do<\/p>\n<p>Aqui <code>para iniciar um cont\u00eainer, utilizando a ferramenta<\/code> host para o cont\u00eainer como caminhos em seu <code>procfs.<\/code> e <code>sysfs<\/code> . Al\u00e9m do <code>rootfs<\/code>MS_BIND <code>flag, que estabelece a montagem vinculada, algumas outras flags no sistema montado definem a rela\u00e7\u00e3o entre as mudan\u00e7as no espa\u00e7o de nomes do host e do cont\u00eainer. Por exemplo, a montagem vinculada pode ou passar as mudan\u00e7as em<\/code> para o cont\u00eainer, ou oculta-las dependendo da chamada. <code>\/proc<\/code> e <code>\/sys<\/code> em um cont\u00eainer ou ocult\u00e1-los dependendo da chamada. <\/p>\n<p><b>Conclus\u00e3o<\/b><\/p>\n<p>Entender a estrutura interna do Linux pode parecer uma tarefa imposs\u00edvel, j\u00e1 que o n\u00facleo cont\u00e9m uma enorme quantidade de c\u00f3digo, al\u00e9m das aplica\u00e7\u00f5es do espa\u00e7o do usu\u00e1rio Linux e das interfaces de chamada de sistema nas bibliotecas em C, como <code>glibc<\/code>. Uma das maneiras de avan\u00e7ar \u00e9 ler o c\u00f3digo-fonte de um subsistema do n\u00facleo, com foco na compreens\u00e3o das chamadas de sistema e dos cabe\u00e7alhos direcionados ao espa\u00e7o do usu\u00e1rio, bem como nas principais interfaces internas do n\u00facleo, por exemplo, a tabela <code>file_operations<\/code>. As opera\u00e7\u00f5es de arquivo sustentam o princ\u00edpio de que \"tudo \u00e9 um arquivo\", tornando o gerenciamento delas especialmente agrad\u00e1vel. Os arquivos de origem do n\u00facleo em C no diret\u00f3rio de n\u00edvel superior <code>fs\/<\/code> representam a implementa\u00e7\u00e3o de sistemas de arquivos virtuais, que atuam como uma camada de shell, proporcionando ampla e relativamente simples compatibilidade com sistemas de arquivos e dispositivos de armazenamento populares. O montagem por liga\u00e7\u00e3o e sobreposi\u00e7\u00e3o atrav\u00e9s de namespaces no Linux \u00e9 a m\u00e1gica do VFS, que torna poss\u00edvel a cria\u00e7\u00e3o de cont\u00eaineres e sistemas de arquivos raiz somente para leitura. Juntamente com o estudo do c\u00f3digo-fonte, a ferramenta do n\u00facleo eBPF e sua interface <code>bcc<\/code><br \/>\n tornam a explora\u00e7\u00e3o do n\u00facleo mais f\u00e1cil do que nunca.<\/p>\n<p>Amigos, escrevam se este artigo foi \u00fatil para voc\u00eas? Talvez voc\u00eas tenham alguns coment\u00e1rios ou observa\u00e7\u00f5es? E aqueles que se interessam pelo curso \"Administrador Linux\" est\u00e3o convidados para o <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/u5Jw\/\">dia de portas abertas<\/a><\/noindex>, que ocorrer\u00e1 em 18 de abril.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/446614\/\">Primeira parte.<\/a><\/noindex><br \/>\n<br \/>Fonte: <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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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\udd47Sistemas de arquivos virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam? Parte 2 | ProHoster","description":"Ol\u00e1 a todos, compartilhamos com voc\u00eas a segunda parte da publica\u00e7\u00e3o \"Sistemas de Arquivos Virtuais no Linux: por que s\u00e3o necess\u00e1rios e como funcionam?\" A primeira parte pode ser lida","canonical_url":"https:\/\/prohoster.info\/pt\/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":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/31333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=31333"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/31333\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/23299"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=31333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=31333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=31333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}