Resize linux root disk in Oracle VM
I just needed to grow my root fs on an Oracle Linux guest VM running in OVM 3.2 and I thought I’d share the process with you. A lot of the steps are taken from a similar blog on doing a similar thing on vmware.
To start with, I have a linux vm which started as a clone of one of the Linux VM templates that Oracle provides. It comes with a 20G disk which is partitioned into two pieces. One for /boot and the other one is lvm physical volume that holds the rest of the system including the root partition.
The basic steps are:
– backup the existing system just in case
– resize virtual disk in OVM
– grow the partition to the new size
– grow the pv device
– grow the logical volume for my root / partition
– grow the filesystem on /
– resize virtual disk in OVM
– grow the partition to the new size
– grow the pv device
– grow the logical volume for my root / partition
– grow the filesystem on /
Instead of growing the original physical volume and partition I could also simply add a second disk to the lvm pool but I like to keep things simple and use as few devices as possible.
First you want to backup the VM in case something goes wrong later. If your VM is on an OCFS repository, you can simply clone the running VM. This VM was on an NFS repo so I had to turn it off and create a clone from there (actually I simply made a copy of the virtual disk .img file once the VM was shut down).
Edit the VM in OVM manager, navigate to the virtual disk and enter a new (bigger) size for the virtual disk. Click apply and this should be taken care of. Now the Linux guest needs to see the change and this can be done either by rebooting the VM or rescanning the devices. Since this is a paravirtualized VM (PVM) simply running ‘sync’ or rescanning the SCSI bus won’t work because the device (xvda) is not really scsi. I have yet to find a way to do this online (and if you know one, please leave a comment). Until then: reboot the VM so that fdisk recognized the new size of the VM. After that, start fdisk, check the new size and re-create the lvm partition to the new maximum size. I am always a bit scared of this step because you are actually deleting the partition. But this simply means removing the entry from the partition table and will actually leave your data intact as long as you re-create the partition with the same start sector.
Edit the VM in OVM manager, navigate to the virtual disk and enter a new (bigger) size for the virtual disk. Click apply and this should be taken care of. Now the Linux guest needs to see the change and this can be done either by rebooting the VM or rescanning the devices. Since this is a paravirtualized VM (PVM) simply running ‘sync’ or rescanning the SCSI bus won’t work because the device (xvda) is not really scsi. I have yet to find a way to do this online (and if you know one, please leave a comment). Until then: reboot the VM so that fdisk recognized the new size of the VM. After that, start fdisk, check the new size and re-create the lvm partition to the new maximum size. I am always a bit scared of this step because you are actually deleting the partition. But this simply means removing the entry from the partition table and will actually leave your data intact as long as you re-create the partition with the same start sector.
[root@ovmm32 ~]# fdisk /dev/xvda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/xvda: 34.4 GB, 34359738368 bytes 255 heads, 63 sectors/track, 4177 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00082e48 Device Boot Start End Blocks Id System /dev/xvda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/xvda2 64 2611 20458496 8e Linux LVM Command (m for help): d Partition number (1-4): 2 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (64-4177, default 64): Using default value 64 Last cylinder, +cylinders or +size{K,M,G} (64-4177, default 4177): Using default value 4177 Command (m for help): p Disk /dev/xvda: 34.4 GB, 34359738368 bytes 255 heads, 63 sectors/track, 4177 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00082e48 Device Boot Start End Blocks Id System /dev/xvda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/xvda2 64 4177 33038728+ 83 Linux Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): L 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx 5 Extended 42 SFS 86 NTFS volume set da Non-FS data 6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt 9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT 1e Hidden W95 FAT1 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
This calls for another reboot which is unfortunate, but one more cycle won’t hurt us now. After that we we can resize the pv:
[root@ovmm32 ~]# pvdisplay --- Physical volume --- PV Name /dev/xvda2 VG Name vg_ovmm32 PV Size 19.51 GiB / not usable 2.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 4994 Free PE 0 Allocated PE 4994 PV UUID HPweY3-sK8N-qKRR-57qR-HimH-zPKK-WD4p6e [root@ovmm32 ~]# pvresize /dev/xvda2 Physical volume "/dev/xvda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized [root@ovmm32 ~]# pvdisplay --- Physical volume --- PV Name /dev/xvda2 VG Name vg_ovmm32 PV Size 31.51 GiB / not usable 3.38 MiB Allocatable yes PE Size 4.00 MiB Total PE 8065 Free PE 3071 Allocated PE 4994 PV UUID HPweY3-sK8N-qKRR-57qR-HimH-zPKK-WD4p6e
[root@ovmm32 ~]# vgdisplay --- Volume group --- VG Name vg_ovmm32 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 31.50 GiB PE Size 4.00 MiB Total PE 8065 Alloc PE / Size 4994 / 19.51 GiB Free PE / Size 3071 / 12.00 GiB VG UUID Yi9o86-E9fU-ZbU0-Fvuj-9QQn-n1AJ-N04Hzb
So let’s look at the logical volumes and then resize the root volume to the new maximum size:
[root@ovmm32 ~]# lvdisplay --- Logical volume --- LV Path /dev/vg_ovmm32/lv_root LV Name lv_root VG Name vg_ovmm32 LV UUID Z3slmg-uIYv-0cRP-q1ZQ-8kmA-12Ja-WU6FfT LV Write Access read/write LV Creation host, time ovmm32.portrix.net, 2013-06-07 14:00:44 +0200 LV Status available # open 1 LV Size 11.70 GiB Current LE 2994 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Logical volume --- LV Path /dev/vg_ovmm32/lv_swap LV Name lv_swap VG Name vg_ovmm32 LV UUID 6dfA32-ZH6r-Ulbn-ZzUT-uDOh-EwlP-y8E3PC LV Write Access read/write LV Creation host, time ovmm32.portrix.net, 2013-06-07 14:01:55 +0200 LV Status available # open 2 LV Size 7.81 GiB Current LE 2000 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:1 [root@ovmm32 ~]# lvextend -l +100%FREE /dev/vg_ovmm32/lv_root Extending logical volume lv_root to 23.69 GiB Logical volume lv_root successfully resized [root@ovmm32 ~]# lvdisplay --- Logical volume --- LV Path /dev/vg_ovmm32/lv_root LV Name lv_root VG Name vg_ovmm32 LV UUID Z3slmg-uIYv-0cRP-q1ZQ-8kmA-12Ja-WU6FfT LV Write Access read/write LV Creation host, time ovmm32.portrix.net, 2013-06-07 14:00:44 +0200 LV Status available # open 1 LV Size 23.69 GiB Current LE 6065 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Logical volume --- LV Path /dev/vg_ovmm32/lv_swap LV Name lv_swap VG Name vg_ovmm32 LV UUID 6dfA32-ZH6r-Ulbn-ZzUT-uDOh-EwlP-y8E3PC LV Write Access read/write LV Creation host, time ovmm32.portrix.net, 2013-06-07 14:01:55 +0200 LV Status available # open 2 LV Size 7.81 GiB Current LE 2000 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:1
Last step: resize the ext4 filesystem
[root@ovmm32 ~]# resize2fs /dev/mapper/vg_ovmm32-lv_root resize2fs 1.43-WIP (20-Jun-2013) Filesystem at /dev/mapper/vg_ovmm32-lv_root is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/mapper/vg_ovmm32-lv_root is now 6210560 blocks long. [root@ovmm32 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_ovmm32-lv_root 24G 7.1G 16G 32% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/xvda1 477M 152M 296M 34% /boot
No comments:
Post a Comment