How To Resize ext3 Partitions Without Losing Data - Page 2

Want to support HowtoForge? Become a subscriber!
 
Submitted by falko (Contact Author) (Forums) on Sun, 2007-01-07 17:16. ::

3 Enlarging An ext3 Partition

In this example we have a /dev/sda1 partition with about 6GB of size, and right behind that partition we have about 4GB of unused space. We want to add those 4GB of unused spave to our /dev/sda1 partition (this doesn't work of these 4GB don't come right behind our /dev/sda1 partition, but are elsewhere on the hard disk!).

First, we collect some details again about our current partitioning:

df

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              6047868   4224140   1639408  73% /
varrun                   95480       132     95348   1% /var/run
varlock                  95480         0     95480   0% /var/lock
udev                     10240        52     10188   1% /dev
devshm                   95480         0     95480   0% /dev/shm
lrm                      95480     17580     77900  19% /lib/modules/2.6.17-10-generic/volatile

df -B 4k

Filesystem           4K-blocks      Used Available Use% Mounted on
/dev/sda1              1511967   1056035    409852  73% /
varrun                   23870        33     23837   1% /var/run
varlock                  23870         0     23870   0% /var/lock
udev                      2560        13      2547   1% /dev
devshm                   23870         0     23870   0% /dev/shm
lrm                      23870      4395     19475  19% /lib/modules/2.6.17-10-generic/volatile

df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.8G  4.1G  1.6G  73% /
varrun                 94M  132K   94M   1% /var/run
varlock                94M     0   94M   0% /var/lock
udev                   10M   52K   10M   1% /dev
devshm                 94M     0   94M   0% /dev/shm
lrm                    94M   18M   77M  19% /lib/modules/2.6.17-10-generic/volatile

fdisk -l


Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         789     6337611   83  Linux
/dev/sda2            1248        1305      465885    5  Extended
/dev/sda5            1248        1305      465853+  82  Linux swap / Solaris

fdisk -s /dev/sda1

6337611

