Archive

Archive for the ‘KVM’ Category

Virtualização em Linux hoje e amanhã

February 22nd, 2009 15 comments

Antes de mais nada, é importante notar que eu estava convencido a postar esta entrada no blog em inglês, até mesmo porque minhas postagens em inglês recebem muito mais leitura do que as postagens em português (bem mais, de 15 a 20 vezes mais, para ser sincero), mas decidi não fazê-lo por achar que seria interessante ter esse conteúdo em português, visto que eu mesmo procurei muito por algo do tipo e não consegui encontrar nada interessante.

Outro ponto importante a ser levando em consideração é que eu não sou um cientista da computação, um físico, um matemático e nem mesmo estudo profissionalmente ou a fundo sistema operacionais em um nível mais baixo. O que eu sou, isso sim, é um entusiasta do software livre que tem muita vontade de aprender sobre novas tecnologias e gosta de estudá-las um pouco mais do que a maioria das pessoas.

Dito isso, obviamente, absorva o conteúdo que irei escrever aqui com isso em mente e, também devido a isso, entenda que, como não sou e nem pretendo ser o dono da verdade, possivelmente muita coisa do que eu disser aqui pode não estar completamente correta. Cabe a você, leitor, pesquisar e tirar suas próprias conclusões com base no conteúdo aqui apresentado e a enorme quantidade de material adicional existente por aí.

Deixando os avisos de lado, é evidente que para quem quer que tenha acompanhando minhas postagens no blog ou no Twiiter/identi.ca que eu me interesso muito pelo assunto virtualização. Mais especificamente, tenho me interessado muito ultimamente pela solução de virtualização KVM. Não somente eu, aliás, visto que a mesma está recebendo colaborações maçiças de inúmeros grandes nomes e empresas do cenário do software livre (Red Hat, IBM, Intel, AMD, etc).

É fácil perceber, porém, que ainda existe muito preconceito em relação a essa solução. E nem todo o preconceito ainda existente é errado pois, na verdade, em relação a performance, outras soluções completamente baseadas no conceito de para-virtualização, como o Xen, por exemplo, ainda são mais interessantes.

Porém, no estágio atualmente de desenvolvimento, o KVM já evoluiu muito e não é mais aquele brinquedo feio relegado aos testes informais de final de semana, que só nos são interessantes para sabermos que os mesmos  existem, mas que, no mundo real, não possuem muita utilidade.

Isso se deve a, em minha opinião, dois motivos : primeiro, devido ao interesse pelas tecnologias de virtualização ser tão alto, isso ter levado os fabricantes de hardware a se concentrarem em oferecer soluções que entregam uma base física muito mais bem preparada para essas tecnologias e, segundo, devido aos desenvolvedores do KVM que, entendendo que esse era o futuro, se concentrarem em resolver problemas mais importantes ao invés de tentar contornar limitações de hardware que eles sabiam que em breve começariam a ser removidas.

Mérito seja dado, o Xen inovou muito e reavivou uma enorme onda de interessados nas vantagens da virtualização, trazendo, de fato, com o conceito de para-virtualização, a virtualização utilizável para o mundo x86 e, com isso, para as massas. Porém, isso teve um custo, já que, por se dedicar muito a explorar as possibilidades desse conceito, o Xen ficou preso a uma base extremamente mais complexa e, por isso, com uma menor probabilidade de ser oficialmente aceita como cidadão de primeiro nível na terra do kernel.

O KVM, por outro lado, tomou uma posição mais radical, decidindo desde o início que, para conseguir um design mais simples e um ritmo de desenvolvimento bem mais rápido, simplesmente deixaria de lado toda essa história de para-virtualização e já iniciaria como um grande usuário das então recém lançadas tecnologias de virtualização assistidas por hardware.

