Howto Increase a / (Root) LVM partition on a single vmdk without adding another partition (For example under VMware Workstation)
1. Increase Vmware partition and LVM
Resize your vmdk under VMWare as you would do it usually. Once you’ve resized the vmdk I advise to take a snapshot while everything is still fine. That way if you completely screw your VM’s partition table you have a back-out
2. Run
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_sat01-lv_root 16G 3.9G 11G 27% / tmpfs 935M 0 935M 0% /dev/shm /dev/sda1 485M 37M 423M 8% /boot
It will all look a bit like this
run
# /sbin/fdisk -u -l /dev/sda Disk /dev/sda: 96.6 GB, 96636764160 bytes 255 heads, 63 sectors/track, 11748 cylinders, total 188743680 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: 0x0002fb7a Device Boot Start End Blocks Id System /dev/sda1 * 2048 1026047 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 1026048 41943039 20458496 8e Linux LVM
to determine the size of the partitions in sectors.
The bold number is important. the starting sector of /dev/sda2. In my case it’s 1026048. It will be different for you. Note it down.
3. Delete the partition and recreate it, with the new end point (which will be the default):
# sudo /sbin/fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units tosectors (command 'u'). Command (m for help): p Disk /dev/sda: 96.6 GB, 96636764160 bytes 255 heads, 63 sectors/track, 11748 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: 0x0002fb7a Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 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-11748, default 64): (I pressed Enter) Using default value 64 Last cylinder, +cylinders or +size{K,M,G} (64-11748, default 11748): Using default value 11748 (I pressed Enter again) 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)
4. Before you save the partition table, change the beginning sector of /dev/sda2 to match the old configuration exactly by going into expert mode. In my case it was 1026048. Please use your value:
Command (m for help): x Expert command (m for help): b Partition number (1-4): 2 New beginning of data (1026048-188731619, default 1026048): 1026048 Expert 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.
5. Now its time to reboot the Guest and see if it worked. If not then use the Snapshot to revert and try again.
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_sat01-lv_root 16G 3.9G 11G 27% / tmpfs 935M 0 935M 0% /dev/shm /dev/sda1 485M 37M 423M 8% /boot
Nothing has changed yet
# reboot
6. Once the machine is back run.
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_sat01-lv_root 16G 3.9G 11G 27% / tmpfs 935M 0 935M 0% /dev/shm /dev/sda1 485M 37M 423M 8% /boot
# vgdisplay --- Volume group --- VG Name vg_sat01 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 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 19.51 GiB PE Size 4.00 MiB Total PE 4994 Alloc PE / Size 4994 / 19.51 GiB Free PE / Size 0 / 0 VG UUID idadRN-6Bla-K9sp-tuVo-wB37-ormr-G1HSD4
OK Nothing yet has changed. But now …
# pvresize /dev/sda2 Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized # vgdisplay --- Volume group --- VG Name vg_sat01 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 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 89.50 GiB PE Size 4.00 MiB Total PE 22913 Alloc PE / Size 4994 / 19.51 GiB Free PE / Size 17919 / 70.00 GiB VG UUID idadRN-6Bla-K9sp-tuVo-wB37-ormr-G1HSD4
7. Now we need to increase the Volume
Use lvextend to increase the space available for the logical volume by the amount of free space displayed with vgdiplay.
The command arguments will be different for you:
# lvextend -l+100%FREE /dev/vg_sat01/lv_root (I want 100% of the rest of the Free space (note its a L not a 1:-) ) Extending logical volume lv_root to 85.60 GiB Logical volume lv_root successfully resized
8. Use resize2fs to increase the size of the filesystem. The command argument will be different on your system:
# resize2fs /dev/mapper/vg_sat01-lv_root resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg_sat01-lv_root is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 6 Performing an on-line resize of /dev/mapper/vg_sat01-lv_root to 22438912 (4k) blocks. The filesystem on /dev/mapper/vg_sat01-lv_root is now 22438912 blocks long.
If things went to plan you should see now a much larger Root FS
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_sat01-lv_root 85G 11G 70G 14% /