Moving paritions around

Jerry McAllister jerrymc at
Fri Mar 30 15:53:34 UTC 2007

On Fri, Mar 30, 2007 at 02:50:31AM -0000, John Levine wrote:

> I set up my laptop to dual boot between W1nd at ws and FreeBSD.  When I
> first set it up I made the partitions the same size, but since then I
> found I do a lot more with FreeBSD so I'd rather give it more space.
> So the last time I had to reinstall Windows from scratch, I made its
> partition smaller.  Now there's a big chunk of free space between
> the two partitions.  Should I expect the following to work?
> (back everything up, duh)

Yes.   Use dump(8) to back up each of the FreeBSD filesystems.

> Boot from a CD, change the partition table to make the FreeBSD partition
> start right after the Windows partition

Well, sort of maybe.    Do you mean the partition table or slice table?

First, I am guessing that you used some utility to officially shrink 
the slice (windows primary partition) where MS-Win is installed.

You need to rebuild the slice table.    You can do it in two ways.
One would be just make a slice that covers all the space you want
to use.   The other would be leave the existing slices in place and
make an extra one to use up the newly freed space.   Either/both of
these would be handled by the fdisk utillity.   If you use sysinstall
it sort of obscures the fact that it is using fdisk.    Probably, since
you have backed everything up and are sort of starting from scratch
on FreeBSD, you want to do the first.

So, delete the existing FreeBSD slice with fdisk (or in sysinstall)
and then create a new one that encompasses all the left over space.

> Use dd to move down the existing FreeBSD partition data so it starts
> at the beginning of the new partition

No, this is no good.   You cannot reuse the old partition data on the
new slice because the new slice is a different size.   You need to
create new partitions within the newly enlarged slice with bsdlabel 
(or if you use method 2, then you don't muck with anything in the 
old slice partition table.   You just create a new one in the new
slice, probably with just one partition - but don't bother with this.
Use method 1)

Use fdisk to delete that old FreeBSD slice and create a new one that
includes both the newly free space and the old FreeBSD space and make
sure the MBR is written (it should already be there actually) and the
slice is marked as bootable.    Lets say it becomes slice 2 on drive 0.
You will need to create a config file to make the fdisk work easily.
Probably sysinstall is easier for this.

Then run bsdlabel to write the boot sector on the slice and then
edit it.   You can use sysinstall for this too since you are already
in it from the fdisk, but it is easy to use directly as well.
  bsdlabel -w -B ad0s2    (or da0s2 if it is SCSI)  This writes the 
                          boot sector.
  bsdlabel -e as0s2       This causes an edit session to start.  Edit only
                          the parts below the line that has 
                           #    size    offset    fstype     etc
                          Don't change the 'c:' line.

Then do a newfs on each partition created in bsdlabel (except swap) 
and restore(8) the dumps and you are ready to go.

Now, if you are not already at FreeBSD 6.2, then this would be the
best time to just install it, csup everything including system, ports
and docs to the latest and  make build, install, reboot and merge, etc
 rather than bother moving over your old system as is.   Of course you 
have made and checked the dumps so you can get back your own data.

> Use growfs to give the extra space to my /usr filesystem, which is at
> the end of the existing partition

No, you don't want to muck with growfs here.  You are expanding a
slice, not a filesystem.

> Or should I just back it all up to a USB disk, reformat, and restore it,
> which will take considerably longer?

Yup, this is what you should do and essentially what I describe above.
If you can plug in and use a USB disk, so much the better.  You do
need to dump each filesystem separately, except don't bother with swap
and /tmp, or course.    Use dump(8)/restore(8) for the backups.  dd will 
not get you what you want.


> R's,
> John
> _______________________________________________
> freebsd-questions at mailing list
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at"

More information about the freebsd-questions mailing list