Remote re-installation of current FreeBSD system.

Jerry McAllister jerrymc at msu.edu
Fri Nov 13 22:21:23 UTC 2009


On Fri, Nov 13, 2009 at 03:28:04PM -0500, Roger wrote:

> Hello all,
> 
> I'm in control of a dedicated server and I would like to re-install FreeBSD.
> I found the following guide:
> http://www.freebsd.org/doc/en/articles/remote-install/
> which seems to cover pretty much all should need but it assumes that
> I have some other OS (linux) installed, since I have FreeBSD 7.2-p4 I wonder
> if maybe there is an easier way.

Well, you say a dedicated server, but you do not say it is remote.
The article is for a remote install - that is, one where you cannot
put your hands on the actual machine.    

The article also assumes you are making a raid with gmirror.  With
just one drive, you can ignore that stuff.

If it is really a remote machine, then you will have to go through
that stuff about building an mfs and running from it.   But, not
if you have direct access to the machine.

If you can get to it and shut it down and put CDs in it, the process
is much more simple.   In that case you just do good backups and
check them out to make sure they are readable, put the install CD in
and boot the machine.   That will bring up Sysinstall which will do
everything for the main install.   Then you will probably want to
csup(1) both the base system and the ports tree and rebuild the
base according to the handbook.   Then install your ports.
Finally restore your backups.    

Or, if you are completely happy with what is currently on the machine
and you just want to reorder the partition sizes, then you don't
even have to really do any install.  Just do the backups, use 
the 'fixit' disk to run bsdlabel to make the partitions.  Newfs(8)
the new partitions. Then restore the backups over the top of things.    

> The reason for wanting to re-install is because I only have on big
> slice that covers the
> entire harddrive and I don't want that. Primarily I would like to have
> /usr/local
> in a separate slice.

Really in a separate slice??   Or do you mean a separate partition.
It is possible that you used only a slice and no partitions, but it
is not the usual thing.   That is kind of halfway to what they call
a 'dangerously dedicated' disk in the handbook.  Maybe you could 
call it a dangerously dedicates slice.  It isn't really dangerous,
but it limits some things you can do and for the disk, makes it so
some types of things (that you most likely would never run in to)
could not access it.


So, 
Remember, in FreeBSD slices are the primary divisions (identified as 1..4)
of the disk and partitions (identified as a..h) are subdivisions of slices.
Presuming you are using SATA or IDE disk, the drive is ad0, or if you 
are using SCSI or SAS disk, the drive is da0.
The first single slice is either ad0s1 (or da0s1 for SCSI) thus the 's'
in 's1'.
Then in s1 you can have partitions a..h except c is reserved, b is
best used for swap and a needs to be root.

If you have a single slice and no partition, then you would be
mounting all of  /dev/ad0s1 as /.   If you have partitions, then 
you would be mounting  /dev/ad0s1a as /.   In any case, it is easy
to modify.

The only reason you might want a separate second slice on a machine
that is only running one version of FreeBSD  is if you have used up
all the partitions available in slice 1.

Do a df -k to see what slices and partitions are in use.
If you have partitions use bsdlabel to look at the label
in more detail.
 From root, do:    bsdlabel ad0s1      (or da0s1 for SCSI or SAS)

Think about how you want the disk divided before you get into
the middle of it.

If the new /usr/local partition would be too big to fit in the
new /usr partition along with the regular /usr stuff, then you
will have to split them up before doing the backups.  In that
case, use tar(1) to make a file that contains all of /usr/local,
then rm(1) the contents of /usr/local, then do the backups and
go from there - use the bsdlabel from the fixit to rebuild the
partitions (and newfs each of them), restore everything over the
top, mount that new /usr/local (make sure you still have a /usr/local
mount point and that you fix up /etc/fstab for it) and untar that
ball you make of /usr/local.

If there is plenty of room for it to be in the new /usr temporarily,
then just do the backups and then use bsdlabel from the fixit to rebuild 
the partitions, newfs them and restore them from backups.   Then
rename the current /usr/local to get it out of the way, remake the
/usr/local mountpoint, mount it and then use tar to copy everything
from the old /usr/local to the new one.   Check it out and then rm
the old /usr/local.

Again, presuming you have direct access to the machine, 
Make your backups and put them somewhere away from what you are
doing - on tape, or a big USB drive or another machine's disk, etc.
I vote for a big cheap USB drive if your machine supports it.

