Outils pour utilisateurs

Outils du site


disk_lvm

Ceci est une ancienne révision du document !


LVM

Creer

Creer un nouveau volume…

# lvm
lvm> pvs
  PV         VG      Fmt  Attr PSize   PFree
  /dev/hda2  mainvol lvm2 a-   140,16G 131,16G
lvm> lvs
  LV        VG      Attr   LSize Origin Snap%  Move Log Copy%
  main      mainvol -wi-ao 8,00G
  main_swap mainvol -wi-ao 1,00G
lvm>

Creons un disk de 10G:

lvm> lvcreate -L 10G -n debtest-root mainvol
  Logical volume "debtest-root" created

Pour le swap:

lvm> lvcreate -L 512M -n debtest-swap mainvol
  Logical volume "debtest-swap" created
lvm> lvs
  LV           VG      Attr   LSize   Origin Snap%  Move Log Copy%
  debtest-root mainvol -wi-a-  10,00G
  debtest-swap mainvol -wi-a- 512,00M
  main         mainvol -wi-ao   8,00G
  main_swap    mainvol -wi-ao   1,00G

Ok.

win2k

# lvm
lvm> lvcreate -L 6G -n win2k mainvol
  Logical volume "win2k" created
lvm> lvs
  LV           VG      Attr   LSize   Origin Snap%  Move Log Copy%
  debtest-root mainvol -wi-a-  10,00G
  debtest-swap mainvol -wi-a- 512,00M
  hostlvm-disk mainvol -wi-a-   2,00G
  hostlvm-swap mainvol -wi-a-   1,00G
  main         mainvol -wi-ao   8,00G
  main_swap    mainvol -wi-ao   1,00G
  win2k        mainvol -wi-a-   6,00G
lvm> quit
Exiting.

Ou est le nouveau disk ?

# ls /dev/mainvol/win2k
/dev/mainvol/win2k

Redimensionner un volume logique

On veut redimenssionner le disk principale, et c'est impossible tant qu'on est dessus.
Donc, booter sur un live-cd, genre Kubuntu (le cd gparted est pas complet):

Installer le support “lvmsi necessaire ! :

# lvm
bash: lvm: command not found

C'est donc necessaire:

# apt-get update
# apt-get install lvm2

Ensuite, si la commande “lvm” revoit encore une autre erreur, alors essayez:

# /etc/init.d/lvm start

Ok ! La command “lvs” doit fonctionner et monter les volumes logiques.
Augmenter de 7G le disk en “/dev/mainvol/main” :

# lvresize -L +7G mainvol/main

Forcer une verification du systeme de fichiers:

# e2fsck -f /dev/mainvol/main

Redimensionner le système de fichiers:

# resize2fs /dev/mainvol/main

C'est bon. On peut rebooter sur (ou remounter le) disk.

Supprimer

Supprimer un volume logique, par exemple “win2k”:

# lvremove mainvol/win2k
Do you really want to remove active logical volume "win2k"? [y/n]: y
  Logical volume "win2k" successfully removed

agrandir un volume physique

Voila qu'une partition s'agrandie, mais le “volume physique” n'est plus a la bonne taille !

Disk /dev/sda: 145.9 GB, 145999527936 bytes
255 heads, 63 sectors/track, 17750 cylinders, total 285155328 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63      498014      248976   83  Linux
/dev/sda2          498015   254405339   126953662+  8e  Linux LVM

:!: Attention: il y a besoin de “rebooter” a un certain moment !

On agrandi la partition, en la supprimant d'abord, puis en la récreant a l'identique, mais plus grande !

Disk /dev/sda: 145.9 GB, 145999527936 bytes
255 heads, 63 sectors/track, 17750 cylinders, total 285155328 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63      498014      248976   83  Linux
/dev/sda2          498015   285155327   142328656+  83  Linux

Au passage: on se rend compte que j'ai omis de remettre le type “Linux LVM”, grave erreur qui pourtant sera sans incidence !
(Je corrige de ce pas…)

WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

