Difference between revisions of "Add new partitions to an existing system"

From ArchWiki
Jump to: navigation, search
Line 49: Line 49:
You can download GParted here: http://gparted.sourceforge.net/download.php
You can download GParted here: http://gparted.sourceforge.net/download.php
'''See the note about its use on some HP Pavilion Computers'''
'''See the note about its use on some HP Pavilion Computers'''
=== WARNING ===
{{Warning|Changing, Resizing and/or Creating partitions has the VERY REAL potential to cause DATA LOSS Use common sense. BACKUP ANYTHING YOU DO NOT WANT TO LOSE!}}
{{Warning|Changing, Resizing and/or Creating partitions has the VERY REAL potential to cause DATA LOSS Use common sense. BACKUP ANYTHING YOU DO NOT WANT TO LOSE!}}

Revision as of 12:10, 26 June 2011

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Add new partitions to an existing system#)


You may find yourself in the situation where you either:

  • want to create a new partition to give yourself more flexibility, for example for backup operations.
  • are forced to create new partition(s) because your original partition is full and you need to move data from the full partition to a new one to free up space and allow your existing system to grow.

New partitions can be created either on previously unpartitioned sections of an existing disk or raid array or on a new drive added to the system.

In my case which I will use as an example, I developed a full root partition due to the size of my website files in Template:Filename and many packages such as kdemod3 and kde-unstable filling Template:Filename. Since I had available unpartitioned space on the dmraid array holding my Arch Linux install, I decided to move Template:Filename and Template:Filename to their own separate partitions to solve the problem. This would free up space which had taken by Template:Filename and Template:Filename on the Template:Filename partition and provide greater disk space for Template:Filename and Template:Filename on their own partitions.


After a routine drive status check, I was a bit surprised to find my root partition full:

[15:41 archangel:/home/david] # df -h
Filesystem            Size  Used Avail Use% Mounted on
                      19G   18G   64M 100% /
none                  2.0G     0  2.0G   0% /dev/shm
                     114M   17M   92M  15% /boot
                      37G   12G   24G  32% /home

Note: I am running dmraid where my partitions ( Template:Filename ) are raid arrays comprised of partitions from Template:Filename and Template:Filename. If you are not running any type of raid setup, the you will just see Template:Filename, Template:Filename, etc.. for each of your disks instead of Template:Filename.. Thankfully, adding new partitions works the same regardless. For additional information on dmraid, see: Installing with Fake RAID

I diagnosed the problem with kdiskfree, but you could use another disk usage display program. The source was found to be the collection of files offered on my website (Template:Filename) and the pacman cache (Template:Filename) so the decision was made to:

1. Create new partitions for each Template:Filename and Template:Filename

Warning: at this stage be careful that other partitions are not mistakenly corrupted

2. Mount the new partitions in a temporary location.

3. Copy the existing files from Template:Filename and Template:Filename to the newly created partitions in their temporary locations.

Warning: check to confirm a good copy

4. After confirming a good copy, delete the files under the original Template:Filename and Template:Filename directories

Warning: before doing this ensure that the system does not still need read or write access to these folders

5. Move the new Template:Filename and Template:Filename from their temporary mount points to their permanent homes 6. Update fstab accordingly.

Creating the New Partitions

You will need your filesystems to be UNMOUNTED when you make changes such as adding new partitions to the free space on your disk or shrinking partitions. Therefore you will need to boot into an environment such as provided by the install CD in "Rescue" mode, the Gparted-Live CD or another live CD with the necessary utilities.

Command line utilities such as fdisk, cfdisk or sfdisk can be used, but if you are unfamiliar with creating partitions and filesystems I would recommend downloading and using the Gparted-Live iso; it provides a nice gui and additional checks to make sure what you are doing is okay.

You can download GParted here: http://gparted.sourceforge.net/download.php See the note about its use on some HP Pavilion Computers

Warning: Changing, Resizing and/or Creating partitions has the VERY REAL potential to cause DATA LOSS Use common sense. BACKUP ANYTHING YOU DO NOT WANT TO LOSE!

With that cautionary statement, you can take comfort knowing that changing, resizing, creating and removing partitions is what the partitioning tools were created for. They work. Just make sure you understand what your are doing with the software and don't do anything strange (like clicking buttons willy-nilly or randomly trying out all of the commands available in the packages) and you should be just fine.

Extended Growth & Logical Partitioning

Partitions come in three main flavors: Primary, Extended and Logical. An Extended partition is for the most part just a "wrapper" to contain logical partitions.

