Resizing an iSCSI EXT3 disk, partition, and file system
- Details
- Category: Linux stuff
A client of mine uses an iSCSI target to back up databases on Oracle Enterprise Linux production machines.
Great concept - until the disk runs out of space and the admins want to take down the server to fix that. Ahum? Take the server offline for a backup drive? Come on, there's got to be a better way. And there is.
The admins' way was:
- create a new iSCSI target and connect to it
- move the data from the old mounted drive to the new one
- mount the new drive as /u04
That took ages (moving a few TB just takes a while - especially if the iSCSI target is a not-overl;y-fast device... it's for backups, you know, so why spend the money)
I figured there had to be a faster way. And there is (we'll use /dev/sdc1 with /u04 as mount point in our example):
- unmount the iSCSI device:
> umount /u04 - turn off journalling on the partition, making it a ext2 partition
> tune2fs -O ^has_journal /dev/sdc1 - disconnect from it
> iscsiadm -m node -T <iscsi target path> -p <iscsi host> --logout - resize the target on the target system (ie. in the SAN console)
- log back into the iscsi target
> iscsiadm -m node -T <iscsi target path> -p <iscsi host> --login - use fdisk to delete and recreate the partition table (scary, I know)
> fdisk /dev/sdc
Command (m for help): p
=> write down start- and end-cylinder of the existing partition
=> now delete the partition (1, in our case):
Command (m for help): d
Partition number (1-5): 1
=> Now we re-create the partition (phew!)
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-32267, default 1): 1
=> take the first cylinder from what your wrote down. Most likely it'll be "1"
Last cylinder or +size or +sizeM or +sizeK (1-32268, default 32268): 32268
=> depends on what you want, but usually you'll want the default here (largest)
Now make sure that you set up the right things:
Command (m for help): p
Command (m for help): p
Disk /dev/sdc: 268.7 GB, 268703891456 bytes
255 heads, 63 sectors/track, 32668 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System
/dev/sdc1 1 32668 262405678+ 83 Linux
Looking good? Then write the partition table changes to disk.Command (m for help): w
The partition table has been altered!
FDisk will complain about the re-reading the table, but we'll work around that in a minute so we don't need a reboot (that WAS the objective right?!) - Repeat steps 3 and 5 (the --logout / --login steps) to get the disk re-read
- Run fsck to check the filesystem for errors (needs to be done)
> fsck -n /dev/sdc1 - use resize2fs to resize the partition's file system
>resize2fs /dev/sdc1 - turn journalling back on
>tune2fs -j /dev/sdc1 - pray
>Root Admin, whou thou art at the keyboard, protect this humble consultant's butt, etc etc - mount the partition (we're lazy, so we'll do a -a)
>mount -a
Admittedly - a lot more steps, but without the moving of data, it's a heck of a lot faster.