Then we shut down the system and boot into our Knoppix Live-CD (or your rescue system) (if the partition you want to resize doesn't hold any system files, you can do everything from the original system; the steps are the same, just omit booting into Knoppix/your rescue system).

shutdown -r now

After Knoppix has booted, open a terminal and become root by running

su

/dev/sda1 should be unmounted by default, but you can run

umount /dev/sda1

to go sure.

Then run

fsck -n /dev/sda1

fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1080014/1536000 blocks

Next we remove the journal from /dev/sda1, thus turning it into an ext2 partition:

tune2fs -O ^has_journal /dev/sda1

The output looks like this:

tune2fs 1.38 (30-Jun-2005)

Now we use fdisk to delete our current /dev/sda1 partition and create a bigger one (don't be afraid, no data will be lost):

fdisk /dev/sda

(Yes, it's /dev/sda, not /dev/sda1.)

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Type m to get a list of all commands:

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Let's print out the partition table:

Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         789     6337611   83  Linux
/dev/sda2            1248        1305      465885    5  Extended
/dev/sda5            1248        1305      465853+  82  Linux swap / Solaris

Now we delete partition no. 1 (/dev/sda1):

Command (m for help): d
Partition number (1-5): 1

Next we create a new /dev/sda1 partition. It was a primary partition before, so we choose p again, and again it is our partition no. 1:

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
p
Partition number (1-4): 1

Now we must specify the first and the last cylinder of our new /dev/sda1 partition. We know the first cylinder, can can take it from the fdisk -l output before:

First cylinder (1-1305, default 1): 1

Now fdisk tells us the highest possible cylinder of our new partition (1247 in this example), so we simply enter this number:

Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): 1247

Let's print out our new partition table:

Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        1247    10016496   83  Linux
/dev/sda2            1248        1305      465885    5  Extended
/dev/sda5            1248        1305      465853+  82  Linux swap / Solaris

Our original /dev/sda1 had the bootable flag (see the fdisk -l output from the beginning of this chapter), so we must add it to our new /dev/sda1 again:

Command (m for help): a
Partition number (1-5): 1

Now let's write our new partition table and exit fdisk:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

Now we reboot the system, and again we boot into our Knoppix system (rescue system; original system if resized partition doesn't hold system files):

shutdown -r now

Become root again (on Knoppix run

su

)

Then run

e2fsck -f /dev/sda1

Now we must resize the file system in our /dev/sda1 partition. If we don't specify a size for the resize2fs command, it will assume the biggest possible size so we don't have to calculate. So we run

resize2fs /dev/sda1

The output looks like this:

resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/sda1 to 2504124 (4k) blocks.
The filesystem on /dev/sda1 is now 2504124 blocks long.

Next we run

fsck -n /dev/sda1

fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/1254176 files, 1062544/2504124 blocks

and create the journal on /dev/sda1, thus turning it into an ext3 partition again:

tune2fs -j /dev/sda1

tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.

Now we are done. Shut down the system and boot into the original system:

shutdown -r now

If everything goes well, the original system will boot up, and no data has been lost. Now we can gather some details about our new partitioning and compare them with the information we collected at the beginning of this chapter:

df

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              9859036   4224032   5234348  45% /
varrun                   95480       132     95348   1% /var/run
varlock                  95480         0     95480   0% /var/lock
udev                     10240        52     10188   1% /dev
devshm                   95480         0     95480   0% /dev/shm
lrm                      95480     17580     77900  19% /lib/modules/2.6.17-10-generic/volatile

df -B 4k

Filesystem           4K-blocks      Used Available Use% Mounted on
/dev/sda1              2464759   1056008   1308587  45% /
varrun                   23870        33     23837   1% /var/run
varlock                  23870         0     23870   0% /var/lock
udev                      2560        13      2547   1% /dev
devshm                   23870         0     23870   0% /dev/shm
lrm                      23870      4395     19475  19% /lib/modules/2.6.17-10-generic/volatile

df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.5G  4.1G  5.0G  45% /
varrun                 94M  132K   94M   1% /var/run
varlock                94M     0   94M   0% /var/lock
udev                   10M   52K   10M   1% /dev
devshm                 94M     0   94M   0% /dev/shm
lrm                    94M   18M   77M  19% /lib/modules/2.6.17-10-generic/volatile

fdisk -l


Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1247    10016496   83  Linux
/dev/sda2            1248        1305      465885    5  Extended
/dev/sda5            1248        1305      465853+  82  Linux swap / Solaris

fdisk -s /dev/sda1

10016496


Please do not use the comment function to ask for help! If you need help, please use our forum.
Comments will be published after administrator approval.
Submitted by Ron Phhillips (not registered) on Tue, 2014-06-03 16:14.

I too found this tutorial very useful.  I ran these steps on a RHEL6.3 system but did run into one snag.  When fdisk was started, it reported:

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

I ignored that error at first, but subsequent commands like e2fsck would fail:

e2fsck: Superblock invalid, trying backup blocks...

e2fsck: Bad magic number in super-block while trying to open /dev/...

To rectify then, when using fdisk, I ran the 'c' and 'u' commands before manipulating the partition table.  After that I was able to successfully grow the partition table.

Submitted by Menac (not registered) on Tue, 2014-04-01 15:20.

Thank you for a very well written tutorial. I followed this on my Debian server, using an Ubuntu live cd and it worked flawlessly.

 

Submitted by Anonymous (not registered) on Mon, 2014-01-20 18:08.
Great job, very informative tutorial.  Worked perfectly on CentOS 6.5, a Hyper-V 2012 guest OS.
Submitted by Anonymous (not registered) on Tue, 2013-09-03 22:13.

Hi Falko,

 resized my /home (logical partition) - worked just right, as you described. Thank you very much.

Regards and grateful for your work

srini

Submitted by Dima (not registered) on Thu, 2013-07-25 12:37.

worked well on Ubuntu server 12.04

This one has the /dev/sda1 partition as /boot.

The one I needed to resize was /dev/sda3

So there was no need for boot flag in fdisk

Submitted by Rainer (not registered) on Tue, 2013-04-30 22:32.
Great tutorial - thank you for that!
Submitted by Shiv (not registered) on Thu, 2012-12-20 19:29.
Gr8 article. It worked for me (VMware) and Best help at Right Time. Many Thanks.
 
Shiv. 

 

 

Submitted by Doug F (not registered) on Fri, 2012-04-20 07:07.
Worked perfectly for me - Thanks for the tip!
Submitted by Igor (not registered) on Tue, 2012-03-20 15:57.

Hello!

 Great article. I tryed this method on ubuntu virtual machine (vmware) but not sucsessfuly. How can I resize root partition on virtual disk?

Submitted by D. (not registered) on Wed, 2011-06-08 09:01.

Worked very well on CentOS 64bit - 2.6.18-194.26.1.el5.centos.plus x86_64 GNU/Linux

Thanks!

 

Submitted by Ray Brannam (not registered) on Tue, 2011-03-01 14:27.

Thank you, nicely written article, very useful.

With a few tweaks this can also apply to vmware images as well.

--Ray 

 

 

Submitted by Igor (not registered) on Wed, 2012-03-21 11:08.

Hello Ray!  

 Can you please share how did you apply this to vmware VMs?

Best regards,

Igor 

 

 

Submitted by kasun777 (not registered) on Fri, 2011-02-04 15:10.
This article is so helpful and thank you very much for the author !
Submitted by PCCB (not registered) on Wed, 2010-12-01 09:55.

As the disks are getting bigger and bigger, the time needed for the operations are increasing.

I suggest the use of 

e2fsck -fC /dev/sda1

and

resize2fs -p /dev/sda1

so its possible to have some "feeling" of how long will it take
Submitted by physeetcosmo (not registered) on Tue, 2010-08-10 16:00.

Thanks for the howto, page 2 worked perfectly. Didn't bring down the data drive (/home is mounted) for a networked server I am working on. Good thing, right?

Now that I have gone through your tutorial, the process makes sense and I guess it isn't necessary to remove the journaling as others have commented.

Submitted by Rui (not registered) on Tue, 2009-01-13 22:38.

This is a good how-to. Everything worked fine for me, I just didn't convert my ext3 filesystems to ext2, and then back to ext3, it wasn't necessary.

Thanks!

Submitted by sampath (not registered) on Mon, 2008-12-22 14:34.

We should add one more entry.

Should mount the  partition 

mount /dev/sda1 /oldmountpoint

so the df -h  ll recognize the  new partition 

 

 

 

 

Submitted by Sebastian (not registered) on Fri, 2008-11-14 23:30.
Great howto, was able to use everything described on page 2 to resize an existing virtual linux data disk in vmware server 2. Worked like a charm on the first try - finally I could double the size of a data partition without moving out all the data.