Donc, il faut rebooter !

Aprés reboot:

# lvm

le volume physique est toujours comme ça:

lvm> pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  mainvol lvm2 a-   121,07G 85,91G

le volume group est comme ca:

lvm> vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  mainvol  1   5   0 wz--n- 121,07G 85,91G

lvm>

Mettre en adéquation la taille réelle du disk avec “lvm”:

lvm> pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Et voila, le volume physique occupe bien toute la partition:

lvm> pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  mainvol lvm2 a-   135,73G 100,57G

Le volume logique aussi grandi:

lvm> vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  mainvol   1   5   0 wz--n- 135,73G 100,57G
lvm>

C'est chouette.

reduire une partition

reduire, sans perte de données… dumoins, j'espère !

Booter sur un live-cd , ou umount la partition en question.

Verifier (obligatoire):

# e2fsck -f /dev/vg0/partition

D'abord, reduire le systeme de fichiers , (a 10G par exemple):

# resize2fs /dev/vg0/partition 10G

Puis, reduire le volume logique LVM (a la même taille):

# lvreduce -L 10G /dev/vg0/partition

Pour ma part, je termine avec un dernier:

# e2fsck -f /dev/vg0/partition

qui curieusement m'a corrigé des trucs…

C'est fini, les données devraient être encore là.

snapshot

Lien: http://linux-attitude.fr/post/Les-Vauriens-M-admirent

Faire une photographie d'un volume LVM, pour au moins 2 bonnes raisons:

  1. faire une sauvegarde relativement propre d'une partition (en la montant en lecture seule par exemple)
  2. annuler des modifications

Faire un “snapshot”:

Syntaxe:

# lvcreate -s -L <SIZE> -n <SNAPSHOT_VOLUME_NAME> <LVM_DEVICE>

Exemple:

# lvcreate -s -L 1G -n gallery_backup /dev/vgraid1/gallery

La photographie de “/dev/vgraid1/gallery” est créé en “/dev/vgraid1/gallery_backup”.

“<SIZE>” definie la taille a reserver pour stocker toutes les modifications qui se produiront pendant le temps du “snapshot”.

A definir selon la taille du disque original, et de son activité supposé durant ce laps de temps.

Pour supprimer le snapshot: lvremove …

Transfert LVM

Effectuer une copie vers un autre serveur…
pour une machine virtuelle sous Xen par exemple.

Prendre la taille de la partition d'origine:

(source)# lvs --units k
LV           VG   Attr   LSize        Origin Snap%  Move Log Copy%
...
w2k          boko -wi-ao 15376384,00K

Recreer sur l'autre:

(dest)# lvcreate -L 15376384k -n w2k volgroup

( Arret machine virtuelle )

Envoi de la partition sur l'autre:
On prépare la reception sur la destination:

(dest) # nc -lp 32767 | gunzip | dd of=/dev/volgroup/w2k

On demarre l'envoi a partir de la source:

(source) # dd if=/dev/volgroupsource/w2k bs=1k | gzip | nc <IP_DE_DEST> 32767

Et on attend la fin du transfert…

Tips

La fin du transfert est un peu confuse en fait.
Sur la source, lorsqu'il annonce la fin comme ça:

15376384+0 enregistrements lus
15376384+0 enregistrements écrits
15745417216 octets (16 GB) copiés, 710,626 seconde, 22,2 MB/s

Vous verrez que “nc” tourne toujours. Il faut le killer. (en priant que tout soit envoyé!)

(source) # kill <pid_de_nc>

Sur la destination, il faut parfois faire la même chose, “kill nc” , et bien verifier que “dd” annonce avoir écrit le même nombre d'enregistrement que la source.

avec un Live-CD

Vous êtes heureux avec votre partition LVM, mais comment la “voir” si on boot sur un Live-CD !?

Mounter

Soit un live-CD “Kubuntu 7.10” …

Une fois qu'on a booté, on peut voir ça:

$ sudo fdisk -l /dev/sda

