After reading through multiple guides (including this one), and spending a full day trying everything possible - I finally ran into the process that is quick, easy and reproducible.
Tools needed:
1. Partition imaging/restoration software
-- I used both Clonezilla and Symantec Ghost v11.5.1.226
2. GParted
-- I used PartedMagic on a USB to access, Clonezilla, GParted and CGDisk
3. CGDisk (or whatever partitioning utility floats your boat)
4. A Windows PE via a Windows install disk/thumbdrive or Hiren's BootCD
-- I have all of these - you should, to!
Process:
For our example, let me layout a hypothetical 'current' partitioned disk that we want to change.
Partition1 - 100mb
-- EFI system partition
Partition2 - 16mb
-- MS Reserved partition
Partition3 - 200gb
-- Windows
Partition4 - 520mb
-- MS Recovery (RE) partition
Partition5 - 400gb
-- MS NTFS formatted data drive
Our goal is to SAFELY increase Partition1 (EFI) to, let's say.. 500mb
Begin!
Step 1: Make separate partition images using your imaging software of choice. NOT a disk image, but separate partition images. In this case, we would end up with 5 images. Most of these partitions are excruciatingly small, so this process takes very little time. Using these actual numbers and Clonezilla, probably 20 mins.
Step 2: If you're extra paranoid (I am!), restore these partitions and make sure they are rock solid.. if you used Clonezilla, and had it verify each image after creation, you're probably good. Or, if you're not paranoid and trust all things in the Universe, skip this step.
Step 3: Now, within your environment of choice to use GParted, open this disk and DELETE all 5 partitions. Apply changes. Keep a cloth handy for the sweat. It's going to start at 'Apply'. You now have a disk that is 100% unallocated. Quickly check GParted's disk info and verify it has a GPT partition table (it should, of course, but remember we're paranoid!).
Let me say something right here... We made an image of Partition1 (EFI) just in case something goes horrifically wrong and we want to restore everything 100%. Assuming nothing goes that South, we WON'T be restoring that image... while most imaging software allows you to restore an image to a larger partition, this does NOT seem to work with EFI partitions. You are left with all sorts of frustrating error messages. Ok? So we're going to rebuild an EFI partition from scratch and not restore Partition1. Let's move on.
Step 4: Now we rebuild the partitions. I use CGDisk for this, because I'm very fast in there. I will use that method here. Assuming my target disk is /dev/sda, I do
cgdisk /dev/sda
from the CLI. Inside, I arrow key down to FREE SPACE, then arrow left/right to NEW. I hit return for default start, enter 500MiB, hex code 0700 (for MS data), empty return for partition name. I now see it listed in the pending write list.
(note: This is our new 500mb EFI partition, but we do NOT use the hex code ef00 here. That will screw up everything, or at least is always did in my case. We are tricking utilities down the road that will be very fussy about doing anything to a system partition flagged as ef00. So we set it initially to 0700, and we will come back later and change it back.)
I next select FREE SPACE and create the 16MiB MS reserved partition, use 0c01 code and no partition name. Next is the Windows partition, created with 200GB, code 0700, and no name. Next is the RE partition, created with 530MiB, code 2700 and no name. Finally, we create the data partition with 400GB and code 0700 - no name.
We write this to disk. Exit CGDisk.
Step 5: Reload up GParted or whatever you're using. Format the new 500mb Partition1 to 'Fat32'. Apply. Now restore images for Partition2 through whatever. If you weren't following a guide and tip-toeing through this, you would probably have invested less than an hour to now. 95% of that time would be imaging and restoring.
Ok, at the end of this step, you should have a new 500mb EFI partition flagged as msfsdata, formatted as Fat32 and empty. You should have a restored 16mb MS Reserved partition as Partition2, a 200gb Windows partition back as Partition3 (to eventually become drive C:), a 530mb Recovery Environment as Partition4 and finally our 400gb data partition (that will eventually be drive D:).
In GParted, it is quite common to have an error flag on the 16mb MS Reserved partition. It's because it has no valid filesystem. You can ignore this. But there should not be any other errors for the other partitions. Let's rebuild the EFI partition next.
Step 6: Disconnect all unnecessary disks, leaving just the disk we are working with. Boot into a Windows PE. I use Hiren's BootCD. Whatever you use, make your way to an elevated (Administrator) CMD console. We will now use DISKPART.
Step 7: Type DISKPART at CMD prompt. Once loaded, type
LIST VOL
(you don't have to use caps.. I am, here, to designate typed out commands). Since your new EFI partition was formatted as Fat32, it will probably be in the volume list as C. We are going to remove all drive letters associated with our disk. So type
SEL VOL 0
REMOVE LETTER={whatever is there for Vol 0}
Go down the rest of the volumes and remove their drive letters via SEL and REMOVE commands. Do not remove the environment drive letters, typically X and/or Y. Look and find your Windows volume. In my case, I'm looking for size of 200gb. I see it as volume 1, so I type
SEL VOL 1
ASSIGN LETTER=C
Then I locate my 400gb data drive and see it as volume 4
SEL VOL 4
enter code here
ASSIGN LETTER=D
Now I locate the new 500mb EFI partition - I see it at volume 3
SEL VOL 3
ASSIGN LETTER=Z (any available letter, doesn't matter)
Do LIST VOL one last time to verify my Windows drive is C, the EFI drive is Z (or whatever you assigned), and any other data drives have their appropriate drive letter(s). Now type EXIT and you should back to your CMD prompt. Whew!
Step 8: Ok, let's build a new BCD store. If you didn't use Z for your EFI drive letter, replace Z in the following command with your letter. Type at the CMD prompt
BCDBOOT C:\Windows /s Z: /f UEFI
You should receive confirmation that writing the boot files was successful. You're pretty much done. But wait! We're paranoid!!
Step 9 (optional): From the command prompt type Z: to switch to the EFI drive. Type DIR and you should only see one entry - a directory called EFI. That's it. Let's set it back bootable as an EFI partition again...
Step 10: Let's get back in to GParted. Load the disk. Select Partition1 and 'Manage Flags' (you can do this by right-clicking the partition in the partition list, or by highlighting the partition in the list and then selecting 'Partition' from the top menu. Once in the 'Manage Flags' GUI, just click on 'boot'. Verify that at the same time, the 'esp' boxed was ticked by GParted as well. If it wasn't, that might be a problem... but tick it. Both 'boot' and 'esp' should be ticked. Exit the 'Manage Flags' window and the flags will automatically be set. There is no need to 'Apply'.
Step 11: Reboot into your new system with a 500mb EFI system partition. I would suggest you hold down whatever key gets you into your BIOS 'boot menu', and ensure you select the EFI entry for that disk.. once it successfully boots from that EFI partition, it should be the default next time around. If you just blindly booted and didn't get into Windows, definitely do this on your second try. Make SURE the EFI choice is selected by you.
Step 12: Are you extra paranoid? Once you are in Windows, go to elevated CMD. Enter DISKPART. LIST VOL, SEL VOL that is your 500mb EFI. ASSIGN LETTER=G or whatever. Open File Explorer. Right click on G: and select 'Properties'. You should see somewhere around 30mb used and 470mb free.
Time for me to do all of this, using these actual drive sizes, is slightly over an hour. And I would consider this 100% safe since you have the images. Also, I did use Symantec Ghost to image my Windows and data partitions (2 and 5). I do this so that I can restore them to a smaller partition if I want, and as well, I can browse through the image using Ghost Explorer, and extract any single file or files that I want.
In case the questions arise of why I use both Clonezilla and Ghost, well I answered why I like to use Ghost.. the typical NTFS data partitions are something it has always handled quite well. It doesn't do well with EFI and system partitions. It doesn't even see the MS Reserved partition. So I use Clonezilla for those, and Ghost for the data partitions.
I am not an expert in disk partitioning, Windows, or Linux. I am well aware that 'this step' or 'that step' might not be necessary, or could be done some other way. But I can do this as listed over and over with successful results. I will certainly entertain any comments that help make any of this more efficient or quicker.
Enjoy.
/sdb5
and use directly that one? You can always re-format the unknown partition when you are sure that it is not in use... 3. Backup. 4. Backup.../sdb5
... (faster) from the end if it is allowed...