If you have a typical Linux partition scheme, then you probably have a single "extended" partition with "logical" partitions of '/', 'Template:Filename' and possibly a 'Template:Filename' partition. Your logical partitions will probably completely fill the extended partition they reside in. Before you can add additional partitions, you must grow the current extended partition to make room for your new logical partitions, or you can create a new extended partition. I prefer to grow the extended partition then add the new logical partitions. I find no need for primary partitions unless dual booting windows.

You will need to create a filesystem on the new partitions with 'mkfs -t <fstype>' or you may select the desired filesystem when defining your partition with Gparted. If you don't know which filesystem you are using, then from the command line type "df -hT" and check the type column.

Moving Existing Data to the New Partitions

To benefit from the extra space provided by the new partitions, the new partitions need to be integrated into the filesystem. In my case I was replacing the directories Template:Filename and Template:Filename with the new partitions Template:Filename and Template:Filename. The solution:

  1. copy everything from the existing directories to the new partitions
  2. delete the contents of the existing Template:Filename and Template:Filename directories
  3. mount the new partitions under Template:Filename and Template:Filename

Files shouldn't be written to the parts of the filesystem you are moving during this process. The safest way to accomplish the copy and delete is to either boot from your install cd into rescue mode and create mount points to hold your Template:Filename filesystem and the new partitions, or alternatively shutdown anything that could write to or read from the existing directories. Template:Filename wasn't an issue, but for Template:Filename, syslog-ng needed to be shutdown. (If using dmraid, issue "dmraid -ay" to activate your raid sets when booting from the install CD into rescue mode.)

My new partitions were Template:Filename and Template:Filename. Usually they are similar to Template:Filename so substitute as necessary. The basic process (as root) is:

# Stop any processes that might write to the old directories.
/etc/rc.d/syslog-ng stop

# Create temporary mount points for your new partitions.
mkdir /mnt/newsrv
mkdir /mnt/newvar

# Mount the new partitions on the temporary mount points.
mount /dev/mapper/nvidia_ecaejfdip9 /mnt/newsrv
mount /dev/mapper/nvidia_ecaejfdip10 /mnt/newvar

# Copy the information from the old directories to the new partitions.
cp -a /srv/* /mnt/newsrv
cp -a /var/* /mnt/newvar

# Confirm the information was written to the new partitions with ls, diff, etc..
# When you are certain the information was written correctly to the new partitions delete 
# ... the information from the old directories.
rm -r /srv/*
rm -r /var/*

Remounting the New Partitions on the Filesystem

At this point you have all of the information on your new partitions and you have deleted the information from the Template:Filename filesystem to free-up space, but the new partitions are not in the right place within the filesystem and are still mounted in the temporary locations. It's time to unmount the new partitions from their temporary location and move them to their proper place in the filesystem.

# Unmount the new partitions from the temporary mount point
umount /mnt/newsrv
umount /mnt/newvar

# Mount the new partitions as /srv and /var
mount /dev/mapper/nvidia_ecaejfdip9 /srv
mount /dev/mapper/nvidia_ecaejfdip10 /var

Now the new partitions are in the proper location in the filesystem and you can confirm the new room you have created on Template:Filename with "df -h"

[16:19 archangel:/home/david] # df -h
Filesystem            Size  Used Avail Use% Mounted on
                      19G   11G  7.3G  59% /
none                  2.0G     0  2.0G   0% /dev/shm
                     114M   17M   92M  15% /boot
                      37G   12G   24G  32% /home
                      15G  165M   14G   2% /mnt/var
                      29G  7.4G   20G  27% /srv

Making the Changes Permanent

All that remains is to make the new changes permanent by adding the new mount configuration to Template:Filename. Using your favorite editor as root, open Template:Filename and add something similar to the following:

# New Partitions, Template:Filename and Template:Filename on separate partitions

/dev/mapper/nvidia_ecaejfdip9 /var ext3 defaults 0 1
/dev/mapper/nvidia_ecaejfdip10 /srv ext3 defaults 0 1

(See the fstab article for more details.)

If you have disabled any running processes, restart or enable them, check the files on your new partitions to insure all is well and check the logs for any permission errors. Then reboot and make sure it all works as expected.

Note: you are not limited to running your filesystem from a single disk. If you run out of space on your original drive, you may install a new one and create new partitions there. No need to move your entire system to the new drive, as in this example, I could have created the new Template:Filename and Template:Filename partitions on a completely separate drive and then mounted the partitions on the new drive as Template:Filename and Template:Filename in my existing system. However, when using a separate drive it must be mounted before anything needs to write to it (e.g. syslog in Template:Filename in my case).