Put /usr on a different drive

Daniel A. ldrada at gmail.com
Sun Jan 14 09:46:50 UTC 2007


On 1/14/07, Jerry McAllister <jerrymc at msu.edu> wrote:
> 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 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"
>
That sounds absolutely fantastic!
I did think over just copying the contents and then mounting the drive
as /usr, but I was unsure if doing it so simple would break something.
Apparently it wont, if I just do it in single-user mode?

Anyway, now that I've got that settled, would anyone recommend me what
to do with the now empty space in ad0?
My current layout is like this:
ad0 - 60GB
1gb swap
520M /
520M /tmp
55G /usr
1.5G /var

ad1 - 120GB
(Currently only one partition, occupying full drive)

Once I move my /usr to ad1, I'll have 55 gigabytes of space available
on ad0, and nowhere to put it. I've thought of assigning that space to
/var, but 55G would be overkill for a little home server like mine,
don't you think?

Maybe I should just assign ad1 to /home, which is basically the one
place where I use most disk space?

Oh snap, never mind answering this email. I think that is exactly what I'll do!

And thanks for the replies, Jerry and Andrew.

-- 
Sincerely,
Daniel A. A.
dienub.org


More information about the freebsd-questions mailing list