Shrink a Slice? FreeBSD 7.1

perikillo perikillo at gmail.com
Mon Feb 9 12:43:09 PST 2009


  Thanks for your great info, the only problem is that I don't want to
cause any trouble to my current system and I needed to fix this quickly.
  I already install the system and everything is working, I have to built a
system and test your procedure step by step.

   This info u give to us is very important, I had done this with Linux
before, and is easy, but with FreeBSD is the first time I need to do this.

   I will let u know my results ASAP.

   Thanks again for your help Jerry.


On Thu, Feb 5, 2009 at 2:23 PM, Jerry McAllister <jerrymc at msu.edu> wrote:

> On Thu, Feb 05, 2009 at 12:19:13PM -0800, perikillo wrote:
>
> >    Hi people.
> >    I have been googling without any good info about: How to shrink a
> slice?
> >
> >    Case: I installed a new server for mysql, is working, I already
> install
> > all the ports I need, them I spend a lot of hours yesterday with this
> baby,
> > now this is my current disk layout:
> >
> > /dev/ad0s1a on / (ufs, local, noatime, soft-updates)
> > devfs on /dev (devfs, local)
> > /dev/ad0s1f on /tmp (ufs, local, noatime, soft-updates)
> > /dev/ad0s1d on /usr (ufs, local, noatime, soft-updates)
> > /dev/ad0s1e on /var (ufs, local, noatime, soft-updates)
> > /dev/ad0s1g on /backups (ufs, local, soft-updates)
> >
> >    What I want to do is to shrink the slice /dev/ad0s1g
>
>   /dev/ad0s1g is a partition, not a slice.
>  /dev/ad0s1 is the slice.
>
> MicroSloth usage of the terms is different and confuses people sometimes.
>
> As far as I know neither growfs(8) nor tunefs(8) can shrink the disk
> allocated to a partition.
>
> The only way is to dump each of the filesystems to some other
> reliable media (maybe tape or a large USB disk) and then repartition
> that slice to be the sizes you want.    Use dump(8) to make the dumps
> and then check the dump files out before starting the repartitioning.
>
> First you have to build a filesystem on the USB drive.
> You should be able to use bsdlabel to create a single partition
> that covers the whole drive.
>
> But, if your FreeBSD or BIOS is old enough it might not go that big,
> so you will need to break it down in to smaller slices and make a
> partition in each.  (I have had to do that.  But if it is 7.xx it
> should not be necessary)  To break it up, get the  gparted  utility.
> Download its boot image and use it to break up the USB disk in to
> slices that your FreeBSD will handle.  You need to have it make all
> what it calls (in the MS way) Primary Partitions, but those are what
> are called slices in FreeBSD land.
>
> Don't get tempted to use gparted to shrink your ad0s1 slice because
> it will not work right.   That will just trash the current partitions.
> It is not what you are looking for.
>
> Either if your FreeBSD will handle the whole USB or after you have it
> broken up, then build a partition on each slice of the USB using bsdlabel.
> Don't make it bootable or write a boot sector on it.  Then run newfs(8)
> on it to make a filesystem.
> This bsdlabel and newfs can be done while the system is running.
>
> Then, take the system down and run the dumps.    You can do the dumps
> from single user mode or boot a fixit image from the install CD.
> You will need to do the repartitioning and restore the dumps from
> the fixit anyway so you could just start there.
> Boot the machine from the fixit disk - create a 'holographic' image as
> they call it.   Fixit is usually on disc1.
>
> Run the dumps.
> Lets say you are doing the dumps to a USB drive that comes up
> as /dev/da0 in the fixit boot and your current disk still is
> comes up with the name  /dev/ad0 .
>
> First, make up mount points for all your filesystems that you want to
> dump plus for the filesystem[s] on the USB drive.
> NOTE: That the fixit runs from a memory resident filesystem so whatever
>      you create there will disappear on boot.
>
> Anyway, skip dumping /tmp and /dev is a pretend filesystem.
>
> mkdir /oldroot
> mkdir /oldusr
> mkdir /oldvar
> mkdir /oldbkup
>
> mkdir /usbdrive
>
> (You can actually make the dumps from the devices rather than mounting
>  them, but I have never gotten in to that habit)
>
> Mount those partitions
>
> mount /dev/ad0s1a /oldroot
> mount /dev/ad0s1d /oldusr
> mount /dev/ad0s1e /oldvar
> mount /dev/ad0s1g /oldbkup
>
> mount /dev/da0s1 /usbdrive    (This device name might be different
> depending on how you make it.   Some possibilities are:
>      /dev/da0s1    If you just newfs the slice without making a partition
> in it
>      /dev/da0s1a  If you make a slice with fdisk and a partition with
> bsdlabel
>      /dev/da0a    If you make a partition with bsdlabel without making a
> slice
>
> Now do the dumps
>
> dump 0af /usbdrive/rootdump /oldroot
> dump 0af /usbdrive/usrdump /oldusr
> dump 0af /usbdrive/vardump /oldvar
> dump 0af /usbdrive/bkupdump /oldbkup
>
> This will take a while depending on media you use.
> By the way, to tape it would go to /dev/nsa0 rather than /usbdrive/oldroot,
> etc
>
> Once the dumps are done, you may want to reboot and mount that USB
> drive or read the tape and look at the dumps to make sure they can
> be read.     Just a precaution.
>
> At least you will need to unmount all the partitions so bsdlabel
> can work on them
>
> Anyway, once you are happy with your dumps, then get back in to
> the fixit and use bsdlabel to rewrite the partitions.
>
> Just bsdlabel -e ad0s1
>
> (You should not need to write a new boot block as this process should
>  not touch that sector)
>
> Adjust the partitions as you see fit.   Make partition 'a' start
> at offset of 0  and use a '*' for the rest of the offsets.
> bsdlabel will calculate them correctly.  You can also make the
> size of the last partition be '*' and bsdlabel will put the remainder
> of the usable space in it.
>
> Write/Quit out of the bsdlabel editor  -- just like vi.
>
> Now you need to do a newfs for each partition except for swap.
>
> Just take the defaults.   Do:
>
> newfs /dev/ad0s1a
> newfs /dev/ad0s1d
> newfs /dev/ad0s1e
>  etc for how many you made.
>
> Once that is done, you need to mount up the partitions
> and restore the dumps.
> Remember that if you rebooted the fixit from when you first
> made the mount points, you will have to make them again and
> remount things.
>
> Restores will look like:
>
> cd /oldroot
> restore -rf /usbdrive/rootdump
> cd /oldusr
> restore -rf /usbdrive/usrdump
> cd /oldvar
> restore -rf /usbdrive/vardump
> cd /oldbkup
> restore -rf /usbdrive/bkupdump
>
> If you created a new partition while doing this, there is currently
> nothing to put in it.   You will need to reboot and then you can
> split things up and move data as you see fit.
>
> ////jerry
>
>
>
> >
> > Filesystem  1M-blocks   Used  Avail Capacity  Mounted on
> > /dev/ad0s1a       495    232    223    51%    /
> > devfs               0      0      0   100%    /dev
> > /dev/ad0s1f       495      0    456     0%    /tmp
> > /dev/ad0s1d      5967   4225   1264    77%    /usr
> > /dev/ad0s1e     15863   1343  13251     9%    /var
> > /dev/ad0s1g    272313  48823 201704    19%    /backups
> >
> >   Like u can see, is the last slice I have, is posible to remove that
> slice
> > and create a new one?
> >
> >   I don't have info there yet and is not a freebsd default slice, I know
> > that I need to umount first.
> >
> >   I have been reading some post but all I have seen is that ins not
> possible
> > or I'm wrong?
> >
> >   I try to with sysinstall looks like don't let me do this.
> >
> >   Running FreeBSD 7.1-p2.
> >
> >   Thanks all for your time!!!
> > _______________________________________________
> > freebsd-questions at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> > To unsubscribe, send any mail to "
> freebsd-questions-unsubscribe at freebsd.org"
>


More information about the freebsd-questions mailing list