You've extended your VM's only disk by a bunch of Gigabytes. You have
Apache / MySQL running on it and you can't afford any downtime. You now need the Operating System to recognize all that new space. What
can you do? Expanding a root partition at runtime with a guest linux OS, requires a bit of planning but is still fairly straightforward.
The following was performed on a CentOS 5.5 Guest VM running on VMWare.
Let's see how much space we have right now:
[root@... ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
18G 11G 6.5G 61% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm
First, make sure the OS can recognize that the hardware actually changed. Rescan your SCSI device:
# echo "1" > /sys/class/scsi_device/<device number>/device/rescan
Next comes the fun part. This is where planning for disaster comes in handy; so even though you don't want to take any downtime, plan for it: Take a snapshot of your VM.
Format your device and add a new partition. In my case I have a /boot partition and a / partition so my new partition will have number 3 or /dev/sda3.
# fdisk /dev/sda
-- if we now try to create a new physical volume, it should fail until we run the partprobe command.
# partprobe
UPDATE: Since RedHat 6 (CentOS 6), you can use the partx command to force the changes to take effect on the partition table. Note that partx does not do the same validation as partprobe, so if you've made mistakes with your partition layout, data can be erased. If you are certain that your layout is correct, then proceed using:
# partx -l /dev/sda
And to force changes to take effect:
# partx -v -a /dev/sda
( See RedHat's recommendation at: https://access.redhat.com/site/solutions/57542 )
-- Create a physical volume from the new partition now that the kernel knows about it.
# pvcreate /dev/sda3
-- Extend the volume group to use up all space on the new physical volume.
# vgextend VolGroup00 /dev/sda3
-- Extend the logical volume by the number of free physical extents available in the group (use +)
# lvextend -l +3200 /dev/VolGroup00/LogVol00
-- Finally run an online resize of the mounted partition without affecting anything.
# resize2fs /dev/VolGroup00/LogVol00
That's it. Now run df -h:
[root@... ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
115G 11G 99G 10% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm
----------------- EXTENDING A SWAP PARTITION -----------------
If you are doing this on a SWAP partition, then make sure you follow these instructions:
After extending the VolumeGroup, disable your swap:
[root@... ~]# swapoff -a
Extend your swap logical partition ( by 320 Physical Extents in my case ):
[root@... ~]# lvextend -l +320 /dev/VolGroup00/LogVol01
Check your logical volume size:
[root@... ~]# lvdisplay /dev/VolGroup00/LogVol01
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID --- ---- ---- --- ----
LV Write Access read/write
LV Status available
# open 0
LV Size 11.97 GB
Current LE 383
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
Use mkswap to recreate a new swap partition. There is no need to worry about the data because when swap is disabled, it should not contain any data.
[root@... ~]# mkswap /dev/VolGroup00/LogVol01
Setting up swapspace version 1, size = 12851343 kB
Now restart your swap and check your memory:
[root@... ~]# swapon -a
[root@... ~]# free -m
total used free shared buffers cached
Mem: 24106 2917 21188 0 371 484
-/+ buffers/cache: 2061 22045
Swap: 12255 0 12255
The following was performed on a CentOS 5.5 Guest VM running on VMWare.
Let's see how much space we have right now:
[root@... ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
18G 11G 6.5G 61% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm
First, make sure the OS can recognize that the hardware actually changed. Rescan your SCSI device:
# echo "1" > /sys/class/scsi_device/
Next comes the fun part. This is where planning for disaster comes in handy; so even though you don't want to take any downtime, plan for it: Take a snapshot of your VM.
Format your device and add a new partition. In my case I have a /boot partition and a / partition so my new partition will have number 3 or /dev/sda3.
# fdisk /dev/sda
-- if we now try to create a new physical volume, it should fail until we run the partprobe command.
# partprobe
UPDATE: Since RedHat 6 (CentOS 6), you can use the partx command to force the changes to take effect on the partition table. Note that partx does not do the same validation as partprobe, so if you've made mistakes with your partition layout, data can be erased. If you are certain that your layout is correct, then proceed using:
# partx -l /dev/sda
And to force changes to take effect:
# partx -v -a /dev/sda
( See RedHat's recommendation at: https://access.redhat.com/site/solutions/57542 )
-- Create a physical volume from the new partition now that the kernel knows about it.
# pvcreate /dev/sda3
-- Extend the volume group to use up all space on the new physical volume.
# vgextend VolGroup00 /dev/sda3
-- Extend the logical volume by the number of free physical extents available in the group (use +)
# lvextend -l +3200 /dev/VolGroup00/LogVol00
-- Finally run an online resize of the mounted partition without affecting anything.
# resize2fs /dev/VolGroup00/LogVol00
That's it. Now run df -h:
[root@... ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
115G 11G 99G 10% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm
----------------- EXTENDING A SWAP PARTITION -----------------
If you are doing this on a SWAP partition, then make sure you follow these instructions:
After extending the VolumeGroup, disable your swap:
[root@... ~]# swapoff -a
Extend your swap logical partition ( by 320 Physical Extents in my case ):
[root@... ~]# lvextend -l +320 /dev/VolGroup00/LogVol01
Check your logical volume size:
[root@... ~]# lvdisplay /dev/VolGroup00/LogVol01
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID --- ---- ---- --- ----
LV Write Access read/write
LV Status available
# open 0
LV Size 11.97 GB
Current LE 383
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
Use mkswap to recreate a new swap partition. There is no need to worry about the data because when swap is disabled, it should not contain any data.
[root@... ~]# mkswap /dev/VolGroup00/LogVol01
Setting up swapspace version 1, size = 12851343 kB
Now restart your swap and check your memory:
[root@... ~]# swapon -a
[root@... ~]# free -m
total used free shared buffers cached
Mem: 24106 2917 21188 0 371 484
-/+ buffers/cache: 2061 22045
Swap: 12255 0 12255
No comments:
Post a Comment