Logicamente, hoje em dia, temos o KVM portado e funcional em plataformas PowerPC e S/390, mas, na época, isso se resumiu a adotar e depender pesadamente das tecnologias VMX da Intel e SVM da AMD, as quais essas empresas tinham acabado de implementar em suas novas linhas de processadores. Por algum tempo, inclusive, foi bastante complicado encontrar sistemas oficialmente suportados pelos grandes integradores de hardware que fornecessem soluções de hardware baseadas nesses novos processadores.

Atualmente, é claro, isso já é passado e a maioria dos sistemas entry-level oferecido pelos integradores de hardware, bem como soluções de desktop corporativos, já incluem processadores que, no mínimo, suportam essas tecnologias (a primeira onde da virtualização recente em hardware x86), inclusive o laptop a partir do qual eu escrevo esse texto e o computador de mesa self-made aqui ao meu lado. Ou seja, já virou objeto comum.

O Xen, por estar focado em virtualização baseada em sua menina dos olhos, a para-virtualização, demorou um pouco mais para tirar proveito dessas novas tecnologias e entrou na briga oferecendo uma solução de virtualização assistida por hardware bem mais tarde, com o lançamento de sua série 3.x, que inclusive teve que receber modificações massivas para se adaptar a esse novo paradigma.

Hoje, o Xen suporta tanto para-virtualização quanto virtualização assistida por hardware, mas ainda sofre de diversos problemas estruturais que o impedem de ser aceito como um cidadão de primeiro nível oficialmente no kernel Linux. Sim, todos os usuários do Xen atualmente ou sujam suas mãos integrando-o manualmente em suas distribuições ou dependem de um trabalho hercúleo das distribuições GNU/Linux para mantê-lo integrado a seus núcleos, dependendo de forward-ports de código baseado no kernel 2.6.18 intermináveis.

Lógico, alguns podem se dar ao luxo de adquirir a versão comercial do Xen diretamente da XenSource/Sun, mas a partir desse ponto eu já considero que saímos do terreno das soluções abertas/livres e entramos no terreno de soluções comerciais, as quais, sinceramente, não me agradam. Não por custo ou por ideologia, mas sim porque, via de regra, simplesmente não tem como alcançar o nível de maturidade das soluções totalmente abertas/livres.

É importante notar que a técnica de para-virtualização só funciona para virtualizar sistemas operacionais hóspedes que possam ser modificados de forma a colaborar com o sistema operacional hospedeiro. Dessa forma, por motivos óbvios, quaisquer sistemas operacionais de código-fonte fechado, como os sistemas operacionais da família Windows da Microsoft, não conseguem obter vantagem dessa técnica.

Ou seja, na prática, o Xen só passou a ser uma plataforma de virtualização realmente multiplataforma (suportando sistemas operacionais de código-fonte fechado e sistemas operacionais de código-fonte aberto) a partir da série 3.x. O KVM, por outro lado, nasceu já com uma natureza multiplataforma nesse sentido, visto que, desde sempre, dependeu da existência das tecnologias de virtualização assistidas por hardware, as quais não demandam a modificação do sistema operacional hóspede.

Exatamente por depender das tecnologias de virtualização assistidas por hardware e não suportar inicialmente o conceito de para-virtualização, o KVM sempre entregou uma performance inferior ao Xen, visto que, em um ambiente que utiliza tecnologias de virtualização assistidas por hardware, o I/O do sistema operacional hospedeiro é interceptado e tratado por drivers no hypervisor, os quais na verdade emulam um driver real, obviamente não fornecendo a mesma performance de um driver real.

Inclusive, ao menos até o momento, o Xen também utiliza, para sua implementação de virtualização assistida por hardware, os drivers emulados fornecidos pelo QEMU, da mesma forma que o KVM. Ou seja, ao menos em relação a performance de I/O (dispositivos de blocos/discos e rede), a implementação de virtualização assistida por hardware do Xen e o KVM eram semelhantes.

Porém, particularmente, eu acredito que a percepção de que a performance inferior das tecnologias de virtualização assistidas por hardware seja uma verdade imutável esteja mudando e, a médio prazo, não mais será uma verdade absoluta.

