Big problem: I had to repartition my harddisk because the Windows2000 partition were too small. I had the following layout:
8GB WindowsMe 8GB Linux RedHat 7.2 1GB Linux swap 2GB Windows 2000
Booting is thus: Lilo with Linux and Dos choice. The Dos choice starts the Windows2000 boot loader, which gives the choices of windows2000 and WindowsMe.
First, I got PartEd from GNU. Be careful to use a functioning floppy. I used this to resize WindowsMe, which stopped working, but its files were still there. Then I made a WindowsMe boot disk made on a functioning WindowsMe machine. To make a boot disk, use "add/remove programs" in the "Control Panel".
After starting the boot disk, i wrote:
"sys c:"and reeboted. WindowsMe started in safe mode, and then in normal mode, and then worked properly. Windows2000 disappeared from the boot meny, but thats O.K. because I wanted to reinstall it anyway.
Then I had to move the Linux partition down 5.5GB, but PartEd couldn't do that, because the partition overlapped its old boundaries. So I got "Fips". Fips didn't work, so I had to go to manual.
I booted the PC from a linux rescue CD. Running "fdisk /dev/hda" i got something like this:
Disk /dev/hda: 255 heads, 63 sectors, 2432 cylinders Units = culinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 446 3582463+ c FAT32 (LBA) /dev/hda2 1021 2040 8193150 83 Linux /dev/hda3 2041 2168 1028160 82 Linux swap /dev/hda4 2169 2432 2120580 f Win95 Ext (LBA) /dev/hda5 2169 2432 2120548+ 7 NT
First, notice that there are unused cylinders between /dev/hda1 and /dev/hda2. This is because of the successful shrinkage of WindowsMe, which is registered as "FAT32 (LBA)". Other things to notice, is that the blocksize is a nice 1024B even though Units is given as a multiple of 512 bytes, thus giving a "+" when the number of 512B blocks is odd, and that the size of a partition in tracks is given as End-Start+1 because the End block is a part of the partition. I want to move the Linux partition and its contents down to fill the gap above WindowsMe. This move overlaps itself. First I deleted all partitions except /dev/hda1, and created 3 Linux partitions:
Device Boot Start End Blocks Id System /dev/hda1 * 1 446 3582463+ c FAT32 (LBA) /dev/hda2 447 1020 4610655 83 Linux /dev/hda3 1021 1594 4610655 83 Linux /dev/hda4 1595 2041 3590527+ 83 Linux
I have filled the partition gap with /dev/hda2, and split the old linux partition into 2, of which /dev/hda3 is the first, with the same size as /dev/hda2.
What I want to do now, is to first move hda3 to hda2, and the hda4 to hda3, thus moving without overlap by splitting the overlapping move in two.
dd bs=1024 count=4610655 if=/dev/hda3 of=/dev/hda2 dd bs=1024 count=3590528 if=/dev/hda4 of=/dev/hda3
Note that the last "count" is 1 more than the count of /dev/hda4, because of the "+". The time it took was less than an hour for the first, and 40 minutes for the second "dd". It would probably go much faster if the blocksize "bs" had the size of an entire track, but it easier to get right when it is 1KB. (Seems I lost tha last 512B block with this method. I take the chance that this does not matter.)
Then I repartitioned, so that /dev/hda2 contains the moved linux data from the previous /dev/hda2 partition:
Device Boot Start End Blocks Id System /dev/hda1 * 1 446 3582463+ c FAT32 (LBA) /dev/hda2 447 1466 8193150 83 Linux /dev/hda3 1467 1594 1028160 82 Linux swap /dev/hda4 1595 2432 6731235 7 HPFS/NTFS
Then I rebooted on the rescue-cd, and mounted the new partition, and LILO'ed it:
chroot /mnt/sysimage lilo
And then I rebooted it normally! Yeeeha!
After that, I installed Windows2000 again, from WindowsMe, and installed the bootloader of Windows2000 to choose between thos 2 M$ oses.
Email me if you want to comment or ask questions: