{"id":4415,"date":"2018-04-24T14:49:30","date_gmt":"2018-04-24T17:49:30","guid":{"rendered":"https:\/\/blog.clusterweb.com.br\/?p=4415"},"modified":"2018-04-24T14:49:30","modified_gmt":"2018-04-24T17:49:30","slug":"paravirtualizacao-com-xen","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=4415","title":{"rendered":"PARAVIRTUALIZA\u00c7\u00c3O COM XEN"},"content":{"rendered":"<div>\n<h1>SOBRE O XEN &#8211; INTRODU\u00c7\u00c3O<\/h1>\n<\/div>\n<div>Neste artigo explicarei de forma bastante objetiva o funcionamento, configura\u00e7\u00e3o e opera\u00e7\u00e3o do\u00a0<em>Xen<\/em>\u00a0e como criar e administrar m\u00e1quinas virtuais.<\/p>\n<p>Para come\u00e7ar, vamos explicar o que \u00e9 o Xen para entender o processo de paravirtualiza\u00e7\u00e3o e fazermos uma compara\u00e7\u00e3o com o modelo de virtualiza\u00e7\u00e3o total.<\/p>\n<p>&#8220;O Xen \u00e9 um dos mais populares exemplos de paravirtualiza\u00e7\u00e3o. Na virtualiza\u00e7\u00e3o total, o sistema operacional visitante tenta executar tarefas protegidas e, por estarem no espa\u00e7o de aplica\u00e7\u00e3o do sistema operacional hospedeiro, n\u00e3o podem ser executadas. No entanto, o VMM interv\u00e9m e executa ou simula a execu\u00e7\u00e3o dessas, o que reduz o desempenho da virtualiza\u00e7\u00e3o total. J\u00e1 a paravirtualiza\u00e7\u00e3o apresenta-se como uma alternativa a isso, na medida em que o sistema operacional visitante \u00e9 modificado para n\u00e3o tentar executar diretamente na CPU as tarefas protegidas, mas entregar essas ao VMM. Este tipo de virtualiza\u00e7\u00e3o tem um ganho de desempenho significativo frente \u00e0 total.<\/p>\n<p>Uma das maiores vantagens do uso do Xen como VMM na paravirtualiza\u00e7\u00e3o \u00e9 o fato de que este apresenta um desempenho melhor do que os produtos de virtualiza\u00e7\u00e3o total, quando a m\u00e1quina f\u00edsica hospedeira n\u00e3o tem instru\u00e7\u00f5es de hardware de suporte a virtualiza\u00e7\u00e3o. No entanto, h\u00e1 a necessidade de que o sistema visitante seja portado para o Xen, o que n\u00e3o chega a ser uma desvantagem, j\u00e1 que os sistemas operacionais mais comuns no mercado t\u00eam vers\u00f5es para o Xen. Alguns dos sistemas suportados pelo Xen s\u00e3o\u00a0<a href=\"https:\/\/www.vivaolinux.com.br\/linux\/\">Linux<\/a>, FreeBSD e Windows XP.<\/div>\n<div>\n<!--more--><br \/>\nA tecnologia de virtualiza\u00e7\u00e3o provida pelo Xen difere da tecnologia do VMWare. O Xen segue o conceito da paravirtualiza\u00e7\u00e3o, que fornece um conjunto de abstra\u00e7\u00f5es (processador virtual, mem\u00f3ria virtual, rede virtual etc.) sobre o qual diferentes sistemas podem ser portados [7]. As abstra\u00e7\u00f5es n\u00e3o s\u00e3o necessariamente similares ao hardware da m\u00e1quina f\u00edsica hospedeira.<\/p>\n<p>Para entender como o Xen implementa a paravirtualiza\u00e7\u00e3o, \u00e9 importante salientar dois conceitos: o de dom\u00ednio e o de hypervisor. Os dom\u00ednios s\u00e3o as m\u00e1quinas virtuais do Xen. Essas podem ser de dois tipos, privilegiadas (dom\u00ednio 0) e n\u00e3o-privilegiadas (dom\u00ednio U). O hypervisor \u00e9 o respons\u00e1vel por controlar os recursos de comunica\u00e7\u00e3o, de mem\u00f3ria e de processamento das m\u00e1quinas virtuais, mas n\u00e3o possui os drivers para manipular os dispositivos diretamente.<\/p>\n<p>Quando a m\u00e1quina hospedeira \u00e9 iniciada, uma m\u00e1quina virtual do dom\u00ednio 0, privilegiado, \u00e9 criada. Esse dom\u00ednio acessa uma interface de controle e executa aplica\u00e7\u00f5es de gerenciamento. As m\u00e1quinas virtuais dos dom\u00ednios U s\u00f3 podem ser criadas, iniciadas e desligadas atrav\u00e9s do dom\u00ednio 0. Na m\u00e1quina virtual do dom\u00ednio 0 \u00e9 executado um Linux com n\u00facleo modificado, que pode acessar os recursos da m\u00e1quina f\u00edsica, j\u00e1 que possui privil\u00e9gios especiais, e ainda se comunicar com as outras m\u00e1quinas virtuais, dom\u00ednio U.<\/p>\n<p>O sistema operacional do dom\u00ednio 0 tem que ser modificado para possuir os drivers de dispositivo da m\u00e1quina f\u00edsica e dois drivers que tratam requisi\u00e7\u00f5es de acessos \u00e0 rede e ao disco realizadas pelas m\u00e1quinas virtuais do dom\u00ednio U. Em suma, s\u00f3 a m\u00e1quina virtual do dom\u00ednio 0 tem acesso direto aos recursos da m\u00e1quina f\u00edsica, enquanto que as demais m\u00e1quinas virtuais t\u00eam acesso a uma abstra\u00e7\u00e3o dos recursos, que para serem acessados, as m\u00e1quina virtuais dos dom\u00ednios U t\u00eam que acessar atrav\u00e9s do dom\u00ednio 0.<\/p>\n<div class=\"figura\"><a href=\"https:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/hypervisor.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/thumb_hypervisor.jpg\" alt=\"Linux: Paravirtualiza\u00e7\u00e3o com XEN\" width=\"400\" height=\"285\" border=\"0\" \/><\/a><\/div>\n<p>Para a virtualiza\u00e7\u00e3o da mem\u00f3ria, o Xen reserva para cada m\u00e1quina virtual uma determinada quantidade de mem\u00f3ria, que pode ser alterada a qualquer momento sem a necessidade de terminar ou reiniciar a m\u00e1quina virtual. Cada m\u00e1quina virtual pode ter uma ou mais interfaces de rede virtuais. A comunica\u00e7\u00e3o entre as interfaces \u00e9 implementada por dois token rings, um para enviar e outro para receber [7].<\/p>\n<p>Atualmente o Xen conta tamb\u00e9m com um dom\u00ednio no qual \u00e9 feita a virtualiza\u00e7\u00e3o total, o que permite que sistemas operacionais n\u00e3o modificados sejam executados sobre o hypervisor Xen. Inicialmente, a escolha pela paravirtualiza\u00e7\u00e3o justificava-se pelo fato de que o ganho em desempenho era muito maior do que com a virtualiza\u00e7\u00e3o total. No entanto, com o advento das arquiteturas AMD-V e Intel VT, arquitetura que d\u00e3o o suporte de hardware para a virtualiza\u00e7\u00e3o, a virtualiza\u00e7\u00e3o total passou a obter resultados de desempenho melhores que os da paravirtualiza\u00e7\u00e3o. Vale ressaltar que o dom\u00ednio de virtualiza\u00e7\u00e3o total dispon\u00edvel no Xen a partir da sua vers\u00e3o 3.0, s\u00f3 pode ser usado nas m\u00e1quinas hospedeiras que possuam suporte de hardware \u00e0 virtualiza\u00e7\u00e3o.&#8221;<\/p>\n<p>Fonte: UFRJ<\/p>\n<h1>UTILIZA\u00c7\u00c3O DO XEN<\/h1>\n<p>O\u00a0<em>Xen<\/em>\u00a0pode ser empregado em diversas fun\u00e7\u00f5es, por exemplo:<\/p>\n<ul>\n<li>Consolida\u00e7\u00e3o de servidores<\/li>\n<li>Virtualiza\u00e7\u00e3o da Infra-estrutura de TI<\/li>\n<li>Laborat\u00f3rios de ensino<\/li>\n<li>Desenvolvimento de software<\/li>\n<\/ul>\n<p>Como podemos observar, tem um potencial de uso enorme.<\/p>\n<p>Agora vamos ao que interessa. M\u00e3os \u00e0 obra!<\/p><\/div>\n<h1>REQUISITOS E CONSIDERA\u00c7\u00d5ES<\/h1>\n<p>Distro:\u00a0<em>Debian Etch<\/em>\u00a0(4.0)<\/p>\n<p>Sistema de arquivos: EXT3<\/p>\n<p>Processador: AMD Athlon(tm) 64 X2 Dual Core Processor 4000+<\/p>\n<p>Mem\u00f3ria RAM: 1GB<\/p>\n<p>Armazenamento: HD SATA 120 GB<\/p>\n<p>Vers\u00e3o Xen: 3.0.3<\/p>\n<p>VMs a serem criadas: 2<\/p>\n<p>Ter no m\u00ednimo 384MB de mem\u00f3ria RAM (128 + 256), uma vez que o XEN imp\u00f5e que sobre, no m\u00ednimo, 196MB de RAM para uso da m\u00e1quina real. Isto \u00e9, ainda que use 128MB de RAM na m\u00e1quina virtual, ainda sobrar\u00e1 256MB de RAM para sua m\u00e1quina real.<\/p>\n<p>Na instala\u00e7\u00e3o do Debian, crie as parti\u00e7\u00f5es da seguinte forma:<\/p>\n<div>\n<pre>\/      10GB\r\n\/boot      128MB\r\nswap      1GB\r\nLVM      todo o espa\u00e7o restante\r\n\r\n<\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o do sistema operacional, configure os reposit\u00f3rios padr\u00e3o com as op\u00e7\u00f5es &#8220;main&#8221; &#8220;contrib&#8221;. Edite o arquivo\u00a0<em>sources.list<\/em>conforme exibido abaixo.<\/p>\n<p><strong># vim \/etc\/apt\/sources.list\u00a0<\/strong><\/p>\n<div class=\"codigo\">deb http:\/\/ftp.br.debian.org\/debian\/ etch main contrib non-free<br \/>\ndeb-src http:\/\/ftp.br.debian.org\/debian\/ etch main<\/p>\n<p>deb http:\/\/security.debian.org\/ etch\/updates main contrib<br \/>\ndeb-src http:\/\/security.debian.org\/ etch\/updates main contrib<\/p><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>INSTALA\u00c7\u00c3O E CONFIGURA\u00c7\u00c3O<\/h1>\n<p>&nbsp;<\/p>\n<div>Atualize a lista de pacotes com o comando abaixo:<\/p>\n<p><strong># aptitude update<\/strong><\/p>\n<p>Atualize os pacotes com o comando abaixo:<\/p>\n<p><strong># aptitude upgrade<\/strong><\/p>\n<p>Instale os pacotes abaixo, que s\u00e3o requeridos para o Xen:<\/p>\n<p><strong># aptitude install apmd less lvm2 linuxlogo rcconf bridge-utils iproute xen-hypervisor-3.0.3-1-i386 xen-utils linux-image-2.6.18-6-xen-686 xen-linux-system-2.6.18-6-xen-686<\/strong><\/p>\n<p>Insira o comando abaixo para criar a imagem initrd do novo kernel xen baixado:<\/p>\n<p><strong># mkinitramfs -o \/boot\/initrd.img-2.6.18-6-xen-686 2.6.18-6-xen-686\u00a0<\/strong><\/p>\n<p>Obs.: Para saber qual o nome correto do kernel xen, utilize o comando:<\/p>\n<p><strong># ls \/lib\/modules<\/strong><\/p>\n<p>Apenas para constatar, verifique no grub se aparece o novo kernel como op\u00e7\u00e3o de boot.<\/p>\n<p><strong># cat \/boot\/grub\/menu.lst\u00a0<\/strong><\/p>\n<p>Renomeie\/desabilite o diret\u00f3rio \/lib\/tls com o comando:<\/p>\n<p><strong># mv \/lib\/tls \/lib\/tls.disabled\u00a0<\/strong><\/p>\n<p>Altere as configura\u00e7\u00f5es de rede, conforme abaixo, a fim de criar uma bridge que ser\u00e1 utilizada pelas VMs. Para tanto, edite o arquivo\u00a0<em>\/etc\/network\/interfaces<\/em>\u00a0e remova ou comente toda a configura\u00e7\u00e3o do adaptador de rede da m\u00e1quina real. Mantenha as configura\u00e7\u00f5es do loopback e configure a bridge.<\/p>\n<p><strong># vi \/etc\/network\/interfaces\u00a0<\/strong><\/p>\n<div class=\"codigo\">auto lo<br \/>\nauto xen<br \/>\niface lo inet loopback<\/p>\n<p><span class=\"comentario\">#### configura\u00e7\u00e3o ip est\u00e1tico ####<\/span><br \/>\nallow-hotplug xen<br \/>\niface xen inet static<br \/>\naddress 192.168.1.2<br \/>\nnetmask 255.255.255.0<br \/>\nnetwork 192.168.1.0<br \/>\nbroadcast 192.168.0.255<br \/>\ngateway 192.168.1.1<br \/>\nbridge_ports eth0<br \/>\nbridge_maxwait 0<\/div>\n<p>Obs: A linha &#8220;bridge_ports eth0&#8221; associar\u00e1 a bridge \u00e0 interface eth0. Com isso, a eth0 passar\u00e1 responder, na rede, pelo endere\u00e7o IP 192.168.1.81.<\/p>\n<p>Em conseq\u00fc\u00eancia, n\u00e3o dever\u00e1 haver uma configura\u00e7\u00e3o individual da eth0.<\/p>\n<p>Tudo feito, reinicie a m\u00e1quina e d\u00ea boot pelo novo kernel, isto \u00e9, o kernel xen.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>CONFIGURA\u00c7\u00c3O DA LVM PARA DUAS M\u00c1QUINAS VIRTUAIS<\/h1>\n<p>&nbsp;<\/p>\n<div>Criar a\u00a0<em>LVM<\/em>\u00a0com a parti\u00e7\u00e3o que receber\u00e1 as VMs desmontadas (opera\u00e7\u00e3o realizada previamente).<\/p>\n<p>Preparar o suporte LVM com o comando abaixo, considerando que tal parti\u00e7\u00e3o seja a \/dev\/sda4:<\/p>\n<p><strong># pvcreate \/dev\/sda4<\/strong><\/p>\n<p>A seguir, crie um grupo l\u00f3gico, denominado vm, com o comando:<\/p>\n<p><strong># vgcreate vg \/dev\/sda4<\/strong><\/p>\n<p>Agora crie um volume l\u00f3gico para cada parti\u00e7\u00e3o necess\u00e1ria para as m\u00e1quinas virtuais. Considere o exemplo a seguir:<\/p>\n<ul>\n<li>01 parti\u00e7\u00e3o raiz, denominada vm-virt01.raiz, com 20 GB;<\/li>\n<li>01 parti\u00e7\u00e3o de swap, denominada vm-virt01.swap, com 512 MB;<\/li>\n<li>01 parti\u00e7\u00e3o raiz, denominada vm-virt02.raiz, com 20 GB;<\/li>\n<li>01 parti\u00e7\u00e3o de swap, denominada vm-virt02.swap, com 512 MB.<\/li>\n<\/ul>\n<p>Para criar os citados volumes, utilize os seguintes comandos, respectivamente:<\/p>\n<p><strong># lvcreate -L20G -n vm-virt01.raiz vg<br \/>\n# lvcreate -L512M -n vm-virt01.swap vg<br \/>\n# lvcreate -L20G -n vm-virt02.raiz vg<br \/>\n# lvcreate -L512M -n vm-virt02.swap vg<\/strong><\/p>\n<p>Utilize o comando &#8220;lvs&#8221; para verificar os volumes criados e &#8220;pvs&#8221; para checar o espa\u00e7o ocupado. Ao criar os volumes, passar\u00e3o a existir os seguintes dispositivos:<\/p>\n<ul>\n<li>\/dev\/vg\/vm-virt01.raiz<\/li>\n<li>\/dev\/vg\/vm-virt01.swap<\/li>\n<li>\/dev\/vg\/vm-virt02.raiz<\/li>\n<li>\/dev\/vg\/vm-virt02.swap<\/li>\n<\/ul>\n<p>A seguir, formate os dispositivos l\u00f3gicos:<\/p>\n<p><strong># mkfs.ext3 \/dev\/vg\/vm-virt01.raiz<br \/>\n# mkswap \/dev\/vg\/vm-virt01.swap<br \/>\n# mkfs.ext3 \/dev\/vg\/vm-virt01.raiz<br \/>\n# mkswap \/dev\/vg\/vm-virt01.swap\u00a0<\/strong><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>CRIA\u00c7\u00c3O DA M\u00c1QUINA MODELO<\/h1>\n<p>&nbsp;<\/p>\n<div>Criaremos uma m\u00e1quina modelo agora que ser\u00e1 usada posteriormente.<\/p>\n<p><strong># mkdir \/modelo<\/strong><\/p>\n<p>Instale o\u00a0<em>debootstrap<\/em>:<\/p>\n<p><strong># aptitude install debootstrap<\/strong><\/p>\n<p>O debootstrap precisa de uma fonte de dados, que pode ser o CD-ROM do Debian ou uma URL da Internet. Para utilizar o debootstrap uma URL, execute o comando:<\/p>\n<p><strong># debootstrap etch \/modelo http:\/\/ftp.us.debian.org\/debian<\/strong><\/p>\n<p>Copie alguns arquivos essenciais para dentro de \/modelo:<\/p>\n<p><strong># cp -a \/etc\/apt\/* \/modelo\/etc\/apt<br \/>\n# cp -a \/etc\/fstab \/modelo\/etc<br \/>\n# cp -a \/etc\/hosts \/modelo\/etc<br \/>\n# cp -a \/etc\/network\/interfaces \/modelo\/etc\/network<br \/>\n# cp -av \/lib\/modules\/*xen* \/modelo\/lib\/modules\u00a0<\/strong><\/p>\n<p>&#8220;Enjaule-se&#8221; dentro do diret\u00f3rio \/modelo com o comando:<\/p>\n<p><strong># chroot \/modelo\u00a0<\/strong><\/p>\n<p>Obs.: Uma vez enjaulado, o \/modelo passar\u00e1 a ser a raiz do sistema (\/). Com isso o administrador estar\u00e1 operando dentro de um novo sistema, que dever\u00e1 ser reconfigurado. Se a rede estava funcionando fora da jaula, continuar\u00e1 funcionando dentro da mesma e com o mesmo endere\u00e7o IP.<\/p>\n<p>Execute o comando:<\/p>\n<p><strong># mount \/proc<\/strong><\/p>\n<p>Obs.: Isso se faz necess\u00e1rio porque a parti\u00e7\u00e3o \/proc \u00e9 montada pelo sistema durante o boot e n\u00e3o houve boot de sistema e sim enjaulamento.<\/p>\n<p>Execute os comandos:<\/p>\n<p><strong># aptitude update<br \/>\n# aptitude install locales libc6-xen\u00a0<\/strong><\/p>\n<p>Defina as vari\u00e1veis abaixo:<\/p>\n<p><strong># export LC_ALL=&#8221;pt_BR&#8221;<br \/>\n# export LC_CTYPE=&#8221;pt_BR&#8221;<br \/>\n# export LANGUAGE=&#8221;pt_BR&#8221;<br \/>\n# export LANG=&#8221;pt_BR&#8221;<br \/>\n# export LC_MESSAGES=&#8221;pt_BR&#8221;<\/strong><\/p>\n<p>Execute o comando abaixo para reconfigura\u00e7\u00e3o do locales:<\/p>\n<p><strong># dpkg-reconfigure locales<\/strong><\/p>\n<p>Nas op\u00e7\u00f5es exibidas na tela, selecione &#8220;pt_BR ISO-8859-1&#8221; e clique em OK. Em seguida confirme a op\u00e7\u00e3o &#8220;pt_BR&#8221; e clique em OK.<\/p>\n<p>Execute o comando a seguir para otimizar o sistema:<\/p>\n<p><strong># aptitude install apmd less linuxlogo ntpdate rcconf\u00a0<\/strong><\/p>\n<p>Instale o pacote\u00a0<em>module-init-tools<\/em>:<\/p>\n<p><strong># aptitude install module-init-tools\u00a0<\/strong><\/p>\n<p>Atualize o sistema com o comando:<\/p>\n<p><strong># aptitude upgrade<\/strong><\/p>\n<p>Remova os arquivos .deb utilizados at\u00e9 o momento para que a m\u00e1quina modelo n\u00e3o fique muito grande:<\/p>\n<p><strong># apt-get clean\u00a0<\/strong><\/p>\n<p>Converta o arquivo de senhas de \/etc\/passwd para \/etc\/shadow com o comando:<\/p>\n<p><strong># pwconv\u00a0<\/strong><\/p>\n<p>Edite o arquivo \/etc\/hostname e altere o nome da m\u00e1quina para &#8220;modelo&#8221;.<\/p>\n<p>Edite o arquivo \/etc\/hosts e altere o nome para &#8220;modelo&#8221; e ip da m\u00e1quina para 192.168.1.3.<\/p>\n<p>Edite o arquivo \/etc\/network\/interfaces e altere o nome xen por eth0 para que as m\u00e1quinas virtuais possam utilizar corretamente os adaptadores de rede. Ainda, remova as entradas bridge_ports e bridge_maxwait.<\/p>\n<p>Renomeie o diret\u00f3rio \/lib\/tls para desabilit\u00e1-lo. Utilize o comando:<\/p>\n<p><strong># mv \/lib\/tls \/lib\/tls.disabled<\/strong><\/p>\n<p>Edite o arquivo \/etc\/inittab e desabilite os terminais locais de 2 a 6 (lembra do que eu disse no in\u00edcio sobre s\u00f3 ter um terminal). A situa\u00e7\u00e3o final ser\u00e1 a seguinte:<\/p>\n<div class=\"codigo\">1:2345:respawn:\/sbin\/getty 38400 tty1<br \/>\n<span class=\"comentario\">#2:23:respawn:\/sbin\/getty 38400 tty2<br \/>\n#3:23:respawn:\/sbin\/getty 38400 tty3<br \/>\n#4:23:respawn:\/sbin\/getty 38400 tty4<br \/>\n#5:23:respawn:\/sbin\/getty 38400 tty5<br \/>\n#6:23:respawn:\/sbin\/getty 38400 tty6<\/span><\/div>\n<p>Obs.: O Xen s\u00f3 utiliza um terminal. Assim sendo, a n\u00e3o desabilita\u00e7\u00e3o dos terminais excedentes causar\u00e1 mensagens de erro na tela.<\/p>\n<p>Edite o arquivo\u00a0<em>\/etc\/profile<\/em>\u00a0e insira as linhas (no final):<\/p>\n<div class=\"codigo\">alias ls=&#8217;ls &#8211;color=auto&#8217;<br \/>\nexport TMOUT=1200<\/div>\n<p>Obs.: A linha &#8220;alias&#8221; prover\u00e1 a facilidade de coloriza\u00e7\u00e3o dos resultados do comando ls. A linha export ir\u00e1 declarar a vari\u00e1vel TMOUT. Com isso, ap\u00f3s 1200 segundos (20 minutos) de inatividade no teclado, haver\u00e1 um auto-logout. Isso aumentar\u00e1 o n\u00edvel de seguran\u00e7a.<\/p>\n<p>Edite o arquivo\u00a0<em>\/etc\/fstab<\/em>\u00a0e altere as entradas existentes para que fiquem compat\u00edveis com as m\u00e1quinas virtuais a serem criadas. Esse arquivo dever\u00e1 referir-se a uma nova m\u00e1quina que, normalmente, ter\u00e1 um esquema de parti\u00e7\u00f5es pr\u00f3prio, come\u00e7ando em \/dev\/hda1. A seguir, um exemplo de configura\u00e7\u00e3o para a m\u00e1quina modelo:<\/p>\n<div class=\"codigo\">\n<pre><span class=\"comentario\"># &lt;file system&gt; &lt;mount point&gt; &lt;type&gt;  &lt;options&gt; &lt;dump&gt; &lt;pass&gt;<\/span>\r\nproc          \/proc       proc     defaults    0     0\r\n\/dev\/hda1     \/           ext3     defaults    0     1\r\n\/dev\/hda2     none        swap     sw          0     0<\/pre>\n<\/div>\n<p>Obs.: N\u00e3o se preocupe com o fato de ter utilizado \/dev\/hda1 e \/dev\/hda2 e n\u00e3o saber o porque disso. Isto em nada tem haver com seus dispositivos f\u00edsicos (reais), at\u00e9 mesmo se acaso tivesse, n\u00f3s usar\u00edamos algo como \/dev\/sd*, o que n\u00e3o \u00e9 o caso. Na verdade, no momento em que a m\u00e1quina virtual for configurada para ir ao ar, ser\u00e3o atribu\u00eddas liga\u00e7\u00f5es entre os dispositivos em quest\u00e3o e os volumes l\u00f3gicos criados anteriormente. Assim sendo, no caso da m\u00e1quina vm1, \/dev\/hda1 ser\u00e1 correlacionado com \/dev\/vm\/vm-virt01.raiz ou \/dev\/vm\/vm-virt02.raiz. J\u00e1 o \/dev\/hda2 ser\u00e1 correlacionado com \/dev\/vm\/vm-virt01.swap ou \/dev\/vm\/vm-virt02.swap. Isso ser\u00e1 configurado posteriormente.<\/p>\n<p>Desmonte o diret\u00f3rio \/proc com o comando:<\/p>\n<p><strong># umount \/proc<\/strong><\/p>\n<p>Saia da jaula com o comando:<\/p>\n<p><strong># exit<\/strong><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>CRIA\u00c7\u00c3O DAS M\u00c1QUINAS VIRTUAIS<\/h1>\n<p>&nbsp;<\/p>\n<div>Cada VM poder\u00e1 ser criada a partir da m\u00e1quina modelo rec\u00e9m configurada.<\/p>\n<h1>CRIA\u00c7\u00c3O DA M\u00c1QUINA VIRTUAL PARA VIRT01<\/h1>\n<p>Dever\u00e1 ser configurada a m\u00e1quina virt01 (composta pelos volumes \/dev\/vm\/vm-virt01.raiz e \/dev\/vm\/vm-virt01.swap).<\/p>\n<p>Para criar a VM do VIRT01, monte o dispositivo \/dev\/vm\/vm-virt01.raiz em \/mnt\/vm-virt01 com o comando:<\/p>\n<p><strong># mkdir \/mnt\/vm-virt01<br \/>\n# mount \/dev\/vm\/vm-virt01.raiz \/mnt\/vm-virt01<\/strong><\/p>\n<p>Copie o conte\u00fado de \/modelo para \/mnt\/vm-virt01 com o comando:<\/p>\n<p><strong># cp -a \/modelo\/* \/mnt\/vm-virt01<\/strong><\/p>\n<p>Para evitar erros, enjaule-se dento do diret\u00f3rio \/mnt\/vm-virt01 com o comando:<\/p>\n<p><strong># chroot \/mnt\/vm-virt01<\/strong><\/p>\n<p>Dentro da jaula, revise o arquivo \/etc\/fstab, verificando se o mesmo encontra-se de acordo com a realidade da m\u00e1quina virtual que ir\u00e1 ao ar. A seguir, um exemplo de configura\u00e7\u00e3o para a m\u00e1quina virt01:<\/p>\n<div class=\"codigo\">\n<pre><span class=\"comentario\"># &lt;file system&gt; &lt;mount point&gt; &lt;type&gt; &lt;options&gt; &lt;dump&gt; &lt;pass&gt;<\/span>\r\nproc              \/proc     proc     defaults    0     0\r\n\/dev\/hda1     \/            ext3     defaults    0     1\r\n\/dev\/hda2     none      swap    sw            0     0<\/pre>\n<\/div>\n<p>Dentro da jaula, ajuste o nome da m\u00e1quina virtual modificando o arquivo \/etc\/hostname para virt01.<\/p>\n<p>Dentro da jaula, ajuste o nome e o endere\u00e7o IP da m\u00e1quina virtual modificando o arquivo \/etc\/hosts. A seguir, como deve ficar a configura\u00e7\u00e3o da m\u00e1quina:<\/p>\n<div class=\"codigo\">\n<pre>127.0.0.1     localhost.localdomain            localhost\r\n192.168.1.4   virt01.dominio.com.br          virt01<\/pre>\n<\/div>\n<p>Dentro da jaula, ajuste as configura\u00e7\u00f5es de rede da m\u00e1quina virtual. O endere\u00e7o IP dever\u00e1 ser diferente do atribu\u00eddo \u00e0 m\u00e1quina real. Um exemplo de configura\u00e7\u00e3o:<\/p>\n<div class=\"codigo\">auto lo<br \/>\nauto eth0<br \/>\niface lo inet loopback<\/p>\n<p>auto eth0<br \/>\niface eth0 inet static<br \/>\naddress 192.168.1.4<br \/>\nnetmask 255.255.255.0<br \/>\nnetwork 192.168.1.0<br \/>\nbroadcast 192.168.1.255<br \/>\ngateway 192.168.1.1<\/p><\/div>\n<p>Desenjaule-se com o comando:<\/p>\n<p><strong># exit<\/strong><\/p>\n<p>Desmonte a parti\u00e7\u00e3o \/mnt\/vm-virt01 com o comando:<\/p>\n<p><strong># umount \/mnt\/vm-virt01<\/strong><\/p>\n<p>Agora criaremos a VM para o VIRT02.<\/p>\n<p>Monte o dispositivo \/dev\/vm\/vm-virt02.raiz em \/mnt\/vm-virt02 com o comando:<\/p>\n<p><strong># mkdir \/mnt\/vm-virt02<br \/>\n# mount \/dev\/vm\/vm-virt02.raiz \/mnt\/vm-virt02<\/strong><\/p>\n<p>Copie o conte\u00fado de \/modelo para \/mnt\/vm-virt02 com o comando:<\/p>\n<p><strong># cp -a \/modelo\/* \/mnt\/vm-virt02<\/strong><\/p>\n<p>Para evitar erros, enjaule-se dento do diret\u00f3rio \/mnt\/vm-virt02 com o comando:<\/p>\n<p><strong># chroot \/mnt\/vm-virt02<\/strong><\/p>\n<p>Dentro da jaula, revise o arquivo \/etc\/fstab, verificando se o mesmo encontra-se de acordo com a realidade da m\u00e1quina virtual que ir\u00e1 ao ar. A seguir, um exemplo de configura\u00e7\u00e3o para a m\u00e1quina vm-virt02:<\/p>\n<div class=\"codigo\">\n<pre><span class=\"comentario\"># &lt;file system&gt; &lt;mount point&gt; &lt;type&gt; &lt;options&gt; &lt;dump&gt; &lt;pass&gt;<\/span>\r\nproc                   \/proc               proc       defaults      0           0\r\n\/dev\/hda1          \/                      ext3       defaults      0           1\r\n\/dev\/hda2          none                swap       sw             0           0<\/pre>\n<\/div>\n<p>Dentro da jaula, ajuste o nome da m\u00e1quina virtual modificando o arquivo \/etc\/hostname para virt02.<\/p>\n<p>Dentro da jaula, ajuste o nome e o endere\u00e7o IP da m\u00e1quina virtual modificando o arquivo \/etc\/hosts. A seguir, como deve ficar a configura\u00e7\u00e3o da m\u00e1quina:<\/p>\n<div class=\"codigo\">\n<pre>127.0.0.1     localhost.localdomain        localhost\r\n192.168.1.5   virt02.omni.com.br           virt02<\/pre>\n<\/div>\n<p>Dentro da jaula, ajuste as configura\u00e7\u00f5es de rede da m\u00e1quina virtual. O endere\u00e7o IP dever\u00e1 ser diferente do atribu\u00eddo \u00e0 m\u00e1quina real. Um exemplo de configura\u00e7\u00e3o:<\/p>\n<div class=\"codigo\">auto lo<br \/>\nauto eth0<br \/>\niface lo inet loopback<\/p>\n<p>auto eth0<br \/>\niface eth0 inet static<br \/>\naddress 192.168.1.5<br \/>\nnetmask 255.255.255.0<br \/>\nnetwork 192.168.1.0<br \/>\nbroadcast 192.168.1.255<br \/>\ngateway 192.168.1.1<\/p><\/div>\n<p>Desenjaule-se com o comando:<\/p>\n<p><strong># exit\u00a0<\/strong><\/p>\n<p>Desmonte a parti\u00e7\u00e3o \/mnt\/vm-virt02 com o comando:<\/p>\n<p><strong># umount \/mnt\/vm-virt02<\/strong><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>CONFIGURA\u00c7\u00c3O DAS M\u00c1QUINAS VIRTUAIS<\/h1>\n<p>&nbsp;<\/p>\n<div>Cada VM dever\u00e1 ter um arquivo de configura\u00e7\u00e3o dentro do diret\u00f3rio \/etc\/xen, existente dentro da m\u00e1quina real.<\/p>\n<p>Crie o arquivo\u00a0<em>\/etc\/xen\/vm-virt01<\/em>\u00a0com o conte\u00fado abaixo. Essas instru\u00e7\u00f5es ser\u00e3o a refer\u00eancia para inicializa\u00e7\u00e3o da m\u00e1quina virt01 (VIRT01):<\/p>\n<div class=\"codigo\">kernel=&#8221;\/boot\/vmlinuz-2.6.18-6-xen-686&#8243;<br \/>\nramdisk=&#8221;\/boot\/initrd.img-2.6.18-6-xen-686&#8243;<br \/>\nmemory=128<br \/>\nroot=&#8221;\/dev\/hda1 ro&#8221;<br \/>\ndisk=[ &#8216;phy:\/dev\/vm\/vm-virt01.raiz,hda1,w&#8217;, &#8216;phy:\/dev\/vm\/vm-virt01.swap,hda2,w&#8217; ]<br \/>\nvif=[ &#8216;bridge=xen&#8217; ]<\/div>\n<p>Crie agora o arquivo\u00a0<em>\/etc\/xen\/vm-virt02<\/em>\u00a0com o conte\u00fado abaixo. Essas instru\u00e7\u00f5es ser\u00e3o a refer\u00eancia para inicializa\u00e7\u00e3o da m\u00e1quina virt02 (VIRT02):<\/p>\n<div class=\"codigo\">kernel=&#8221;\/boot\/vmlinuz-2.6.18-6-xen-686&#8243;<br \/>\nramdisk=&#8221;\/boot\/initrd.img-2.6.18-6-xen-686&#8243;<br \/>\nmemory=128<br \/>\nroot=&#8221;\/dev\/hda1 ro&#8221;<br \/>\ndisk=[ &#8216;phy:\/dev\/vm\/vm-virt02.raiz,hda1,w&#8217;, &#8216;phy:\/dev\/vm\/vm-virt02.swap,hda2,w&#8217; ]<br \/>\nvif=[ &#8216;bridge=xen&#8217; ]<\/div>\n<p>A linha kernel refere-se ao kernel que ser\u00e1 utilizado pela m\u00e1quina virtual. Esse kernel encontra-se no diret\u00f3rio \/boot da m\u00e1quina real.<\/p>\n<p>A linha ramdisk refere-se ao arquivo initrd, que tamb\u00e9m poder\u00e1 ser encontrado no diret\u00f3rio \/boot da m\u00e1quina real.<\/p>\n<p>A linha memory ir\u00e1 limitar a quantidade de mem\u00f3ria RAM, em megabytes, que ser\u00e1 disponibilizada para a m\u00e1quina virtual. \u00c9 importante notar que a m\u00e1quina real necessita de, pelo menos, 196 MB de RAM (imposi\u00e7\u00e3o do Xen).<\/p>\n<p>A linha root especifica qual ser\u00e1 a parti\u00e7\u00e3o raiz da m\u00e1quina virtual.<\/p>\n<p>A linha disk especifica quais volumes l\u00f3gicos ser\u00e3o utilizados pela m\u00e1quina virtual. No caso, o volume \/dev\/vm\/vm-virt01.raiz ser\u00e1 utilizado como hda1 (dentro da m\u00e1quina virtual) e o volume \/dev\/vm\/vm-virt01.swap ser\u00e1 utilizado como hda2. \u00c9 importante notar que essa linha deve obedecer \u00e0s especifica\u00e7\u00f5es inseridas anteriormente em \/mnt\/vm-virt01\/etc\/fstab.<\/p>\n<p>A linha vif definir\u00e1 a bridge que ser\u00e1 utilizada para prover a comunica\u00e7\u00e3o com a rede.<\/p>\n<p>Ainda, na linha vif \u00e9 poss\u00edvel fixar um endere\u00e7o MAC a ser atribu\u00eddo \u00e0 VM, por\u00e9m n\u00e3o \u00e9 necess\u00e1rio, pois ser\u00e3o gerados MACs aleat\u00f3rios para as VMs.<\/p>\n<p>Para declarar o MAC, utilize a entrada mac, como no exemplo mostrado a seguir:<\/p>\n<div class=\"codigo\">vif=[ &#8216;mac=ac:de:48:00:00:01, bridge=xen&#8217; ]<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>INICIALIZANDO E GERENCIANDO AS VMS<\/h1>\n<p>&nbsp;<\/p>\n<div>Para inicializar a primeira m\u00e1quina virtual, utilize o comando:<\/p>\n<p><strong># xm create -c vm-virt01<\/strong><\/p>\n<p>Obs.: Ap\u00f3s realizar o primeiro login, altere a senha de root com o comando &#8220;passwd root&#8221;. A chave -c for\u00e7a a disponibiliza\u00e7\u00e3o de um console durante o boot e ap\u00f3s o mesmo. Para realizar um &#8220;boot em background&#8221;, omita a chave -c.<\/p>\n<p>Para voltar para a m\u00e1quina real, sem retirar a virtual do ar, utilize teclas &#8220;Ctrl + ]&#8221;.<\/p>\n<p>A partir da m\u00e1quina real, para retornar \u00e0 m\u00e1quina virtual, utilize o comando:<\/p>\n<p><strong># xm console vm-virt01<\/strong><\/p>\n<p>Para inicializar a segunda m\u00e1quina virtual, utilize o comando:<\/p>\n<p><strong># xm create -c vm-virt02<\/strong><\/p>\n<p>Obs.: Ap\u00f3s realizar o primeiro login, altere a senha de root com o comando &#8220;passwd root&#8221;. A chave -c for\u00e7a a disponibiliza\u00e7\u00e3o de um console durante o boot e ap\u00f3s o mesmo. Para realizar um &#8220;boot em background&#8221;, omita a chave -c.<\/p>\n<p>Para voltar para a m\u00e1quina real, sem retirar a virtual do ar, utilize teclas &#8220;Ctrl + ]&#8221;.<\/p>\n<p>A partir da m\u00e1quina real, para retornar \u00e0 m\u00e1quina virtual, utilize o comando:<\/p>\n<p><strong># xm console vm-virt02<\/strong><\/p>\n<p>Dentro das VMs \u00e9 poss\u00edvel emitir os comandos &#8220;halt&#8221; e &#8220;reboot&#8221;.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>COMANDOS \u00daTEIS DO XEN<\/h1>\n<p>&nbsp;<\/p>\n<div>Shutdown sem estar dentro da m\u00e1quina virtual:<\/p>\n<p><strong># xm shutdown -H vm1<\/strong><\/p>\n<p>Reboot sem estar dentro da m\u00e1quina virtual:<\/p>\n<p><strong># xm reboot vm1\u00a0<\/strong><\/p>\n<p>Desligar a m\u00e1quina virtual, bruscamente, sem sincronizar ou desmontar discos:<\/p>\n<p><strong># xm destroy vm1\u00a0<\/strong><\/p>\n<p>ATEN\u00c7\u00c3O: Esse comando \u00e9 equivalente a um kill -9 ou a um desligamento abrupto de uma m\u00e1quina real. S\u00f3 utilize em casos extremos. Exemplo: perda de controle da m\u00e1quina virtual. O uso desse comando poder\u00e1 causar danos, como o corrompimento de filesystem e a perda de dados.<\/p>\n<p>Listar as m\u00e1quinas que est\u00e3o sendo executadas:<\/p>\n<p><strong># xm list<\/strong><\/p>\n<p>Obs.: Ao listar as m\u00e1quinas poder\u00e3o aparecer algumas letras que indicam o estado das mesmas. As principais s\u00e3o:<\/p>\n<ul>\n<li>r (running): indica que a m\u00e1quina est\u00e1 executando alguma tarefa;<\/li>\n<li>b (blocked): indica um bloqueio de atividade, geralmente causado por espera para acesso a dispositivos;<\/li>\n<li>p (paused): indica que a VM sofreu pausa (veja a seguir como estabelecer pausa na execu\u00e7\u00e3o);<\/li>\n<li>s (shutdown): indica que a m\u00e1quina est\u00e1 em processo de shutdown;<\/li>\n<li>c (crashed): indica que m\u00e1quina sofreu um &#8220;crash&#8221;. Essa situa\u00e7\u00e3o deve ser do conhecimento do hypervisor para que o estado &#8220;c&#8221; seja listado;<\/li>\n<li>d (dying): indica que a m\u00e1quina est\u00e1 saindo do ar mas ainda n\u00e3o terminou por algum motivo tempor\u00e1rio. Esse estado geralmente ocorre durante shutdown ou crash da m\u00e1quina.<\/li>\n<\/ul>\n<p>Top do sistema e das m\u00e1quinas:<\/p>\n<p><strong># xm top\u00a0<\/strong><\/p>\n<p>Pausa na execu\u00e7\u00e3o de uma m\u00e1quina:<\/p>\n<p><strong># xm pause vm1<\/strong><\/p>\n<p>Retirar pausa na execu\u00e7\u00e3o de uma m\u00e1quina:<\/p>\n<p><strong># xm unpause vm1\u00a0<\/strong><\/p>\n<p>Redefinir a quantidade de mem\u00f3ria RAM utilizada por uma m\u00e1quina em execu\u00e7\u00e3o:<\/p>\n<p><strong># xm mem-set vm1 256<\/strong><\/p>\n<h1>DESLIGAMENTO DA M\u00c1QUINA REAL<\/h1>\n<p>Caso a m\u00e1quina real seja desligada ou reiniciada por um comando regular (ex: reboot, halt -p, shutdown -(h|r) now, init 0), o estado de execu\u00e7\u00e3o de cada m\u00e1quina virtual ser\u00e1 salvo automaticamente, dispensando a necessidade de retir\u00e1-las do ar previamente. No momento da reinicializa\u00e7\u00e3o da m\u00e1quina real, as m\u00e1quinas virtuais ser\u00e3o recolocadas no ar com base nos dados salvos no momento do desligamento.<\/p>\n<p>Os dados das m\u00e1quinas s\u00e3o salvos em \/var\/lib\/xen\/save e, basicamente, consistem em um dump de mem\u00f3ria. Assim sendo, cada arquivo ter\u00e1 o tamanho da quantidade de mem\u00f3ria atribu\u00edda a cada m\u00e1quina.<\/p>\n<p>Em caso de erros, verifique o log \/var\/log\/xend.log.<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>SOBRE O XEN &#8211; INTRODU\u00c7\u00c3O Neste artigo explicarei de forma bastante objetiva o funcionamento, configura\u00e7\u00e3o e opera\u00e7\u00e3o do\u00a0Xen\u00a0e como criar e administrar m\u00e1quinas virtuais. Para come\u00e7ar, vamos explicar o que \u00e9 o Xen para entender o processo de paravirtualiza\u00e7\u00e3o e fazermos uma compara\u00e7\u00e3o com o modelo de virtualiza\u00e7\u00e3o total. &#8220;O Xen \u00e9 um dos mais [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[477,1082,1,730,42,51,107],"tags":[349,1150,992],"class_list":["post-4415","post","type-post","status-publish","format-standard","hentry","category-backup-2","category-centos-7-rhel-7","category-viazap","category-clusterweb","category-leitura-recomendada","category-linux-linuxrs","category-xenserver","tag-com","tag-paravirtualizacao","tag-xen"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4415"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4415\/revisions"}],"predecessor-version":[{"id":4416,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4415\/revisions\/4416"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}