Once you have readable backup -- and that /usr/local  split out
in a separate tar file, if it would be too big, then put in the
CD with the fixit.  There is a menu item to select that boot.  It
used to be on CD-1, but you may need to check that in case they 
moved it.  Just put in the CD and boot and see what you get.  
Select the option and if it gives you a prompt, then you are 
running from it.   It won't hurt your disk at that stage.

If you really just have a single slice and no partitions, then
your mounts in fstab would be just:

  /dev/ad0s1  /

If you do not have a partition, but are running directly from a 
slice, eg have an unlabeled slice, then do the following.

   dd if=/dev/zero of=/dev/da0s1 bs=512 count=1024
   bsdlabel -w -B ad0s1
   bsdlabel -e ad0s1

That will clean up a little, start an initial label on the slice
and then put you in to an edit screen.   It will look something like:

# /dev/ad0s3:
8 partitions:
#     size   offset    fstype   [fsize bsize bps/cpg]
  c: 89867610     0    unused       0    0       # "raw" part, don't edit

Edit that file so you have partitions you want 
Do NOT modify the  c: line  
then write and exit.
In vi, that would, of course, be  ESC:wq
that will write the label to the slice on the disk.

If you already have partitions - eg there was an ad0s1a mounted to /

Then skip the dd and the first bsdlabel and just do:

   bsdlabel -e ad0s1

You will get the partition edit screen about the same as before
but it will have the current partitions in it, something like:

# /dev/ad0s3:
8 partitions:
#      size     offset    fstype   [fsize bsize bps/cpg]
  a:   786432        0    4.2BSD     2048 16384 49160 
  b:  2572288   786432      swap                    
  c: 89867610        0    unused        0     0      # "raw" part, don't edit
  d:  1048576  3358720    4.2BSD     2048 16384     8 
  e:  6291456  4407296    4.2BSD     2048 16384 28552 
  f:  6291456 10698752    4.2BSD     2048 16384 28552 
  g: 72877402 16990208    4.2BSD     2048 16384 28552 

NOTE:  All these sizes and offsets are given in blocks of 512 bytes.

You will need to modify these to make room for your /usr/local
Do NOT modify the  c: line  

One advantage of the new bsdlabel is that it will calculate offsets
and the final partition for you - just put a  '*'  in the field.

Note:   On the disk above these partitions are currently mounted as:

 a:   /
 b:   swap
 d:   /tmp
 e:   /usr
 f:   /var
 g:   /home

So, to squeeze in a partition for /usr/local you might do this:
I will make it 2 GB in partition g: and that makes /home go to h:

# /dev/ad0s3:
8 partitions:
#      size     offset    fstype   [fsize bsize bps/cpg]
  a:   786432        0    4.2BSD     2048 16384 49160
  b:  2572288        *      swap
  c: 89867610        0    unused        0     0      # "raw" part, don't edit
  d:  1048576        *    4.2BSD     2048 16384     8
  e:  6291456        *    4.2BSD     2048 16384 28552
  f:  6291456        *    4.2BSD     2048 16384 28552
  g:  4194304        *    4.2BSD     2048 16384 28552
  h:        *        *    4.2BSD     2048 16384 28552

This way, bsdlabel will calculate the offsets correctly and put 
all available remaining space in the last (h:) partition.

Now my mounts (in fstab) would need to be:

 a:   /
 b:   swap
 d:   /tmp
 e:   /usr
 f:   /var
 g:   /usr/local
 h:   /home

You can divide this up however you want.  You could put just
the swap (you really should have a good amount of swap) and
your /usr/local separately and all the rest in partition a:
if you want.  Then you would only have partitions a:, b: and d:

To mount as:

 a:  /
 b:  swap
 d:  /usr/local

eg, following rebuilding the partitions, including creating the
new /usr/local partition and restoring the backups, do the following.

cd /usr
mv local oldlocal
mkdir local
mount /dev/ad0s1g /usr/local      (I just pulled a partition 'g' out of
                                   the air.  Use what you actually make it)
cd /usr/oldlocal
tar cvpf /usr/local/loc.tar
cd /usr/local
tar xvpf loc.tar
  Now, check it out and make sure files in the new /usr/local are good
cd /usr
rm -rf oldlocal
cd /usr/local
rm loc.tar

Then you should be good to go.
                                
> 
> Any input, advice, tips etc would be very welcomed.
> (trying to be prepared before attempting anything)

The main thing is to do backups that are stored on media off
the unit you are modifying.    Use dump(8) and restore(8).

////jerry


> 
> Thank you,
> -r
> _______________________________________________
> 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