====== 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 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 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: *http://www.howtoforge.com/linux_resizing_ext3_partitions *http://www.tldp.org/HOWTO/LVM-HOWTO/reducelv.html 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 -n Exemple: # lvcreate -s -L 1G -n gallery_backup /dev/vgraid1/gallery La photographie de "/dev/vgraid1/gallery" est créé en "/dev/vgraid1/gallery_backup". "" 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 [[serveur_xen|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 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 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: -http://www.ntfs-3g.org/index.html#installation -http://bisqwit.iki.fi/story/howto/ntfs/ 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".