Já há algum tempo, o KVM vem adotando técnicas de para-virtualização onde a mesma é perceptivelmente necessária (não em toda a sua implementação de virtualização, como é o caso do Xen). Por exemplo, desde a versão 13 (e já estamos na versão 84 atualmente) o KVM começou a incluir suporte rudimentar a alguns conceitos de para-virtualização, sendo que a partir da versão 61 o mesmo acrescentou suporte a pvclock, ou seja, para-virtualização do relógio do sistema operacional, para eliminar problemas de sincronização entre o hospedeiro e o sistema operacional hóspede.

Adicionalmente, a partir da versão 64, foi acrescentado suporte a para-virtualização de MMU (Memory Management Unit, ou Unidade de Gerenciamento de Memória). É interessante notar que, desde 2007, já haviam patches disponíveis (os quais, posteriormente, foram incorporados a árvore oficial de desenvolvimento) para implementar suporte a para-virtualização no KVM.

Na época, Ingo Molnar, da Red Hat, enviou seus patches para acrescentar suporte a para-virtualização no KVM indicando benchmarks bastante interessantes. Basicamente, com os patches aplicados, alguns cenários com testes de mudança de contexto no kernel apresentaram uma melhora de quatro vezes (400%) em relação a execução dos mesmos sem tais patches.

E, nos cenários que os patches em questão acrescentaram o menor ganho de performance em mudanças de contextos, ainda assim o ganho de performance foi da ordem de 30% em relação ao KVM sem tais patches aplicados. Ou seja, claramente, uma melhora significativa. Desde então, esses patches foram melhorados e incluídos oficialmente no KVM e muita coisa foi melhorada, aumentando ainda mais os benefícios trazidos.

Desde a versão 60 do KVM, foi incluído também suporte a VirtIO, ou seja, seguindo a tradição de utilizar para-virtualização somente onde o uso da mesma realmente faz sentido sem causar efeitos colaterais negativos, os desenvolvedores do KVM incluíram drivers (módulo de kernel) para-virtualizados para acesso a dispositivos de blocos (virtio_blk) e dispositivos de rede (virtio_net), efetivamente removendo a dependência dos drivers emulados fornecidos pelo QEMU.

Já há algum tempo atrás, Avi Kivity, líder no desenvolvimento do KVM, postou em seu blog um texto afirmando que a para-virtualização estava morta. Exageros a parte, se analisarmos os argumentos que ele utiliza, podemos ver claramente que o avanço dos fabricantes de processadores irá nos levar rapidamente a um patamar onde realmente se preocupar com para-virtualização não será mais algo tão importante.

Em seu post, Avi comenta que a combinação de paginação de memória implementada em hardware através das tecnologias NPT (Nested Paging Tables) da AMD ou EPT (Extended Page Tables) da Intel, junto com o suporte a páginas de memória grandes (large pages) entrega performnce equivalente ou, em alguns casos, ultrapassa a performance da para-virtualização em muitos cenários.

Segundo Avi, o custo de se comunicar com o hypervisor é simplesmente maior do que deixar que o hardware atual que implementa tais tecnologias gerencie tudo isso de forma transparente, mesmo ainda antes de levar em consideração os custos envolvidos na para-virtualização, como chamados de sistema (syscalls) mais lentas.

Ainda segundo Avi, o KVM, mais uma vez, entendendo essa segunda onda da virtualização suportada pelos processadores mais atuais, refletiu a obsolescência planejada da para-virtualização de MMU em seu design, implementando o suporte a esse recurso de forma que tal suporte pudesse ser habilitado ou desabilitado de forma dinâmica.

Ou seja, expondo esse suporte aos sistemas operacionais hóspedes e fornecendo aos mesmos performance melhorada quando o hardware do hospedeiro suporta tais tecnologias, mas lidando de maneira amigável com hospedeiros que não possuem suporte a essa tecnologia, utilizando para-virtualização de MMU, nesse caso.

Outro ponto interessante em relação as escolhas de design acertadas do KVM em comparação com o Xen é a questão do I/O.  Em outro post em seu blog, Avi comenta sobre a questão da mantenabilidade em contraste com a questão da performance.

