FOG resizes all partitions even System Reserved!
-
@Sebastian-Roth I’ll be glad to escape unicode hell, I do think focus on a language neutral solution is the way to go. I’m still unsure about the best direction to take.
So far, it seems we have two possible paths to explore:
File based detection:
Will check the mounted partition for specific files/folders, if they exist then we know what kind of partition we can expect (eg resizable partition if Windows folder is found)However, I foresee some funky stuff being able to mess this up. Atypical installations might not be detected properly.
Partition flag based detection:
Will check the mounted partition for specific flags, if they exist then we know what kind of partition we can expect based on the set flags.However, partition flags seem to have been somewhat inconsistently set as well as have changed between MBR and GPT somewhat. And of course users/software could theoretically alter these (although this will typically lead to issues with the system in question so less likely than with labels and marginally less likely than with files)
Our greatest advantage is that we only really need to think about NTFS partitions if we are simply replacing the old label system. This means we can work a lot more targetted regardless of the path taken.
I created and tested out the partition flag system which seems to work well on the systems I use, but of course I have no idea how it will behave outside of that.
-
@Quazz Yes, I think those are the two options we have. I tend to go the file based way because this is something that people/software can’t fiddle with. I am fairly sure that no one will ever change the boot loader binary path/name or Windows installation dir name. There is no reason to do this. Sure there is not much reason to change the flags either but I feel like this can happen more easily and the difference is, that Windows will still work perfectly fine with altered flags - so people won’t notice until they clone with FOG.
Our greatest advantage is that we only really need to think about NTFS partitions if we are simply replacing the old label system. This means we can work a lot more targetted regardless of the path taken.
I was hoping to improve the whole set and also make detection if Linux partitions work better. But that might just be another step.
Essentially I want to distinguish between partition only being fixed in size (e.g. recovery as we don’t want to expand that) and those that need to be fixed in position and size (e.g. boot partitions). But that’s the bigger picture. I might have the time to work this out over Christmas. Don’t think I will get there before.
-
@Sebastian-Roth I was looking into a file based approach but ran into a major speed bump.
It seems that on GPT builds of Windows 10 (at least on the latest official ISO release of Microsoft), the only folder (and there’s no files) on the first partition (which should be non-resizable) is ‘System Volume Information’ which is available on every NTFS partition…
Not sure how to resolve this at this point.
Got a working flag based approach available for now which should work fine for cases such as @maxcarpone has experienced.
edit: Even better news, had an OEM disk come in so I checked it out and it turns out they also use the ‘hidden’ flag which means we can mark them as non-resizable as well with this approach.
Of course as you pointed out, ideally they’d be ‘moveable’, but that’s a different issue I think, just fixing the partitions being resized that shouldn’t should do for now I think!
-
@Quazz said:
It seems that on GPT builds of Windows 10 (at least on the latest official ISO release of Microsoft), the only folder (and there’s no files) on the first partition (which should be non-resizable) is ‘System Volume Information’ which is available on every NTFS partition…
What exactly is the first partition for I am wondering?!
Got a working flag based approach available for now which should work fine for cases such as @maxcarpone has experienced.
Great stuff. I would say let’s give it a try! Mind sending a pull request towards out fos git repo?
-
-
Merged the changes, should be building new inits now. @maxcarpone Will let you know as soon as they are available for download.
-
@Sebastian-Roth Ok, I’ll be happy to try those new inits
-
@maxcarpone Unfortunately our build server seems to play up. Has not started building yet and I am not sure why…
-
@maxcarpone Sorry for the long deply again. Build server is fixed now and here you got the fresh new inits - on your FOG server run:
sudo -i cd /var/www/html/fog/service/ipxe mkdir initbackup mv init.xz init_32.xz initbackup/ wget -O init.xz https://fogproject.org/inits/init.xz wget -O init_32.xz https://fogproject.org/inits/init_32.xz
Now recapture the image and see if it’s any better.
-
Hey guys!
It looks like it works so far. I tested with 2 fresh installations of W10 1803, one in MBR and the other one in UEFI and each capture has its own d1.fixed_size_partitions populated.
Content of these files :
-
MBR => :1
which is the partition labeled : Réservé au système -
UEFI => :2:3:1
Which are Recover, System, MSR
I will do more experiments soon but I like what I saw ^^
Thanks for the good work
-
-
@Sebastian-Roth does it make sense to test these init files also with 1.5.5 stable? If yes, I’d be willing to test as I ran into the “resizing” issue just a few days ago having “System-Reserviert” as partition label on some of our Win10 Edu German master images. It took me days to find out that the boot loop indeed was not an IDE/AHCI ang buggy BIOS issue, which we had before on some point as well…
-
@imt_fog Yeah, definitely give those a try. The ones you have in place with a 1.5.5 install are still using the label based detection which can cause issues on Windows installs with language other than English.
-
@Sebastian-Roth I am using the new inits, and right now, it seems there is no resizing at all.
If I redeploy an image of a MBR based system, it has exactly the same size as on the captured one. On the other hand, there is no “fixed partition” message on the screen, but also no resizing message.
Content of d1.fixed_size_partitions
:1:2
Content of d1.original.fstypes
/dev/sda2 ntfs
I’ll switch back to the original inits, but if there is anything I could provide to help debugging, please let me know! Or could there also be an issue because of our local naming policy naming “System”, thus being confused with the UEFI “System” partition of GPT based systems? I didn’t check the sources yet
-
@imt_fog With the new inits we don’t check the labels anymore. But if you messed with the flags that could be an issue.
Did you capture and deploy using the new inits??
-
@Sebastian-Roth yep, both with the new ones.
I’ll do a debug run next week and check the messages, and I will check the flags as done in https://github.com/FOGProject/fos/blob/master/Buildroot/board/FOG/FOS/rootfs_overlay/bin/fog.upload#L109 - I did not “play” with the flags manually, but I will compare to a brand new Win10 MBR installation if the flags got mixed up.
Other question: could I just change the d1.fixed_size_partitions to
:1
as long as my source file system was “small enough”? I actually prepare the images on a virtual machine having the VHD slightly smaller than the smallest target system SSDs we have in use.
Normally, I prepare in the VM, deploy once to each target platforms, check the drivers and then capture each platform. Right now, we have 4 different models in our department (~30 to ~90 per model)
-
@imt_fog said in FOG resizes all partitions even System Reserved!:
Other question: could I just change the d1.fixed_size_partitions to
:1
Yes! Then on deploy it would expand the second partition for you.
I can actually imagine the second partition to be marked as bootable and therefore being recognized as non-resizable
-
@imt_fog If you boot the machine in question in debug mode, you should be able to run
parted -l
manually and check the flags.I don’t think this is caused by such, however, but interested in seeing the results.
Worth noting that partitions that go through the checks but fail to resize get marked as fixed size as well (to prevent issues during deploy)