Disclaimer :
The original version of this article was first published on IBM
developerWorks, and is property of Westtech Information Services. This
document is an updated version of the original article, and contains
various improvements made by the Gentoo Linux Documentation team.
This document is not actively maintained.
|
Partitioning in action, Part 2
1.
Consolidating data
Introduction
In my last tip, we
successfully moved /home to a new partition. Now, it's time to
learn how to consolidate often-modified files onto a new partition. Why would
we want to do this? Here's an example. Often-modified files contribute heavily
to fragmentation. One of the best ways to contain fragmentation is to store
often-modified files on their own partition. That way, the other partitions are
unaffected by the fragmentation caused by the heavily modified files. In
concept, this is easy to understand, but how do you actually go about doing it?
First, you must create a new partition for the specific purpose of storing
frequently modified files. You might want to locate this partition on a
separate disk to enhance performance. Then, I'll walk you through the steps
required to move both /tmp and /var to this new
partition.
Warning:
The following technique describes how to move a partition(s). Although this
technique is designed so that you can "back out" of a failed partition move, it
doesn't protect against user error. In other words, any time that you format
partitions or copy large numbers of files, there's a possibility that you will
type the wrong thing, causing lots of data to be destroyed. For this reason,
it's highly recommended that you take appropriate steps to back up all
critical files before proceeding.
|
Create a filesystem on the new partition
The first step of this process is to create a new partition that's big enough
to hold /var and /tmp, with a little extra space left
over. You'll need either an additional drive, or a spare (unused) partition
that will house the often-modified files. If you do need to use fdisk or
cfdisk to create the partition, you'll need to reboot once. Then, it's
time to format the new partition as follows (it's OK to be in multiuser mode
while you do this; I'll let you know when to switch to single-user):
Code Listing 1.1: Creating the filesystem |
# mkfs.ext2 /dev/???
|
2.
Mount it to /mnt/rwstorage
As in my previous tip, ??? should be replaced with the device name
for the new, empty partition that you are creating. Accidentally typing the
wrong name will destroy data on an existing partition, so be careful! After
typing this command, you'll have a brand-new ext2 filesystem on the new
partition. We're almost ready to mount it, but first, let's make a new mount
point.
Code Listing 2.1: Creating the mount point |
# mkdir /mnt/rwstorage
|
I chose the name rwstorage to remind us that this particular
partition is going to be specifically used to house files that are read from
and written to frequently. To mount the partition, type:
Code Listing 2.2: Mounting the partition |
# mount /dev/??? /mnt/rwstorage
|
3.
Creating a new /tmp
The partition is now mounted and we're ready to create our new
/tmp directory:
Code Listing 3.1: Creating the new /tmp |
# cd /mnt/rwstorage
# mkdir tmp
# chmod 1777 tmp
|
4.
Drop to single-user mode
Our new directory at /mnt/rwstorage/tmp has the right permissions
for a temporary directory. Now, drop to single-user mode, since we must copy
over /var. As usual, we've delayed our drop to single-user mode to
the last possible moment. Right now, we don't want any programs reading or
writing files in /var, so we have to stop all daemons, disconnect
all users, and do some quick maintenance by typing:
Code Listing 4.1: Entering single-user mode |
# init 1
|
If you're prompted to enter a password to perform system maintenance, do so.
You should now have a root shell, and all unnecessary daemons will be stopped.
Create a new location for our /var files by typing:
Code Listing 4.2: Creating the new directory |
# cd /mnt/rwstorage
# mkdir var
|
5.
Copy /var
Default permissions on our new /mnt/newstorage/var directory
should be correct, so now we're ready to copy all of our original
/var data over to the new partition:
Code Listing 5.1: Copying the data |
# cd /var
# cp -ax * /mnt/rwstorage/var
|
6.
Back up and create symlinks
After this command completes, you'll have an exact copy of /var at
/mnt/rwstorage/var. Now, you may be asking how exactly we get
Linux to use /mnt/rwstorage/var and
/mnt/rwstorage/tmp instead of the defaults in the root directory.
This is easily done by the use of symbolic links -- we'll create the new
symbolic links, /tmp and /var, which point to the
correct directories in /mnt/rwstorage. First, let's back up the
original directories:
Code Listing 6.1: Backing up the directories |
# cd /
# mv var var.old
# mv tmp tmp.old
|
The last line probably isn't necessary, since it's very likely that you don't
have anything important in /tmp, but we're playing it safe. Now,
let's create the symlinks:
Code Listing 6.2: Creating the symlinks |
# cd /
# ln -s /mnt/rwstorage/var /var
# ln -s /mnt/rwstorage/tmp /tmp
|
7.
Finishing touches to /etc/fstab
Now, when any user or program uses /var, they'll automatically be
transported to /mnt/rwstorage/var! Likewise for /tmp.
We have one step left; however, it can be safely performed in multiuser mode.
It's time to get Apache running again, and to allow all your users to log back
in. Exit from runlevel 1 by pressing CTRL-D. The system should start up
normally. Log in as root.
The final thing we must do is configure /etc/fstab so that
/dev/??? is mounted at /mnt/rwstorage. You must add a
line like the following to your /etc/fstab:
Code Listing 7.1: Configuring fstab |
/dev/??? /mnt/rwstorage ext2 defaults 1 2
|
Important:
If you are using a kernel version in the 2.3+ range, it's very likely that you
have a line in your /etc/fstab that looks like this:
|
Code Listing 7.2: Shared memory |
none /var/shm shm defaults 0 0
|
This line enables shared memory on your system, and by default it gets mounted
in /var. In order for this line to work properly, it must appear
after the line you just added. That way, when Linux starts up,
/mnt/rwstorage will get mounted first (enabling /var). Then, and
only then, will the shm device get mounted at /var/shm, which is
really /mnt/rwstorage/var/shm. Make sure the lines are in this
order:
Code Listing 7.3: Enabling shared memory |
/dev/??? /mnt/rwstorage ext2 defaults 1 2
none /var/shm shm defaults 0 0
|
After saving the changes to /etc/fstab, your system has been
successfully upgraded! After verifying that everything is working properly,
you'll want to remove the /tmp.old and /var.old
backup directories. Congratulations -- you've successfully reconfigured your
system's partitions for optimum performance.
Resources
About the author
Daniel Robbins lives in Albuquerque, New Mexico. He was the President/CEO of
Gentoo Technologies Inc., the Chief Architect of the Gentoo Project and is a
contributing author of several books published by MacMillan: Caldera OpenLinux
Unleashed, SuSE Linux Unleashed, and Samba Unleashed. Daniel has been involved
with computers in some fashion since the second grade when he was first exposed
to the Logo programming language and a potentially lethal dose of Pac Man. This
probably explains why he has since served as a Lead Graphic Artist at SONY
Electronic Publishing/Psygnosis. Daniel enjoys spending time with his wife Mary
and his new baby daughter, Hadassah. You can contact Daniel at
Daniel Robbins.
|