First off, I'm an absolute newbie in Linux, but I've been tasked to automate the process of resizing a partition on RHEL 6.5. The server resides as a virtual machine in VMWare, and we are trying to orchestrate an activity whereby an existing VMDK file is expanded and the partitions on that VMDK resize automatically.
As a test case, the VMDK is seen on the system as /dev/sdb. The size of this is say 5GB.
Now, I have 2 partitions on it, /dev/sdb1, /dev/sdb2, sdb1 taking up 1GB and sdb2 taking up 5GB
If someone now increases the size of the VMDK from 5GB to 10GB and specifies that the extra space should go to /dev/sdb1, how can I do that? So far I've managed to create a process whereby the last partition can be resized without a problem (i.e. /dev/sdb2) but any previous ones can't because of Starting and Ending block numbers.
My process is as follows:
1) Increase the VMDK size
2) Run echo "1" > /sys/class/scsi_device/0:0:0:0/device/rescan to pick up the resized drive
3) Using fdisk, delete the partition and recreate it
This works fine if the partition being modified is the last partition, but if its the first or second, then the partition just gets recreated the way it was. Is there some tool which can do this intelligently?
This is the fdisk output in my environment:
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
67 heads, 62 sectors/track, 5048 cylinders
Units = cylinders of 4154 * 512 = 2126848 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf3405e93
Device Boot Start End Blocks Id System
/dev/sdb1 1 510 1059239 83 Linux
/dev/sdb2 511 2524 4183078 83 Linux
As you can see, sdb1 takes up 1GB and SDB2 takes up 4GB, but there is about 5GB "free" on the disk. Now, how do I change this so that sdb1 takes up that remaining space? If I delete sdb1 and recreate it, it makes the same partition. I can easily create a new partition to occupy that space, or even change sdb2 to take up the remainder space (just delete sdb2 and recreate it using fdisk), but the question is how do I modify sdb1 to take up that space?
Hope my question is clear, and thanks in advance
Best Answer
You could move the 2nd partition sdb2 to the end of the "disk" and then recreate the first, by then you will have the ability to recreate the first one with "full" size.
However depending on your filesystem you should not need to delete it but rather "only" unmount it, and then do
resize2fs
(at least for ext2/3/4) , after doing the above move.The move itself could be done with
parted
.For how to do this: refer to following links:
Parted user manual gnu.org and linuxquestions.org
Something like this might work (you need to change your numbers:
However after version 2.4.
parted
does not containmove
anymore so you might need another tool (or it is renamed to another function which i did not find)Qoute Manual from gnu.org