Le blog de Dju - Mot-clé - lvmUn peu de moto, un zeste de geek, et un brin d'autres trucs ;-)2024-03-22T17:50:26+01:00Djuurn:md5:5e61426dd704534f4aef077f5b82260bDotclearConvertir une partition root en ext4 par du LVMurn:md5:3094ab316b9ec3250932f7227d985e1f2015-01-24T00:14:00+01:002016-08-12T17:51:18+02:00DjuDebianconvertionext4lvmmdadmrootswap<p><img src="https://blog.crifo.org/public/201501/.data_t.jpg" alt="data" style="float:left; margin: 0 1em 1em 0;" title="data, janv. 2015" />
Lorsqu'on a qu'une seule partition sur sa machine, ici un serveur sous Debian, qui plus est une machine distante, et que l'on veut réorganiser ses données car les besoins ont évolué, c'est bien embêtant... <br />
Voici comment convertir sa partition en LVM pour pouvoir ainsi avoir différents espaces de stockage (et block devices <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /> )</p> <p>Ici l'opération se fait sur une machine distante, hebergée chez l'hebergeur du nord <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /> mais l'équivalent peut se faire aussi sur une machine locale, qu'on fera booter sur un live CD.<br />
Attention: pour réussir, il faut pouvoir disposer d'un endroit ou copier ses données temporairement (ici la partition de swap <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /> ). sinon ce n'est pas la peine</p>
<p>Version courte :<br />
1/ booter en mode rescue (ou live CD)<br />
2/ monter sa partition root et l'espace temporaraire ou copier les données<br />
3/ copier les données avec rsync<br />
4/ Convertir en LVM sa partition et créer des volumes LVM<br />
5/ recopier ses données sur le nouveau volume créé<br />
6/ Adapter grub<br />
7/ croiser les doigts et rebooter</p>
<p><ins>1/ Boot rescue / live CD</ins></p>
<p>On se connecte à l'interface de l'hebergeur, on choisit le mode rescue, et on reboot.<br />
Pour une machine locale sur laquelle on a claver/ecran, un simple live CD suffira</p>
<p><ins>2/ Montage de la partition</ins></p>
<p>Une fois la machine démarrée, on va se créer 2 repertoires, permettant de distinguer l'ancien et le nouveau volume<br /></p>
<pre>
mkdir /mnt/root_old
mkdir /mnt/root_temp
mount /dev/sda1 /mnt/root_old
</pre>
<p>Comme espace temporarire, on peut éventuellement disposer d'un disque usb clé usb.<br />
Si ce n'est pas le cas, on peut utiliser sa partition swap <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /><br />
Bien entendu, il faut que cet espace soit suffisant. pour le savoir, la commande</p>
<pre>
df -hl
</pre>
<p>vous dira ce qu'il en est. Par exemple, sur mon serveur distant :</p>
<pre>
Sys. fich. Taille Util. Dispo Uti% Monté sur
rootfs 116G 1,4G 46G 1% /
udev 10M 0 10M 0% /dev
tmpfs 3,2G 224K 3,2G 1% /run
/dev/md0 116G 1,4G 46G 1% /
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 6,9G 0 6,9G 0% /dev/shm
</pre>
<p>Ici, j'ai une partition ext4 (montée sur un raid soft mdadm) de 116 Go, occupée par 1,4 Go de données.<br /> (je l'avais installé et il y a peu, et j'avais la flemme de tout refaire, j'ai donc rusé <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /> )
On a alors plusieurs choix :<br />
a) on dispose d'une clé/disque USB, on le monte<br /></p>
<pre>
mount /dev/sdb1 /mnt/root_temp
</pre>
<p>b) on n'a pas d'usb dispo, mais on a une partition swap assez grande. on la convertit temporairement en partition ext4 ou copier les données</p>
<pre>
mkfs.ext4 /dev/sda2 && mount /dev/sda2 /mnt/root_temp
</pre>
<p>c) cas vicieux qui m'est arrivé : on a 3 disques, et sur chacun, 1 partition swap d'1Go. soit pas assez pour y copier 1,4 Go.<br />
mais que faire..........<br />
solution: créer temporairement un volume raid5 soft avec mdadm \o/<br />
on utilise parted ou fdisk pour changer le type de partition de linux-swap (82) à linux raid (fd). puis on créé et formate le volume raid</p>
<pre>
mdadm --create /dev/md1 --level=5 --assume-clean --raid-devices=3 /dev/sda2 /dev/sdb2 /dev/sdc2
mkfs.ext4 /dev/md1
mount /dev/md1 /mnt/root_temp
</pre>
<p>On a désormais un espace de 2 Go <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /><br />
d) si plusieurs partitions, on peut aussi utiliser <strong><a href="https://fr.wikipedia.org/wiki/Gestion_par_volumes_logiques">LVM</a></strong> pour les agréger :</p>
<pre>
apt-get update && apt-get install lvm2
pvcreate /dev/sda2
pvcreate /dev/sdb2
pvcreate /dev/sdc2
vgcreate vgTMP /dev/sda2
vgextend vgTMP /dev/sdb2
vgextend vgTMP /dev/sdc2
lvcreate -L3G -n root_temp vgTMP
mkfs.ext4 /dev/vgTMP/root_temp
mount /dev/vgTMP/root_temp /mnt/root_temp
</pre>
<p>et voila, on cumule 3 partitions en un seul volume <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p><ins>3/ copie des données</ins></p>
<p>Cela est la partie la plus courte et la plus facile :</p>
<pre>
rsync -ravzx /mnt/root_old/ /mnt/root_temp/
umount /mnt/root_old
</pre>
<p>Donc on copie les données de la partition root actuelle vers la temporarire, tout en conservant les attributs des fichiers (date, permissions, owner...)%%
Puis on démonte la partition, car on va la bricoler.</p>
<p><ins>4/ Convertion ext4 > lvm</ins></p>
<p>Si vous avez une partition, il faut changer son type de ext4 à LVM, avec fdisk ou parted.<br />
Si comme moi vous avez un device type mdadm, pas besoin. On peut donc attaquer LVM :</p>
<pre>
pvcreate /dev/md0
vgcreate vg0 /dev/md0
</pre>
<p>(remplacer md0 par sda1 (par exemple) si vous avez une partition)<br />
A présent, on peut se créer des volumes LVM.<br />
Pour par part, j'avais besoin de 3 volumes: 1 pour l'os (sans blague !), 1 pour les données en local, et 1 pour drbd.</p>
<pre>
lvcreate -L 20G -n os vg0
lvcreate -L 30G -n datas vg0
lvcreate -L 60G -n drbd vg0
</pre>
<p>on n'oublie pas de formater au moins le volume pour l'OS</p>
<pre>
mkfs.ext4 /dev/vg0/os
</pre>
<p><ins>5/ recopie des données sur le volume LVM</ins>
pareil que l'étape 3, mais dans l'autre sens, en montant le nouveau volume</p>
<pre>
mount /dev/vg0/os /mnt/root_old
rsync -ravzx /mnt/root_temp/ /mnt/root_old/
</pre>
<p>on peut à présent démonter le volume temporaire.<br /></p>
<pre>
umount /mnt/root_temp
</pre>
<p>/!\ Si on a du créer un mdadm temporaire, ne pas oublier de l'arreter</p>
<pre>
mdadm -S /dev/md1
</pre>
<p>/!\ Si on a du créer un LVM temporaire, le supprimer</p>
<pre>
lvremove /dev/vgTMP/root_temp
vgremove vgTMP
pvremove /dev/sdc2
pvremove /dev/sdb2
pvremove /dev/sda2
</pre>
<p>et si on utilisait sa(ses) partition(s) de swap, ré-utiliser fdisk ou parted pour changer le type de partition, puis refaire le swap</p>
<pre>
mkswap /dev/sda2
mkswap /dev/sdb2
mkswap /dev/sdc2
</pre>
<p><ins>6/ Adaptation de grub</ins></p>
<p>Cela se fait très simplement. on va se chrooter dans le volume, installer LVM si il n'y était pas déja, et re-installer grub sur le(s) disque(s)</p>
<pre>
mount -o bind /proc /mnt/root_old/proc
mount -o bind /sys /mnt/root_old/sys
mount -o bind /dev /mnt/root_old/dev
LANG=C chroot /mnt/root_old /bin/bash
aptitude update
aptitude install lvm2
grub-install /dev/sda
# éventuellement, si on a du raid1, le faire sur l'autre disque
grub-install /dev/sdb
update-grub
</pre>
<p>Grub devrait vous dire que tout s'est bien passé.<br />
Afin de s'assurer qu'il a bien reconnu LVM, on peut aller faire un tour dans <strong>/boot/grub/grub.cfg</strong><br />
On devrait y trouver, entre autre</p>
<pre>
insmod lvm
</pre>
<p>et un peu plus bas dans la section "menuentry" décrivant l'OS</p>
<pre>
set root='(vg0-os)'
linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-os .....
</pre>
<p>ici tout est bon, on change le fstab pour indiquer que la partition / est en LVM</p>
<pre>
/dev/vg0/os / ext4 errors=remount-ro,noatime 0 1
</pre>
<p>puis on peut sortir du chroot, tout demonter et rebooter<br />
Ne pas oublier, si vous êtes sur un serveur distant, de vous reconnecter sur l'interface de l'hebergeur, et de repasser le boot de rescue à disque dur <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /></p>
<pre>
exit
umount /mnt/root_old/proc
umount /mnt/root_old/sys
umount /mnt/root_old/dev
umount /mnt/root_old
/sbin/reboot
</pre>
<p>et voila. aucune donnée/configuration n'a été perdue, et pas besoin de résintaller votre machine <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>https://blog.crifo.org/post/2015/01/24/Convertir-une-partition-root-en-ext4-par-du-LVM#comment-formhttps://blog.crifo.org/feed/atom/comments/97