Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Jan 2007 19:51:35 -0500
From:      Jerry McAllister <jerrymc@msu.edu>
To:        "Daniel A." <ldrada@gmail.com>
Cc:        FreeBSD Questions <questions@freebsd.org>
Subject:   Re: Put /usr on a different drive
Message-ID:  <20070114005135.GA15485@gizmo.acns.msu.edu>
In-Reply-To: <5ceb5d550701131508t2922edccw5c4ff5c769012aa7@mail.gmail.com>
References:  <5ceb5d550701131508t2922edccw5c4ff5c769012aa7@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jan 14, 2007 at 12:08:13AM +0100, Daniel A. wrote:

> Hi,
> I'm wondering if someone could point me in the right direction of
> moving the entire /usr partition to a second hard disk, given that I
> am on an existing (newly installed) install of FreeBSD.
> 
> Also, is it possible to specify something like this during the
> installation itself?

It is quite possible, but not quite as convenient as it could be if
you are not familiar with the installer.


> 
> Any possible google queries, links, articles, et cetera are warmly
> welcomed. I've tried throwing a few keywords at google, but it all
> returns off topic pages.

In the last six months I have posted fairly complete ways of
doing this several times on this list.   It is easy.  I suggest
you look throught the FreeBSD questions archives.   Most of my posts
assume things are being moved to an existing file system, but
the process is the same.

First, you should look at what is using up space in your /usr filesystem.
It may be that something is growing in a way you do no want.
For that, use the  'du'  command something like:
  cd /usr
  du -sk *
Cd in to any directory that seems unreasonable and repeat the du to
narrow things down.

One thing that is often done, but I don't recommend is putting
user accounts and other things that can grow unexpectedly in to /usr.
I make a separate file system for user accounts, generally using
the /home mount point.  I also put /usr/ports in a different file system.

If you finally decide that you do need to add a disk - a very real
possibility - then choose a good quality drive of the same general
type your already have - SCSI, IDE/SATA, SAS - aind physicaly install it.

Boot the machine and look for in dmesg.
It will either show up as dann or adnn  where nn is a device number.
It will be da for SCSI or ad for IDE family.  The first drive will be 0
the second will be 1, etc.    Probably your boot drive is 0 and the
one you add will be 1.  If they are IDE then ad0 and ad1.

Next, take a look at the drive with fdisk.  Presuming it is ad1,  do:
  fdisk ad1

It should find the disk and think everything is in slice 1 unless the
disk was formerly used in a different system, in which case it should
see the disk, but stuff may be spread ofer up to 4 slices (occasionally
miscalled partitions).

My examples the new drive is IDE family and is the second disk.
You can make sure everything that might be left on it is effectively
wiped out by doing:
  dd if=/dev/zero of=/dev/ad1 bs=512 count=65

Then, to make the disk usable you need to do an fdisk, bsdlabel and newfs.
Presuming you will use the whole disk for /usr (maybe you will really
want to use it in a more complex way, but the process is essentially
the same) and presuming you don't want to make the drive bootable - and
install an OS on it in a separate root,  then
The fdisk creates the slice table and writes sector 0.
  fdisk -I ad1
writes one single slice containing all the usable space on the drive.

NOTE, although drives are numbered 0-nn, slices are numbered 1-4.
Then you need to create a label in slice 1
  bsdlabel -w ad1s1
creates the initial label - note the additional 's1' to specify the slice.

Now, divide up the slice in to partitions.
In this I am presuming you want a single large partition.
Use the bsdlabel in edit mode.
  bsdlabel -e ad1s1

You will be put in a vi edit session unless you have a different
default editor specified in an environment variable.

That will bring up a screen with the slice label as it currently is.
Ignore all the stuff specifying drive specs.
For one partition, change only one field.
There should be a line starting with 'a:'
Change it so it looks like:
   a:        *        0    4.2BSD     2048 16384 32776

Leave the line that starts 'c:' as is.

But, if it doesn't give you an 'a:' line, copy the 'c:' line
and use it and just replace the size field with the '*'
You don't really need to change the fsize, bsize and bps fields, but
suggest you make them as I have them above.

Then you have to create a file system on that partition.
Do that with newfs.

newfs /dev/ad1s1a

Newfs needs the full device spec as above.

now you can mount and write to the filesystem.
I'd suggest you do this next stuff in single user mode, but
it isn't absolutely essential.
Make a temporary mount point and mount it.
  mkdir /newusr
  mount /dev/ad1s1a /newusr

Copy the existing /usr to the new space, probably using tar
I use an interim file, but you can use pipes.
If your current /usr is really a whole partition in and of itself,
then I would use dump/restore instead of tar for this
  cd /usr
  tar cvpf /newusr/usr.tar *
  cd /newusr
  tar xvpf usr.tar

The 'v' flag is not essential, but gives you the confidence
something is happening.

Using dump/restore instead of tar, do:

  cd /newusr
  dump 0af - | restore -rf -

Now, get rid of the old /usr and make it use the new one.

  cd /
  mv usr oldusr
  umount /newusr
  mount /dev/ad1s1a /usr

Check everything out and then delete obsolete stuff
  cd /
  rm -rm oldusr
  cd /usr
  rm usr.tar    (of course, if you don't usr tar, there will be no tar file)

Modify /etc/fstab so it will mount things correctly on bootup.

Put a line there like:

  /dev/ad1s1a             /usr            ufs     rw              2       2

Then reboot and things should be just hunkie-dori.

Next time, do a little archive searching, too.
Plus, all of everything I wrote here other than a few extra comments
is directly out of the man pages for fdisk, bsdlabel and newfs.
So, read through them carefully.  


////jerry
> 
> 
> Sincerely,
> Daniel A.
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070114005135.GA15485>