Wednesday, August 12, 2015

Resize Partition and Filesystem with fdisk & resize2fs

Resize Partition and Filesystem with fdisk & resize2fs

There was a question in my post on “Linux partitioning with fdisk on CentOS 6“. Our reader asked if it is possible to extend an existing linux non LVM partition without loosing it’s data … here is a post on how to resize partitionand filesystem with fdisk and resize2fs.
If you want to increase your root partition size you must follow my guide on “Increase Root Partition Size – LVM – CentOS“!
IMPORTANT: In order to resize partition (extend),enough disk space must be available! We can not extend a partition if there are no free sectors/cylinders at the end of the partition to extend!
PLEASE BACKUP YOUR DATA BEFORE RESIZING ANY PARTITION! GeekPeek.Net is not responsible for any data loss!
Resize Partition and Filesystem with fdisk and resize2fs
Resize Partition and Filesystem with fdisk and resize2fs

Let’s Resize Partition and Filesystem with fdisk and resize2fs!

Our system has two disks:

  • /dev/sda – 16GB system disk with LVM partitions (root and swap)
  • /dev/sdb – 1GB clean disk for tutorial purpose
For the start of this tutorial tutorial we have created one partition on /dev/sdb disk. Partition size (/dev/sdb1) is 500MB. We created an ext4 filesystem on this partition and put some dummy data on it. We will be modifying our partitions with fdisk and filesystem with resize2fs.
For more information on how to create and modify partitions with fdisk read “Linux partitioning with fdisk on CentOS 6“.

Extend Partition and Filesystem

Before we start, let’s check the current disk configuration. Geekpeek mount point is the partition we want to extend. We can see that the partition has 494MB of available space and 401MB is already used by dummy data. We want to extend the partition to 1GB:
[root@foo1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_foo-LogVol01
                       13G  4.6G  7.7G  38% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M  105M  355M  23% /boot
/dev/sdb1             494M  402M   67M  86% /geekpeek

1. Unmount the partition

[root@foo1 ~]# umount /geekpeek/
[root@foo1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_foo-LogVol01
                       13G  4.6G  7.7G  38% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M  105M  355M  23% /boot

2. Delete the partition

[root@foo1 ~]# fdisk /dev/sdb

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').

Command (m for help): d
Selected partition 1

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2dbb9f13

   Device Boot      Start         End      Blocks   Id  System

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

Calling ioctl() to re-read partition table.
Syncing disks.

3. Create a new (larger) partition

[root@foo1 ~]# fdisk /dev/sdb

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').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): 
Using default value 2097151

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2dbb9f13

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2097151     1047552   83  Linux

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

Calling ioctl() to re-read partition table.

We are able to mount the partition at this point, but the filesystem on this partition is only 500MB large. We need to resize the filesystem using resize2fs command in the following steps.
4. Run fsck on your filesystem
[root@foo1 ~]# e2fsck -f /dev/sdb1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 16/130560 files (0.0% non-contiguous), 426988/522080 blocks

5. Resize your filesystem with resize2fs

[root@foo1 ~]# resize2fs /dev/sdb1 
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sdb1 to 1044192 (1k) blocks.
The filesystem on /dev/sdb1 is now 1044192 blocks long.

6. Re-mount extended partition

[root@foo1 ~]# mount /dev/sdb1 /geekpeek/
[root@foo1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_foo-LogVol01
                       13G  4.6G  7.7G  38% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M  105M  355M  23% /boot
/dev/sdb1             988M  402M  536M  43% /geekpeek
Voila! The partition was successfully extended, as we can see all of the data survived! :) Always remember to resize the filesystem with resize2fs.

Reduce a Partition and Filesystem

Reviewing the current disk configuration: Geekpeek mount point is the partition we want to reduce. We can see that the partition has 988MB of available space and 324MB is used by dummy data. We want to reduce the partition to 400MB without loosing data:
[root@foo1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_foo-LogVol01
                       13G  4.6G  7.7G  38% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M  105M  355M  23% /boot
/dev/sdb1             988M  324M  614M  35% /geekpeek

1. Unmount the partition

[root@foo1 ~]# umount /geekpeek/
[root@foo1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_foo-LogVol01
                       13G  4.6G  7.7G  38% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M  105M  355M  23% /boot

2. Run fsck on your filesystem

[root@foo1 ~]# e2fsck -f /dev/sdb1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 15/261120 files (0.0% non-contiguous), 363953/1044192 blocks

 3. Resize the filesystem with resize2fs

[root@foo1 ~]# resize2fs /dev/sdb1 400M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sdb1 to 409600 (1k) blocks.
The filesystem on /dev/sdb1 is now 409600 blocks long.

4. Delete the partition

[root@foo1 ~]# fdisk /dev/sdb

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').

Command (m for help): d
Selected partition 1

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2dbb9f13

   Device Boot      Start         End      Blocks   Id  System

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

Calling ioctl() to re-read partition table.
Syncing disks.

4. Create a new (smaller) partition

[root@foo1 ~]# fdisk /dev/sdb 

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').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +400M 

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2dbb9f13

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          52      417658+  83  Linux

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

Calling ioctl() to re-read partition table.
Syncing disks.

5. Mount the new partition and filesystem

[root@foo1 ~]# mount /dev/sdb1 /geekpeek/
[root@foo1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_foo-LogVol01
                       13G  4.6G  7.7G  38% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M  105M  355M  23% /boot
/dev/sdb1             388M  323M   45M  88% /geekpeek
Voila! The partition was successfully reduced to 400MB, as we can see all of the data survived! :) Always remember to resize the filesystem with resize2fs.


No comments:

Post a Comment

  How to Change Instance Type & Security Group of EC2 in AWS By David Taylor Updated April 29, 2023 EC2 stands for Elastic Compute Cloud...