Em seu post, Avi cita que I/O no KVM é realizado no contexto do hypervisor, mantendo performance completa.  Como o Xen, o KVM reutiliza a pilha de I/O do kernel Linux, porém, a reutiliza de forma que os usuários possam desfrutar das mais novas melhoras no kernel nesse departamento, bem como dos mais novos drivers para novos dispositivos.

O que é interessante notar, no entanto, é que o Xen, apesar de também realizar I/O no contexto do hypervisor, como Avi nota, possui o problema adicional de não ter resolvido por completo o problema da mantenabilidade, visto que, oficialmente, ainda está preso ao kernel 2.6.18, a última versão para a qual a XenSource (criadora do Xen), antes de ser adquirida pela Sun Microsystems, portou oficialmente os patches do Xen.

Versões dos patches do Xen para núcleos mais novos são na verdade um hack temporário, um forward-port do código-fonte baseado no kernel 2.6.18, adaptado para núcleos mais novos. Pessoalmente, eu somente conheço forward-ports adaptados para o kernel 2.6.26, o mesmo que o Debian, por exemplo, está utilizando, o qual, aparentemente, foi um esforço realizado pelo pessoal da Novell.

O problema é que o Xen, apesar de ter saído na frente do KVM e ter alguns anos de vantagem em relação ao mesmo, agora está perdendo terreno, visto que sua equipe de desenvolvimento está bastante atarefada portando o código para funcionar com base na nova estrutura genérica de para-virtualização do kernel Linux, o paravit_ops.

O paravirt_ops foi criado como uma resposta a crescente demanda de utilização de para-virtualização e como maneira de se ter somente um único framework genérico para essa necessidade, visto que muitas soluções de virtualização estavam tendo seus esforços duplicados, cada qual tendo que implementar seu próprio framework de para-virtualização.

Exatamente por ter escolhido iniciar toda sua implementação de para-virtualização como um projeto isolado do kernel Linux, sem as vantagens de se ter a crítica de diversos desenvolvedores competentes do kernel questionando suas decisões de design, o Xen está agora pagando o preço, tendo um tremendo trabalho para adaptar seu código a esse novo framework genérico introduzido relativamente recentemente ao kernel Linux.

E o KVM, não vai precisar também se adaptar ? Não, pois, como citei, o KVM não utiliza para-virtualização completamente em sua implementação de virtualização, mas sim somente nos pontos específicos onde a mesma faz mais sentido. E, ao contrário do Xen, o KVM foi desenvolvido desde o início dentro da comunidade de desenvolvimento do kernel Linux.

Ou seja, desde o início, por ter a crítica dos desenvolvedores do kernel Linux em todo o seu processo de desenvolvimento, o KVM é uma solução com um design mais do que aprovado pelos desenvolvedores do kernel, tanto que, desde a versão 2.6.20 do kernel Linux, está incluído oficialmente no kernel, sendo a primeira solução de virtualização nativa em Linux que eu acredito que tenha um brilhante futuro.

E, por estar ativamente sendo desenvolvido dentro da comunidade de desenvolvimento do kernel, recebendo os olhares e as dicas de todos os que da mesma participam, é uma solução que não lhe obriga utilizar um kernel obsoleto para ter uma estabilidade um pouco mais garantida, como é o caso do Xen.

Inclusive, o Xen foi removido oficialmente do Fedora 9 na época em que o mesmo foi lançado, exatamente por não existir um porte oficial do mesmo para o kernel utilizado por padrão por essa distribuição GNU/Linux e os desenvolvedores da mesma não acreditarem que seria correto perder ainda mais tempo tentando manter viva uma árvore de desenvolvimento (através de novos forward-ports) que está fadada a morrer logo mais, visto que o desenvolvimento da base Xen que será utilizada futuramente está ocorrendo atualmente no ramo que está portando o código Xen para o framework paravirt_ops.