Disk /dev/sda: 251.0 GB, 251000193024 bytes
255 heads, 63 sectors/track, 30515 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005cd12

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          62      497983+  83  Linux
/dev/sda2              63       30515   244613722+  8e  Linux LVM

Essayons comme un ignare:

$ sudo mkdir /mnt/lvm
$ sudo mount /dev/sda2 /mnt/lvm
mount: unknown filesystem type 'LVM2_member'

Oups !? lvm est inconnu.

Alors installons d'abord LVM2 !

$ sudo apt-get install lvm2

Demandons à LVM ce qu'il voit:

$ sudo lvm
lvm> pvs
  PV         VG    Fmt  Attr PSize   PFree
  /dev/sda2  k8xen lvm2 a-   233.28G 111.28G

Ouai ! Cool.

Mounter “dev-mapper” … et ouai:

$ sudo modprobe dm-mod

Et dmesg retourne:

[ 1161.558885] device-mapper: ioctl: 4.11.0-ioctl (2006-10-12) initialised: dm-devel@redhat.com

Mais toujours rien a “mounter”…

Retournons dans LVM, afin de changer l'attribut à “available Yes” :

$ sudo lvm
lvm> vgchange -ay
  3 logical volume(s) in volume group "k8xen" now active

Yes !

 lvm> quit

Voyons ça:

$ sudo ls /dev/k8xen/ -la
total 0
drwx------  2 root root   100 2008-07-24 21:40 .
drwxr-xr-x 14 root root 14780 2008-07-24 21:40 ..
lrwxrwxrwx  1 root root    22 2008-07-24 21:40 home -> /dev/mapper/k8xen-home
lrwxrwxrwx  1 root root    22 2008-07-24 21:40 swap -> /dev/mapper/k8xen-swap
lrwxrwxrwx  1 root root    21 2008-07-24 21:40 sys -> /dev/mapper/k8xen-sys

Mountons !

$ sudo mount /dev/k8xen/home /mnt/lvm
$ ls /mnt/lvm -la
total 24
drwxr-xr-x  4 root root  4096 2008-07-21 18:36 .
drwxr-xr-x  3 root root    60 2008-07-24 21:19 ..
drwx------  2 root root 16384 2008-07-21 18:09 lost+found
drwxr-xr-x 17 1000 1000  4096 2008-07-22 22:36 thierry

Et voila.

umounter

(Facultatif)

$ sudo umount /mnt/lvm

Changeons l'attribut a “available NO”

$ sudo vgchange -an
  0 logical volume(s) in volume group "k8xen" now active
$ sudo rmmod dm-mod

Et voila.

Creer de rien

Nous voila avec une nouvelle (vrai) partition qu'on aimerait bien utiliser pour LVM…

# pvcreate /dev/sda3

En supposant que la partition est là…

# pvs
PV         VG   Fmt  Attr PSize  PFree
/dev/sda3       lvm2 --   20,00G 20,00G

Creer le “volume group”:

# vgcreate vgt /dev/sda3
Volume group "vgt" successfully created

Ok.

# vgs
VG   #PV #LV #SN Attr   VSize  VFree
vgt    1   0   0 wz--n- 20,00G 20,00G

Et maintenant, on peut creer les “logical volume”:

#  lvcreate -L 2G -n test vgt
Logical volume "test" created
# lvcreate -L 4G -n test-2 vgt
Logical volume "test-2" created

Ok?

#  lvs
LV     VG   Attr   LSize Origin Snap%  Move Log Copy%
test   vgt  -wi-a- 2,00G
test-2 vgt  -wi-a- 4,00G
# ls /dev/vgt/ -la
lrwxrwxrwx  1 root root   20 2008-08-19 00:52 test -> /dev/mapper/vgt-test
lrwxrwxrwx  1 root root   23 2008-08-19 00:52 test-2 -> /dev/mapper/vgt-test--2

Prêt a formater…

# mkfs.ext3 /dev/vgt/test

Et enfin:

