Table des matières
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 “lvm
” si 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:
- faire une sauvegarde relativement propre d'une partition (en la montant en lecture seule par exemple)
- 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:
- la doc xfs dit que le volume xfs est reparé au moment du “mount”
-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”.