Em contraste, o KVM continua se beneficiando dos numerosos recursos do kernel Linux, tendo ganhado sem precisar fazer esforço algum todas as virtudes do código desse kernel, como gerenciamento de energia avançado, suporte a suspensão/hibernação e diversas outras funcionalidades interessantes.

Resumindo, o KVM está sendo desenvolvido no mesmo ritmo frenético do kernel Linux, até mesmo porque está integrado completamente ao mesmo, enquanto o Xen, ao menos por enquanto, terá que suar bastante a camisa para se adaptar aos padrões que inicialmente optou por não se importar em seguir, para somente depois de todo esse trabalho, começar a pensar em convencer a equipe de desenvolvimento do kernel Linux a aceitar sua integração a árvore oficial de desenvolvimento do kernel.

É compreensível, agora, todo o burburinho que está ocorrendo ao redor do KVM e toda a preocupação e investimento das grandes empresas do software livre em apoiar o desenvolvimento do mesmo ? Particularmente, eu acredito que não há muitas dúvidas sobre o que o futuro da virtualização em Linux nos reserva : a mesma será baseada em KVM.

E você, qual sua opinião sobre esse assunto ? Importa-se de deixar seu comentário aqui e enriquecer esse post com suas observações, complementado as informações aqui expostas ? :-)

Categories: DebianBR, KVM Tags: ,

Debian : a virtualization friendly platform

February 22nd, 2009 12 comments

It’s no secret for those who follow me on Twitter/identi.ca that I have been toying with virtualization technologies for some time now.

I have been using Xen in production for some time and, apart from not thinking it’s the way to go for future virtualization, it’s quite usable right now, specially if you are going to use Debian Lenny as the dom0, as it now has a more modern kernel than the dreaded 2.6.18 we Xen users were forced to keep using.

However, I have been keeping my eyes on KVM as well, as I always liked how much simpler and well integrated into the Linux kernel it is. I’m even subscribed to the KVM development mailing list, even not understanding most of the things the developers are talking about there. It’s no problem for me, I just want to know what’s being worked on and what’s on the pipeline.

As a KVM fan, I’m also using it intensively as a tool for prototyping servers. It’s easy enough to set up a new Debian server to test things on and learn new technologies, as well as troubleshoot problems without intefering with production environments.

Althought KVM is not as good as Xen when it comes to performance, it’s quickly improving every single day. And, for those of you who still believes KVM is only about full virtualization, I’m happy to say that it has come a long way and paravirtualization has started to infiltrate KVM land as well.

Today, KVM already sports paravirtualized clock (pvclock), paravirtualized memory management unit (pv MMU) and VirtIO drivers. Actually, it seems that KVM these days is the biggest user of VirtIO, maybe only loosing the leadership to Rusty’s lguest.

By using VirtIO’s disk and network drivers (virtio_blk and virtio_net, respectively, and its associated modules), KVM can deliver a much improved I/O experience than when using QEMU’s emulated drivers. For this reason, it’s always preferable to use VirtIO drivers whenever possible when setting up your KVM guests.

During the Etch lifetime, one will need to do some tricks in order to use VirtIO when using Etch as a guest under KVM. However, when preparing Lenny’s d-i, the developers were smart enough to add to it virtual disk detection support. What it means is that now, starting with Lenny, d-i will recognize that it’s being given a VirtIO block device and automatically load the needed kernel modules to support it.

Also, the disk detection and partition modules (partman et all) were modified to show a detected virtual disk (i.e. /dev/vdX) and let the user partition it, as well as grub-installer was changed to allow GRUB to be installed onto a virtual disk’s MBR,  effectively making d-i a really powerful virtualization aware installer.

Here you can see Lenny’s d-i showing a detected virtual disk, named “vda” :

lenny-vdisk-partitioning-english

lenny-vdisk-partitioning-english

Brazilian Portuguese readers could see the version using brazilian portuguese texts on the screen here. Sure, d-i also received a lot of improvements and special support for installing Lenny as a Xen domU was added as well, but I haven’t played with it yet, so I won’t comment on that right now.