# mkdir /mnt/test
# mount /dev/vgt/test /mnt/test
# ls /mnt/test -lart
total 24
drwx------ 2 root root 16384 2008-08-19 00:55 lost+found
drwxr-xr-x 3 root root  4096 2008-08-19 00:55 .
drwxr-xr-x 3 root root  4096 2008-08-19 00:55 ..

Le test est concluant:

# umount /mnt/test

Ajouter une ligne comme ca dans /etc/fstab :

/dev/mapper/vgt-test /mnt/test   ext3      defaults,errors=remount-ro    0     0

Et enfin:

# mount -a

Voila la partition monté, et prête a l'etre au prochain démarrage.

Rappel:

# pvs
PV         VG   Fmt  Attr PSize  PFree
/dev/sda3  vgt  lvm2 a-   20,00G 14,00G

Ne le dite pas, mais cela été fait dans une machine virtuelle :o)

Partition Windows

mount ntfs

Lien: http://blogs.simc.be/simc/index.php/post/2009/01/22/Kpartx-pour-aller-un-peut-plus-loin-avec-LVM

Monter une partition qui est dans une image disk !

Exemple:

# fdisk -l /dev/vgraid1/win2k_test

Disk /dev/vgraid1/win2k_test: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x6a4a6e04

                  Device Boot      Start         End      Blocks   Id  System
/dev/vgraid1/win2k_test1   *           1        1304    10474348+   7  HPFS/NTFS

On aimerait bien mounter “win2k_test1” …

C'est possible avec kpartx !

Lister les partitions existentes:

# kpartx -l /dev/vgraid1/win2k_test
vgraid1-win2k_test1 : 0 20948697 /dev/vgraid1/win2k_test 63

Ajouter les partitions a son systeme:

# kpartx -a /dev/vgraid1/win2k_test

Et voila les partitions dans /dev/mapper/… :

brw-rw----  1 root disk 253, 27 mai 17 20:44 vgraid1-win2k_test
brw-rw----  1 root disk 253, 28 mai 18 11:51 vgraid1-win2k_test1

Maintenant, on peut mounter comme d'hab:

# mount -o loop /dev/mapper/vgraid1-win2k_test1 /mnt/win
:!: voir le chapitre suivant pour voir comment écrire dans la partition

A la fin, on démounter:

# umount /mnt/win

Et puis:

# kpartx -d /dev/vgraid1/win2k_test

write ntfs

Lien:

Accessoirement, on peut ecrire dans une partition NTFS (avec quelques limitations mineures, toutefois).

Pour cela, installer “ntfs-3g”:

# aptitude install ntfs-3g

Et puis, mounter vos partitions ainsi:

# mount -t ntfs-3g /dev/mapper/vgraid1-win2k_test1 /mnt/win

(sous reserve que votre noyau mount aussi ntfs en 'rw')

Et voila !

xfs

les bases

package

# aptitude install xfsprogs

mkfs

Par exemple:

# lvcreate -L 10G -n test vg0

Et puis:

# mkfs.xfs /dev/vg0/test
# mkdir /mnt/test
# mount /dev/vg0/test /mnt/test

Et voila.

snapshot

en theorie

# xfs_freeze -f /mnt/test
# lvcreate -L 1G -s -n test-snap /dev/vg0/test
# xfs_freeze -u /mnt/test

En pratique, ca ne fonctionne pas avec LVM2.

Pourquoi ? Parce que “xfs_freeze -f” interdit les ecritures et que le “snapshot LVM” veut toujours ecrire … alors le “lvcreate” est bloqué !!!!

en pratique

En attendant une solution plus intelligente de “lvm”/“xfs” :

# lvcreate -L 1G -s -n test-snap /dev/vg0/test
# mkdir /mnt/test2
# mount -o nouuid /dev/vg0/test-snap /mnt/test2
# umount /mnt/test2
# xfs_repair /dev/vg0/test-snap
# mount /mnt/test2

voila ?

disk_lvm.1272290858.txt.gz · Dernière modification: 2010/04/26 16:07 par thierry