{"id":830,"date":"2013-01-04T22:37:48","date_gmt":"2013-01-04T21:37:48","guid":{"rendered":"https:\/\/akim.sissaoui.com\/?p=830"},"modified":"2015-09-02T15:48:04","modified_gmt":"2015-09-02T13:48:04","slug":"migrer-un-systeme-de-fichier-root-existant-sur-lvm-sur-une-machine-virtuelle","status":"publish","type":"post","link":"https:\/\/akim.sissaoui.com\/en\/informatique\/migrer-un-systeme-de-fichier-root-existant-sur-lvm-sur-une-machine-virtuelle\/","title":{"rendered":"Migrer un syst\u00e8me de fichier root existant sur LVM sur une machine virtuelle"},"content":{"rendered":"<p>Aujourd&#8217;hui dernier jour de l&#8217;ann\u00e9e 2012&#8230; Qu&#8217;\u00e0 cela ne tienne, c&#8217;est pas une raison pour rien faire. Alors hop, on va trouver un petit casse t\u00eate \u00e0 r\u00e9gler. Je me lance dans la migration d&#8217;un syst\u00e8me de fichier root vers du LVM. <!--more--><!--toc--><\/p>\n<p>== Contexte ==<\/p>\n<p>Un disque virtuel VMware thick que je veux migrer en thin. Syst\u00e8me sur la machine virtuelle: Debian Squeeze, install\u00e9 \u00e0 l&#8217;\u00e9poque sans LVM. Le syst\u00e8me h\u00f4te est un ESXi 4.1 avec, donc du VMFS3&#8230; Un seul datastore. Le probl\u00e8me quand on veut passer de thick en thin, c&#8217;est qu&#8217;il faut pouvoir changer de datastore pour qu&#8217;il fasse un pseudo space reclaim, sinon, ben il reclaim rien du tout &#8230; Donc si votre disque virtuel a eu des donn\u00e9es \u00e9crites vers la fin de la partition, m\u00eame un vmkfstools -i xxx.vmdk -d thin yyy.vmdk ne permettra pas de gagner de l&#8217;espace.<\/p>\n<p>Bon, devant ce constat d&#8217;\u00e9chec je d\u00e9cide donc de refaire un disque virtuel en thin, et de migrer mon syst\u00e8me de fichier. C&#8217;est plus simple et plus radical.<\/p>\n<p>=== Avant ===<\/p>\n<ul>\n<li>VMDK thick 50GB<\/li>\n<li>Partition unique \/dev\/sda1 de 50GB en ext3<\/li>\n<li>Swap de 1GB \/dev\/sda2<\/li>\n<li>Espace utilis\u00e9 sur le VMFS: 50GB<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>=== Apr\u00e8s ===<\/p>\n<ul>\n<li>VMDK thin 25GB<\/li>\n<li>PV LVM de 25GB en partition \u00e9tendue \/dev\/sda5<\/li>\n<li>Un VG unique (vg_root) utilisant le PV \/dev\/sda5<\/li>\n<li>Trois LV (boot, 100MB, Swap 1024MB, root, le reste)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>== Comment j&#8217;ai proc\u00e9d\u00e9 ==<\/p>\n<p>A noter que l&#8217;op\u00e9ration n\u00e9cessite l&#8217;arr\u00eat de la machine virtuelle.<\/p>\n<p>=== systemrescueCD ===<\/p>\n<p>D&#8217;abord, il faut avoir le <a title=\"systemrescueCD\" href=\"http:\/\/www.google.ch\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CDgQFjAA&amp;url=http%3A%2F%2Fwww.sysresccd.org%2FDownload&amp;ei=BbnhUPzRGISF4gSE5YCgAg&amp;usg=AFQjCNEJcKtVtzAD7ZNckfruomxfxzQvNw&amp;bvm=bv.1355534169,d.bGE\" target=\"_blank\">systemrescueCD<\/a> ou n&#8217;importe quel autre LiveCD. Mais le <a title=\"systemrescueCD\" href=\"http:\/\/www.google.ch\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CDgQFjAA&amp;url=http%3A%2F%2Fwww.sysresccd.org%2FDownload&amp;ei=BbnhUPzRGISF4gSE5YCgAg&amp;usg=AFQjCNEJcKtVtzAD7ZNckfruomxfxzQvNw&amp;bvm=bv.1355534169,d.bGE\" target=\"_blank\">systemrescueCD<\/a> est celui que j&#8217;utilise est il est tr\u00e8s pratique. Pour des raisons pratiques, je place l&#8217;iso dans un dossier iso sur le datastore.<\/p>\n<p>Ensuite, on cr\u00e9e un nouveau disque virtuel de 25GB qu&#8217;on attache \u00e0 la machine virtuelle.<\/p>\n<p>On attache l&#8217;ISO \u00e0 la machine virtuelle et on d\u00e9marre. Attention, il faut \u00eatre rapide pour d\u00e9marrer sur le CD. Il faut ouvrir la console de la machine virtuelle, cliquer \u00e0 l&#8217;int\u00e9rieur d\u00e8s que possible, puis taper ESC afin de voir apparaitre le boot menu, et de pouvoir s\u00e9lectionner le CDROM. A noter que par d\u00e9faut le CD ne sera pas connect\u00e9. Il faut donc \u00e9diter les param\u00e8tres de la machine virtuelle pour connecter le CD-Rom (cocher Connecter, et Connecter au d\u00e9marrage).<\/p>\n<p>Quand on a enfin r\u00e9ussi \u00e0 avoir le boot menu (si si, c&#8217;est possible, et si vraiment \u00e7a va pas, on peut tojours aller dans les options des param\u00e8tres de la machine virtuelle et choisir &#8220;entrer dans le bios au prochain d\u00e9marrage&#8221; puis s\u00e9lectionner le CD-ROM comme boot device), on va voir apparaitre le menu de boot du systemrescueCD. Si ce n&#8217;est pas le cas, ben&#8230; faut recommencer, vous avez merd\u00e9 quelque part.<\/p>\n<p>Pendant le boot, systemrescueCD \u00e0 la gentillesse de demander quel clavier on veut utiliser. Sympathique attention. Dans mon cas (fr_CH), je tape 43.<\/p>\n<p>Une fois le boot termin\u00e9, on se retrouve sur un prompt. Par d\u00e9faut, une adresse IP aura \u00e9t\u00e9 attribu\u00e9e par votre serveur DHCP. Si ce n&#8217;est pas le cas, je vous laisse trouver comment param\u00e9trer l&#8217;IP et pourquoi pas le mettre dans un commentaire pour les suivant. Dans mon cas, le DHCP faisait mon affaire.<\/p>\n<p>A partir de l\u00e0, pour que les choses soient plus facile, je d\u00e9cide d&#8217;utiliser putty en SSH. Il faut donc param\u00e9trer un mot de passe root<\/p>\n<pre lang=\"bash\">passwd<\/pre>\n<p>On pourra ensuite se connecter avec putty. Youpie&#8230;<\/p>\n<p>=== LVM ===<\/p>\n<p>L&#8217;objectif \u00e9tant d&#8217;utiliser LVM, on va configurer notre nouveau disque virtuel en cons\u00e9quence. En toute logique, il se trouve en \/dev\/sdb. Personnellement, je cr\u00e9e une partition \u00e9tendue puis un volume logique plut\u00f4t qu&#8217;une partition primaire, ceci afin de me lib\u00e9rer des contraintes d&#8217;alignement li\u00e9 aux partitions primaires.<\/p>\n<pre lang=\"bash\">fdisk \/dev\/sdb\r\nn\r\ne\r\n1\r\n<enter> #valeur par d\u00e9faut (d\u00e9but du disque)\r\n<enter> #valeur par d\u00e9faut (fin du disque)\r\nn\r\nl\r\n<enter> #valeur par d\u00e9faut (d\u00e9but de le la partition)\r\n<enter> #valeur par d\u00e9faut (fin de la partition)\r\nt\r\n8e      # On s\u00e9lectionne le type LVM\r\nw\r\n<\/pre>\n<p>Nous voil\u00e0 donc avec un disque logique \/dev\/sdb5 pr\u00eat pour LVM.<\/p>\n<p>On pr\u00e9pare \/dev\/sdb5 pour \u00eatre un volume physique LVM, puis on cr\u00e9e un volume group que j&#8217;appelle simplement vg_root<\/p>\n<pre lang=\"bash\">pvcreate \/dev\/sdb5\r\nvgcreate vg_root \/dev\/sdb5\r\n<\/pre>\n<p>Reste a cr\u00e9er trois logical volumes. Un pour le boot (100MB), un pour le swap (1024MB), et un pour le root (le reste). Adaptez la taille du volume swap \u00e0 votre convenance, bien s\u00fbr.<\/p>\n<pre lang=\"bash\">\r\nlvcreate -n boot -L 100M vg_root\r\nlvcreate -n swap -L 1024M vg_root\r\nlvcreate -n root -l 100%FREE vg_root\r\n<\/pre>\n<p>=== Les syst\u00e8mes de fichier ===<\/p>\n<p>Reste a cr\u00e9er les syst\u00e8mes de fichiers. Pas compliquer: ext3 pour root, ext2 pour boot et swap pour&#8230; swap (bravooooo).<\/p>\n<pre lang=\"bash\">\r\nmkfs.ext3 \/dev\/vg_root\/root\r\nmkfs.ext2 \/dev\/vg_root\/boot\r\nmkswap \/dev\/vg_root\/swap\r\n<\/pre>\n<p>Nous voil\u00e0 par\u00e9. La prochaine \u00e9tape est le montage de root et de boot, et la copie des fichiers<\/p>\n<p>== Migration du syst\u00e8me de fichier ==<\/p>\n<p>On reste dans &#8220;La vie est simple&#8221;, et on cr\u00e9e deux points de montages distincts pour l&#8217;ancien syst\u00e8me de fichier, qu&#8217;on va monter en lecture seule, et pour le nouveau, en lecture\/\u00e9criture (bien s\u00fbr). Mon ancien syst\u00e8me est dans \/dev\/sda1 et je n&#8217;avais pas un boot s\u00e9par\u00e9. Je d\u00e9cris pas les commandes, mais demandez-vous au moins \u00e0 quoi elles servent avant de b\u00eatement faire un copier-coller. Z&#8217;\u00eates la pour apprendre.<\/p>\n<pre lang=\"bash\">\r\nmkdir \/mnt\/old\r\nmkdir \/mnt\/new\r\nmount \/dev\/sda1 \/mnt\/old -o ro\r\nmount \/dev\/vg_root\/root \/mnt\/new\r\nmkdir \/mnt\/new\/boot\r\nmount \/dev\/vg_root\/boot \/mnt\/new\/boot\r\n<\/pre>\n<p>Nous avons donc: l&#8217;ancien syst\u00e8me de fichier dans \/mnt\/old et le nouveau dans \/mnt\/new pr\u00eat \u00e0 recevoir la copie. De l\u00e0, un simple cp -a fait l&#8217;affaire. Attention toutefois: Si vous travaillez avec diff\u00e9rents filesystems pour home, var, etc&#8230;., il faudra adapter tout \u00e7a. Ne suivez pas b\u00eatement mon exemple sans y r\u00e9fl\u00e9chir avant. Je vous aurez pr\u00e9venu.<\/p>\n<pre lang=\"bash\">\r\ncp -a \/mnt\/old\/* \/mnt\/new\r\n<\/pre>\n<p>Et on attend que \u00e7a se passe&#8230; Apr\u00e8s, c&#8217;est une histoire de foi. Je n&#8217;ai pas fait une comparaison des dossiers \u00e0 la fin de l&#8217;op\u00e9ration. Je me suis content\u00e9 d&#8217;un test de capacit\u00e9 pour v\u00e9rifier que la capacit\u00e9 \u00e9tait la m\u00eame dans les deux dossiers:<\/p>\n<pre lang=\"bash\">\r\ndu -sh \/mnt\/*\r\n<\/pre>\n<p>C&#8217;\u00e9tait le cas.<\/p>\n<p>== Mise en place du nouvel environnement ==<\/p>\n<p>Maintenant il faut mettre \u00e0 jour fstab et reconfigurer grub. Et pour ce faire, on va chrooter (quel joli verbe fran\u00e7ais) dans notre nouveau filesystem.<\/p>\n<p>=== chroot dans le nouvel environnement ===<\/p>\n<p>Notre nouveau syst\u00e8me est dans \/mnt\/new et le boot dans \/mnt\/new\/boot. Pour chrooter, il faut maintenant lier \/proc \/dev et \/sys de la fa\u00e7on suivante:<\/p>\n<pre lang=\"bash\">\r\nmount -o bind \/sys \/mnt\/new\/sys\r\nmount -o bind \/dev \/mnt\/new\/dev\r\nmount -o bind \/proc \/mnt\/new\/proc\r\n<\/pre>\n<p>Maintenant on peut chrooter: <\/p>\n<pre lang=\"bash\">\r\nchroot \/mnt\/new \/bin\/bash\r\n<\/pre>\n<p>Nous voil\u00e0 dans le nouvel environnement. <\/p>\n<p>=== Edition de fstab ===<\/p>\n<p>fstab doit bien entendu \u00eatre mis \u00e0 jour pour monter le nouveau syst\u00e8me de fichier. On \u00e9dite donc \/etc\/fstab (du nouvel environnement)<\/p>\n<p>Afin de ne pas se casser la t\u00eate avec des inodes qui pourraient changer, je sugg\u00e8re fortement d&#8217;utiliser les UUID pour le montage des volumes. Pour les r\u00e9cup\u00e9rer, on utilise blkid. blkid va retourner les UUID. Voil\u00e0 ce que \u00e7a donne.<\/p>\n<pre lang=\"bash\">\r\nroot@intranet:~# blkid\r\n\/dev\/sr0: LABEL=\"sysrcd-3.1.2\" TYPE=\"iso9660\"\r\n\/dev\/sda5: UUID=\"9aFHU2-1THU-yR8B-Z5zy-5gcS-yrPj-ftBI0Z\" TYPE=\"LVM2_member\"\r\n\/dev\/mapper\/vg_root-boot: UUID=\"1759c47e-ac8b-4156-90a4-99908d6965da\" TYPE=\"ext2\"\r\n\/dev\/mapper\/vg_root-swap: UUID=\"78002cc0-c4e9-4a9b-8e3a-f2018204949c\" TYPE=\"swap\"\r\n\/dev\/mapper\/vg_root-root: UUID=\"aca498c5-d6aa-477a-afa4-dbdec81f15b9\" TYPE=\"ext3\"\r\n<\/pre>\n<p>ici, c&#8217;est donc vg_root-boot, swap et root qui nous int\u00e9ressent. On \u00e9dite donc fstab pour y mettre ceci<\/p>\n<pre lang=\"text\">\r\n# <file system>                                 <dir>           <type>          <options>               <dump>  <pass>\r\nUUID=aca498c5-d6aa-477a-afa4-dbdec81f15b9       \/               ext3            errors=remount-ro       0       1\r\nUUID=1759c47e-ac8b-4156-90a4-99908d6965da       \/boot           ext2            defaults                0       2\r\nUUID=78002cc0-c4e9-4a9b-8e3a-f2018204949c       none            swap            sw                      0       0\r\n\/dev\/scd0                                       \/media\/cdrom0   udf,iso9660     user,noauto             0       0\r\n<\/pre>\n<p>=== Reconfiguration de grub ===<\/p>\n<p>On install GRUB sur le disque \/dev\/sdb (le nouveau disque virtuel):<\/p>\n<pre lang=\"bash\">\r\ngrub-install \/dev\/sdb\r\n<\/pre>\n<p>Puis on met \u00e0 jour la configuration de grub<\/p>\n<pre lang=\"bash\">\r\nupdate-grub\r\n<\/pre>\n<p>== Finalisation ==<\/p>\n<p>Reste \u00e0 retirer le volume et d\u00e9marrer avec le nouveau.<\/p>\n<p>On arr\u00eate la machine virtuelle<\/p>\n<pre lang=\"bash\">\r\nshutdown -h now\r\n<\/pre>\n<p>On \u00e9dite les param\u00e8tres de la machine virtuelle et on retire les DEUX disques virtuels. L&#8217;ancien ET le nouveau. MAIS ATTENTION: On les retire de la configuration, mais on ne les efface pas du disque&#8230; On effacera l&#8217;ancien disque virtuel quand on sera s\u00fbr que \u00e7a marche.<\/p>\n<p>Une fosi les deux disques retir\u00e9s, on r\u00e9\u00e9dite les param\u00e8tres et on rajoute le nouveau disque en ID 0:0. Puis on d\u00e9marre la machine virtuelle.<\/p>\n<p>Si tout va bien, la machine va d\u00e9marrer, et tout va fonctionner comme avant. Si c&#8217;est bien le cas, on peut ensuite ouvrir le datastore, aller dans le dossier de la machine virtuelle, et effacer manuellement l&#8217;ancien disque virtuel. Attention \u00e0 ne pas effacer le mauvais. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd&#8217;hui dernier jour de l&#8217;ann\u00e9e 2012&#8230; Qu&#8217;\u00e0 cela ne tienne, c&#8217;est pas une raison pour rien faire. Alors hop, on va trouver un petit casse t\u00eate \u00e0 r\u00e9gler. Je me lance dans la migration d&#8217;un syst\u00e8me de fichier root vers du LVM.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[220],"tags":[57,63,184,72],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/830"}],"collection":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/comments?post=830"}],"version-history":[{"count":11,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/830\/revisions"}],"predecessor-version":[{"id":1123,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/830\/revisions\/1123"}],"wp:attachment":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/media?parent=830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/categories?post=830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/tags?post=830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}