And, hey, one can even use virt-install and virt-manager to deploy KVM guests under Lenny :-) And you know what gives me even more confidence that KVM will be a first class citizen inside Debian ? The fact that Steve Kemp is toying with the idea to change his xen-hosting.org project so it would become a new kvm-hosting.org project.

Maybe I’m praying for the preacher here, but Steve is very well well know for being the author of xen-tools and xen-shell, as well as being the creator of a number of other nice free softwares. And, judging by the comments on his post about the future kvm-hosting.org project, it seems that Steve maybe will need to update xen-tools and xen-shell to account for KVM or create a new set of tools dedicated exclusively to KVM based on his past experience creating the current tools for Xen.

Good times ahead for those of us who are surfing the Debian Virtualization wave, indeed :-)

Categories: Debian, DebianBR, English, KVM Tags: ,

KVMing for fun and profit : how to make your toy become a serious business

February 1st, 2009 4 comments

Here I’ll try to present you some tips on how one could easily make a playground become a paid fun. And no, I won’t be teaching you how to become rich, although I would like if you would teach me how that could be accomplished as I’m trying to come up with a way to do just that for a couple of years now and failed miserably.

Recently, I’ve been setting up KVM virtual machines in order to do a lot of testing for a project I’m involved with. Letting boring details aside, one could say that a very long, boring and error prone setup was finished after a lot of work and it worked like a charm in the end, as a KVM machine.

As always, laziness is a given and when you are into it you empower yourself to come up with some nice hacks and goes that extra mile to find out how one could not to have to do boring and repetitive things again and again, in the best spirit of “let’s have some work now and save me ten times more work later”.

As I’m becoming more and more into that spirit of laziness, there I went looking for a way which would let me transform my beloved and nice working KVM machine into a fully featured real physical server. After some tips from microblogosphere friends (thanks fike), I had some ideas on how that could be accomplished.

Turned out my ideas weren’t really all that right so there I went again looking for a way to do what I wanted. After some research I found out that the KVM guys already gave some thought about it and even had a ready solution to my problem : it’s called qemu-nbd.

Yes, by now everyone should know that KVM builds on top of the excelent (just not so snappy) QEMU. However, as I’m a Debian user, here I should say that in Debian, most notably Debian sid/unstable, the qemu-nbd binary was renamed to kvm-nbd, just as the KVM binary is called only kvm and not qemu-system-x86_64 or whatever else is called these days upstream.

NBD (short for Network Block Device) is a nice thing. I hadn’t tried it before (I certainly used and am still using in some projects of mine the not-upstreamed-yet-but-so-nice-that-I-couldnt-resist DRBD, which seems to share some ideas which NBD). In short (read NBD link for more info on that), NBD allows the Linux kernel to use a remote server as a block device. Also, its upstream is a fellow Debian developer (hello Wouter). How nice’s it ?

As NBD is an upstreamed kernel feature, you don’t need to go to the external-module-route-hell. You only need the userland tools, which are nicely packaged and integrated into Debian as well. They’re only one aptitude away, so you could use this command to bring it to your KVM host :

aptitude install nbd-client

After that, you will want to export your image file (the file which represents the disk of you virtual machine) as a NBD block device, so you will be able to mount it under your KVM host and do whatever you want to do with it. Here’s how one would do it :

kmv-nbd –conect=/dev/nbd0 myimagefile.img

I tested it using both qcow2 and raw disk images and both worked like a charm so I don’t think you will have any problems here. Next, you need to create a directory structure under your KVM host which temporarily will be used to mount the partitions inside the virtual block device of your KVM machine. You could do this like this :

mkdir /newserver

mkdir /newserver/usr

mkdir /newserver/var

mkdir /newserver/home

In the example above, I’ve created these directories because I want my new server to have separated root, /usr, /var and /home partitions and mount points. Feel free to adapt to any kind of partitioning layout you please.

