Outils pour utilisateurs

Outils du site


disk_lvm

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 EXT3/EXT2

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.

Afin de s'assurer que le volume est “sain”, forcer une verification du systeme de fichiers:

# e2fsck -C 0 -f /dev/mainvol/main

(facultatif?) Virer le journal ext3:

# tune2fs -O ^has_journal /dev/mainvol/main

Augmenter de 7G le disk en “/dev/mainvol/main” :

# lvresize -L +7G mainvol/main

Redimensionner le système de fichiers (ext2) ( à la (nouvelle) taille du disk ) :

# resize2fs -p /dev/mainvol/main

Tester ?

# e2fsck -C 0 -f /dev/mainvol/main

(facultatif?) Remettre le journal:

# tune2fs -j /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.

agrandir *a chaud* un volume LVM

C'est pas plus compliqué que:

lvextend -L +SIZE <VOLUME_LVM>

Exemple:

# lvextend -L +50G /dev/vg0/sfr_mobile_general 
Extending logical volume sfr_mobile_general to 250,00 GB
Logical volume sfr_mobile_general successfully resized

Ext 3

Lien: http://michael-prokop.at/blog/2006/08/01/ext3-online-resizing/

Et a chaud, avec *EXT3* (et un noyau > 2.6.10 ) :

Aprés avoir agrandi le volume LVM:

resize2fs -p <VOLUME_LVM> 

Exemple:

# resize2fs -p /dev/vg0/sfr_mobile_general 
resize2fs 1.41.3 (12-Oct-2008)
Le système de fichiers de /dev/vg0/sfr_mobile_general est monté sur /mnt/sfr-mobile-general ; le changement de taille doit être effectué en ligne
old desc_blocks = 13, new_desc_blocks = 16
En train d'effectuer un changement de taille en ligne de /dev/vg0/sfr_mobile_general vers 65536000 (4k) blocs.
Le système de fichiers /dev/vg0/sfr_mobile_general a maintenant une taille de 65536000 blocs.

Durée de l'opération: 2 minutes.

reduire ( shrink ) une partition

methode 1

Liens:

On adapte pour LVM , bien sur.

Soit une partition du LVM nommé “/dev/vgfiler/test” et de 300 G !

Soit en “k” :

# lvs --units k /dev/vgfiler/test
  LV   VG      Attr   LSize         Origin Snap%  Move Log Copy%  Convert
  test vgfiler -wi-ao 314572800,00K
# df -h
/dev/mapper/vgfiler-test
                    296G   80G  201G  29% /mnt/test
# mount
/dev/mapper/vgfiler-test on /mnt/test type ext3 (rw,acl)

On souhaite la réduire a 100G.

D'abord on “unmount”:

# umount /mnt/test

Nombre de block:

# fdisk -s /dev/vgfiler/test
314572800

( 314572800 / 1024^2 = 300 )

S'assurer que le systeme de fichiers est stable, sinon corriger:

# e2fsck -C 0 -p -f /dev/vgfiler/test
/dev/vgfiler/test : 328140/19660800 fichiers (0.6% non contigus), 22172792/78643200 blocs

(le -C 0 , c'est pour afficher la “progression”)

Transformer de ext3 en ext2, en virant le “journal” :

# tune2fs -O ^has_journal /dev/vgfiler/test

Re-tester (?) :

# e2fsck -C 0 -f /dev/vgfiler/test

Quel est la taille minimum possible ? (par curiosité) :

# resize2fs -P /dev/vgfiler/test
resize2fs 1.41.3 (12-Oct-2008)
Taille minimale estimée du système de fichiers : 21237927

C'est la taille en “block” de 4k ???? A priori oui: (21237927*4)/1024^2 = 81 G

Toutefois, on va reduire a 95G et non pas 100G. On se créé une petite marge de 5% pour ecarter une erreur d'approximation lors de la reduction de la partition LVM sous-jacente… car 100G en ext2/3, n'equivaut pas 100G en LVM ! on ne parle pas de la même chose (il me semble).

Donc, réduire en 95G ( au lieu de 100G ) .

# resize2fs -p /dev/vgfiler/test 95G
resize2fs 1.41.3 (12-Oct-2008)
Resizing the filesystem on /dev/vgfiler/test to 24903680 (4k) blocks.
...
( Il y 4 passes... )
Le système de fichiers /dev/vgfiler/test a maintenant une taille de 24903680 blocs.

( 24903680*4)/1024^2 = 95G )

Dans mon cas, ca prend du temps car j'ai bien rempli le volume en tout sens avant de faire ce test: donc, il y a un certain nombre de blocks a deplacer…

Reduire la partion LVM a 100G (en non pas 95G !):

# lvresize -L 100G /dev/vgfiler/test
  WARNING: Reducing active logical volume to 100,00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test? [y/n]: y
  Reducing logical volume test to 100,00 GB
  Logical volume test successfully resized

(on aura pu utiliser reduce ?)

Un coup d'oeil:

# lvs /dev/vgfiler/test
  LV   VG      Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  test vgfiler -wi-a- 100,00G

Attribuer le delta de “5%” au systeme de fichiers:

# resize2fs -p /dev/vgfiler/test
resize2fs 1.41.3 (12-Oct-2008)
Resizing the filesystem on /dev/vgfiler/test to 26214400 (4k) blocks.
Début de la passe 1 (max = 40)
Extension de la table d'i-noeudsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Le système de fichiers /dev/vgfiler/test a maintenant une taille de 26214400 blocs.

(C'est assez rapide…)

On est assuré de bien avoir une partition et un systeme de fichiers de 100G !

Re-verifier le systeme de fichiers:

# e2fsck -C 0 -f /dev/vgfiler/test

Ajouter le journal pour transformer la partition de ext2 en ext3 :

# tune2fs -j /dev/vgfiler/test

Si besoin, virer l'interval de “fsck” (pour les gros volumes reposant sur un RAID puiiiiissant ):

# tune2fs -i 0 /dev/vgfiler/test

Et voila. Reste plus qu'a remounter.

# mount /dev/vgfiler/test /mnt/test -o rw,acl
# df -h
/dev/mapper/vgfiler-test
                     99G   80G   14G  86% /mnt/test

methode 2

:!: J'ai un doute: le journal ext3 il devient quoi ?
le 10G en fs-ext3 != 10G en LVM !!!

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.

limites

Pas trop, mais quand même une belle: On ne peut pas reduire la taille d'une partition XFS

Donc, ces défauts sont:

  • Moins universel que Ext3/Ext2
  • Moins souples que Ext3/Ext2

Avec la prochaine arrivé de Ext4 en Stable (on est en Janv-2011 là), l'interet de XFS se réduit…….

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

Parce que:

  1. la doc xfs dit que le volume xfs est reparé au moment du “mount”
  2. -o nouuid permet d'ignorer “uuid” au moment du “mount”.
# umount /mnt/test2
# xfs_check /dev/vg0/test-snap

ne dit rien. content?

# xfs_repair /dev/vg0/test-snap

Idem.

# mount /mnt/test2

voila ?

zfs

Lien: http://www.unixgarden.com/index.php/administration-systeme/zfs-sous-gnulinux

Interessant, mais hélas, n'est pas intégré au noyau Linux. Il faut utiliser “fuse”.

disk_lvm.txt · Dernière modification : 2011/07/11 20:35 de thierry