I am assuming from your post that you only have 2 partitions????
partition #1, windows, with free space and you want to shrink it, and
partition #2, Linux, and you want to expand it?
(Note to the unwitting/noobs, I have not personnally used "gpartd" OR "partition magic" i do not make or imply any warranty to their usefulness. you have been warned)
You can use partition Magic to shrink your windows partition, and then use "gpartd" to grow your Linux partition, it's available here:
Buy a new 40-80 gig disk, 25-50 $ at circuit city/best buy when you look for their sale price with rebates, as long as you mail the rebate form in!!!
Actually, the fastest/cheapest way might be to just by another hard drive, partition HD#2("fdisk /dev/hdb"), format it ("mkfs -t ext3 /dev/hdb1") , make a mountpoint for it ("mkdir "/t"), mount it temporarily ("mount -t ext3 /dev/hdb1 "/t") copy over the "/usr" directory("cp -parv /usr /t")
Then boot the "rescue" disk, but don't tell it to mount/find an existing installation!,
create a directory "mkdir /t",
mount your linux partition manually "mount -t ext3 /dev/hdawhatever /t",
cd into your hard drive's root partition (now mounted on "t") "cd /t" ,
delete the old "/usr" directory with "rm -rvf usr"
vi the "/t/etc/fstab" file and add an entry for for your new "/usr" partition (should look something like
this "/dev/hdb2 /usr ext3 defaults 1 0" (that will mount the primary slave's second partition on the "/usr" directory, assuming that you created and copied your ENTIRE /usr directory to this partition before starting this procedure)
reboot (you now should have a few extra gig free on your "/" partition, and your "/usr" partition will have TONS of free space on it.....okay, only if you created/formatted a big partition in "fdisk /dev/hdb" step above
(once rebooted, your Linux install will now use two partitions, one for everything on the "/" filesystem EXCEPT for the "/usr" directory, and one that contains ONLY the "/usr" directory)