Next, you will mount yout virtual machine filesystem under a temporary location, so you will be able to copy all of its content later to your final desired destination, i.e. the real partitions inside the real disk you are going to use in your future real server (not a virtual machine anymore).

I did it using :

mkdir -p /mnt/temp

mount /dev/nbd0p1 /mnt/temp

Notice that the /dev/nb0p1 above is my root partition inside my KVM machine, only that it’s represented now in my KVM host in NBD’s device node notation here. I’ve only one partition inside this particular virtual machine (aside from the swap partition).

Next, you want to mount the partitions on the real disk you want to be used in your new real server under the directories created earlier so you will be able to chroot to then later and do any tweaks you may want to, like fixing /etc/fstab, /boot/grub/device.map, /boot/grub/menu.lst and all these places we know makes references to block devices which may differ from the situation you had in your virtual machine running under the KVM.

Here’s what I used :

mount /dev/sdb1 /newserver

mount /dev/sdb3 /newserver/usr

mount /dev/sdb5 /newserver/var

mount /dev/sdb6 /newserver/home

The device nodes above are from your real disk’s partitions, not from any virtualized device block access method like NBD. Also, take care not to mount your primary disk’s partitions (the ones you are using under in your KVM host) as you could destroy them easily. As you can see above, I’m using /dev/sdbX as /dev/sda is my primary disk, the one under which my KVM host is running. Again, adapt to your scenario.

Next, you just copy everything from your virtual machine filesystem (which is now accessible from within your NBD block device) to your real disk. I did it using :

cp -a /mnt/temp/* /newserver/

After that, you can disconnect your KVM virtual machine image file from the exported NDB device block using :

kvm-nbd -d /dev/ndb0

And then chroot to your real disk layout yout just copied to /newserver in order to fix anything which would make reference to block devices while running as a virtual machine under KVM but which now will be a completely different thing as a real server, like your /etc/fstab, /boot/grub/device.map, /boot/grub/menu.lst and so on.

In order to chroot to your new soon-to-be-real filesystem you could use :

chroot /newserver

Then go nuts and start fixing everything you may think needs to be fixed so this filesystem could be used in a real server to boot it up. Im my case, I needed to fix /etc/fstab in order to mount my additional partitions (as under KVM I was using only a root and a swap partition and now, under the real server, I’ll be using separated root, swap, /usr, /var and /home).

Before I went changing more things, I “fixed” my /boot/grub/device.map and my /boot/grub/menu.lst files to point to /dev/sdb and /dev/sdb[1],  respectively, so I could run grub-install from inside the chroot in order to install GRUB into the real new disk’s MBR (master boot record), using :

grub-install /dev/sdb

Then, finally, I “fixed/boot/grub/device.map and /boot/grub/menu.lst again so they would point to /dev/sda and /dev/sda[1], as /dev/sda will be the device node for this new disk when it wil be running under the new real server and not as a disk inside the KVM host machine.

Next, I exited the chroot using :

exit

And umounted the new real disk’s partitions, using (now already out of the chroot) :

umount /newserver/home

umount /newserver/var

umount /newserver/usr

umount /newserver

Now you can take this new disk out of your KVM host machine, put it inside your new real server, physically install it there, turn on your new real server and everything installed while the filesystem in it was being used under the KVM virtual machine will be there, running nicely.

And you’re done. That’s it. Also, it’s important to point out that it’s much easier being done than being said (or written, in this case) so, if it looks scary because of the size of this post, don’t let it disincourage you as this whole thing is a pretty straightforward procedure, much easier than it seems.

And as I know that I will receive lost of complaints from people which will tell me how inefficient this whole thing is and how I could have accomplished the exact same thing in a much easier and faster way (perhaps even with a already existing tool which would automate almost entirely the whole proccess), I would say to these people to please exercise their right to share ideas using the comments. Just be nice on me, please.

After all, it was fun and I learned new things while doing it all, as well as I tried to share what I learned from this experience with my peers. That’s what matters. Peace, love and geekness to all of you :-)

Categories: Debian, DebianBR, KVM, tech Tags: