ReLoad

Thierry Jaouen ~ WikiBlog
"Rien à foutre d'être lu, tant que je peux me relire."

Outils pour utilisateurs

Outils du site


blog:2012:06:24:aggrandissement_d_un_raid_logiciel_et_lvm

aggrandissement d'un raid logiciel et LVM

LVM sur RAID logiciel… comment récuperer les 100GB de disponible de la dernière partition…

~~READMORE~~

Etat des lieux

Soit mdadm et LVM.

mdadm avec 2 RAID 1 sur 2 disks:

/dev/sdb
/dev/sdc

Et donc, les 2 RAID1 :

/dev/md0
/dev/md1

LVM aussi est là:

# pvs
PV         VG   Fmt  Attr PSize   PFree 
/dev/md1   vg0  lvm2 a-   360,00g 49,43g

Pour exemple:

# fdisk -u -l /dev/sdb
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      976895      487424   fd  Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2          976896   780273663   389648384   fd  Linux raid autodetect

En fait, j'ai prés de 100GB de nos attribué en fin de disk:

echo $[((976773168-780273663)*512)/(1024*1024*1024)]
93

Je me dois de récuperer cette place en fin de disk, de mes 2 disks: sdb et sdc (qui ont exactement le même partitionnement).

Arret

D'abord, démonter tout ce qui utilise les disks.

FileSystem

Démonter …

# umount <mettre les chemins concernés>

Exemple:

# umount /mnt/warez

(Qui est le mountage de /dev/vg0/warez-disk )

A ce stade, si vous ne pouvez pas, c'est que vous aurez surement besoin de booter sur un “LiveCD” pour poursuivre.

LVM

Arreter LVM.

# /etc/init.d/lvm2 stop

C'est possible parce que LVM n'est en service que sur ces disks.

MDADM

# mdadm --stop /dev/md0
# mdadm --stop /dev/md1

Conclusion

Voila, les disks /dev/sdb et /dev/sdc sont libérés.

Re-Partitionner

La partie la plus délicate: detruire et recréer la partition.

Noter le numéro de 1er secteur de la partition concernés:

...
Partition 1 does not end on cylinder boundary.                                                                                 
/dev/sdb2          976896   780273663   389648384   fd  Linux raid autodetect

C'est 976896 , dans mon cas.

Maintenant, le plus critique :

# fdisk -u /dev/sdb

Petite vérification:

Command (m for help): p

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      976895      487424   fd  Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2          976896   780273663   389648384   fd  Linux raid autodetect

Ok. On poursuit:

On efface:

Command (m for help): d
Partition number (1-4): 2

Qu'est-ce qui reste ?

Command (m for help): p

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      976895      487424   fd  Linux raid autodetect
Partition 1 does not end on cylinder boundary.

… plus que la 1er partition (que je ne touche pas)

Récréer la partition:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)

Je choisi “primary”:

p
Partition number (1-4): 2

Attention: Entrer le numéro du 1er secteur: celui qu'on a noté précédement !

First sector (63-976773167, default 63): 976896

Pour le dernier secteur, laissez le choix par defaut: “tout le reste du disk”.

Last sector, +sectors or +size{K,M,G} (976896-976773167, default 976773167): 
Using default value 976773167

Il faut aussi changer le type de partition:

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Vérifions:

Command (m for help): p

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      976895      487424   fd  Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2          976896   976773167   487898136   fd  Linux raid autodetect

Ok. On peut ecrire:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Retour sous “shell”, on doit recopier ce partitionnement sur /dev/sdc :

# sfdisk -d /dev/sdb | sfdisk --force /dev/sdc
Checking that no-one is using this disk right now ...
OK
...
#

Et voila. Les 2 disks ont le même partitionnement, et la dernière partition re-créé englobe toute la place qui etait disponible.

Re mounter

MDADM

remise en service

# mdadm-startall

Et alors, /dev/md0 et /dev/md1 sont revenu:

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdc2[2] sdb2[3]
    389647224 blocks super 1.2 [2/2] [UU]
      
md0 : active (auto-read-only) raid1 sdc1[2] sdb1[3]
    487412 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

Aggrandir partition "md"

En fait, “mdadm” ne semble pas informé que la taille de la partition a évolué.

Donc je fais:

# mdadm --stop /dev/md1

Et puis je re-assemble en exigeant une mise a jour de la taille:

# mdadm --assemble /dev/md1 /dev/sdb2 /dev/sdc2 --no-degraded --update=devicesize
Size was 779294720
Size is 975794224
Size was 779294720
Size is 975794224
mdadm: /dev/md1 has been started with 2 drives.
:!: Y a surement plus simple, mais je n'ai pas trouvé

Ensuite:

# mdadm --grow /dev/md1 -z max
mdadm: component size of /dev/md1 has been set to 487897112K

Vérifions:

# mdadm --detail /dev/md1
/dev/md1:
      Version : 1.2
Creation Time : Fri Feb 11 18:51:28 2011
   Raid Level : raid1
   Array Size : 487897112 (465.29 GiB 499.61 GB)
Used Dev Size : 487897112 (465.29 GiB 499.61 GB)
 Raid Devices : 2
Total Devices : 2
  Persistence : Superblock is persistent

  Update Time : Sun Jun 24 15:15:25 2012
        State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Name : k8:1  (local to host k8)
         UUID : 11d8200a:d55f73f6:5f3d121e:fa4a9fdf
       Events : 178914

  Number   Major   Minor   RaidDevice State
     2       8       34        0      active sync   /dev/sdc2
     3       8       18        1      active sync   /dev/sdb2
# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sdc2[2] sdb2[3]
    487897112 blocks super 1.2 [2/2] [UU]
      resync=PENDING
    
md0 : active (auto-read-only) raid1 sdc1[2] sdb1[3]
    487412 blocks super 1.2 [2/2] [UU]
    
unused devices: <none>

“resync=PENDING” ?? Démarrer le “resync” maintenant:

# mdadm --readwrite /dev/md1
 

Ok?

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdc2[2] sdb2[3]
    487897112 blocks super 1.2 [2/2] [UU]
    [===============>.....]  resync = 79.9% (389873216/487897112) finish=14.4min speed=112928K/sec
      
md0 : active (auto-read-only) raid1 sdc1[2] sdb1[3]
      487412 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

La nouvelle partie du RAID est “resync” (si j'en crois mes yeux).

LVM

# /etc/init.d/lvm start

Et alors:

# pvs
PV         VG   Fmt  Attr PSize   PFree 
/dev/md1   vg0  lvm2 a-   360,00g 49,43g

mount

Comme les mountages sont prédéclaré dans /etc/fstab , je n'ai qu'a faire:

# mount -a

Et voila.

Aggrandir PV

Mais maintenant, il faut “PV” (du LVM) couvre l'ensemble de la partition….

Etat des lieux:

# pvs
PV         VG   Fmt  Attr PSize   PFree 
/dev/md1   vg0  lvm2 a-   360,00g 49,43g

Aggrandir:

# pvresize /dev/md1
Physical volume "/dev/md1" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

Vérifions:

# pvs
PV         VG   Fmt  Attr PSize   PFree  
/dev/md1   vg0  lvm2 a-   465,29g 154,73g

Voila.

blog/2012/06/24/aggrandissement_d_un_raid_logiciel_et_lvm.txt · Dernière modification : 2012/06/24 14:00 de thierry