After you resize disks of Linux instances by extending disk capacity in the Elastic Compute Service (ECS) console, you must extend partitions and file systems on the disks in the instance operating systems for the new disk capacity to take effect. In specific early versions of Linux operating systems, partitions and file systems on disks cannot be extended online by using tools such as growpart. In this case, you must extend the disk partitions and file systems offline in the instance operating systems. A disk is online when it is in the Mount state, and is offline when it is in the Umount state. This topic describes how to offline extend partitions and file systems on a data disk of a Linux instance.
Prerequisites
- A snapshot is created for a data disk of a Linux instance.
To prevent data loss caused by accidental changes, we recommend that you create a snapshot to back up your data. For more information, see Create a snapshot of a disk.
- The data disk is resized in the ECS console.
If the data disk is not resized, perform the operations that are described in Step 1: Resize a disk to extend its capacity to resize the data disk by extending its capacity.
- Connect to an ECS instance.
For more information about connection methods, see Connection methods.
Background information
In the examples of this topic, the following configurations are used:- Operating system of the instance: Alibaba Cloud Linux 2.1903 LTS 64-bit public image
- Data disk: ultra disk
- Device name of the data disk: /dev/vdb
Adjust the commands or parameter settings based on the actual operating system and device name of your data disk.
Check the partition format and the file system type
- Run the following command to check the partition format of the data disk:
sudo fdisk -lu /dev/vdb
In this example, the disk has a partition named /dev/vdb1.- If the disk uses the master boot record (MBR) partition format, the value of
System
isLinux
. - If the disk uses the GUID Partition Table (GPT) partition format, the value of
System
isGPT
.
[testuser@ecshost ~]# sudo fdisk -lu /dev/vdb Disk /dev/vdb: 42.9 GB, 42949672960 bytes, 83886080 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 label type: dos Disk identifier: 0x9277b47b Device Boot Start End Blocks Id System /dev/vdb1 2048 41943039 20970496 83 Linux
- If the disk uses the master boot record (MBR) partition format, the value of
- Run the following command to check the file system type of the partition:
blkid /dev/vdb1
In this example, the file system type of /dev/vdb1 is ext4.[testuser@ecshost ~]# blkid /dev/vdb1 /dev/vdb1: UUID="e97bf1e2-fc84-4c11-9652-73********24" TYPE="ext4"
Note If the data disk does not have partitions or file systems or if the data disk has partitions but no file systems, no results are returned. - Run one of the following commands to check the status of the file system.
- To check the status of an ext file system, run the following command:
sudo e2fsck -n /dev/vdb1
- To check the status of an xfs file system, run the following command:
sudo xfs_repair -n /dev/vdb1
- To check the status of a btrfs file system, run the following command:
sudo btrfsck /dev/vdb1
Different command outputs are returned for different types of file systems.- The following code provides a sample command output for an ext or xfs file system. If the file system works as expected, clean is returned in the command output. If clean is not returned, troubleshoot the issue.
[testuser@ecshost ~]# sudo e2fsck -n /dev/vdb1 Warning! /dev/vdb1 is mounted. Warning: skipping journal recovery because doing a read-only filesystem check. /dev/vdb1: clean, 11/1310720 files, 126322/5242624 blocks
- The following code provides a sample command output for a btrfs file system. found 114688 bytes used err is 0 indicates that the file system works as expected. If an error is returned in the command output, troubleshoot the issue.
[testuser@ecshost ~]# sudo btrfsck /dev/vdb1 Checking filesystem on /dev/vdb1 UUID: 1234b7a7-68ff-4f48-a88c-8943f27f1234 checking extents checking free space cache checking fs roots checking csums checking root refs found 114688 bytes used err is 0 total csum bytes: 0 total tree bytes: 114688 total fs tree bytes: 32768 total extent tree bytes: 16384 btree space waste bytes: 109471 file data blocks allocated: 0 referenced 0
- To check the status of an ext file system, run the following command:
Choose a method to extend partitions or file systems
Choose an extend method based on the partition format and the file system type.
Scenario | Extend method |
---|---|
The data disk has partitions and file systems. |
|
The new data disk does not have partitions or file systems. | After you resize the data disk in the ECS console, perform the operations described in Initialize a data disk whose size does not exceed 2 TiB on a Linux instance or Initialize a data disk that is larger than 2 TiB in size. |
The raw data disk has a file system but no partitions. | After you resize the data disk in the ECS console, perform the operations described in Option 5: Extend the file system of a raw data disk. |
The data disk is not attached to an instance. | After you attach the data disk to an instance, perform the operations described in this topic to extend partitions and files systems on the data disk. |
- If a data disk contains an MBR partition, the data disk cannot be resized to 2 TiB or larger. To prevent data loss, we recommend that you create a disk larger than 2 TiB in size, format the new disk to GPT, and then copy the data in the MBR partition to a GPT partition on the new disk. For more information, see Initialize a data disk that is larger than 2 TiB in size.
- If data disks cannot be resized due to issues with the resize or format tool, you can upgrade the tool to a later version or re-install the tool.
Option 1: Extend existing MBR partitions
- If the instance kernel version is earlier than 3.6, unmount the partition, modify the partition table, and then extend the file system.
- If the instance kernel version is 3.6 or later, modify the partition table, notify the kernel to update the partition table, and then extend the file system.
Perform the following operations to extend an existing MBR partition:
- Modify the partition table.
- Extend the file system.
- If the file system type is ext such as ext3 or ext4, run the following commands in sequence to extend the file system and remount the partition.
Run the following command to extend the file system:
sudo resize2fs /dev/vdb1
Run the following command to mount the partition to /mnt:
sudo mount /dev/vdb1 /mnt
- If the file system type is xfs, run the following commands in sequence to remount the partition and then extend the file system.
Run the following command to mount the partition to /mnt:
sudo mount /dev/vdb1 /mnt
Run the following command to extend the file system:
sudo xfs_growfs /mnt
Note The new version xfs_growfs identifies the device to extend based on the mount point. Example:xfs_growfs /mnt
. You can run thexfs_growfs --help
command to check how to use xfs_growfs of different versions. - If the file system type is btrfs, run the following commands in sequence to remount the partition and then extend the file system. Run the following command to mount the partition to /mnt:
sudo mount /dev/vdb1 /mnt
Run the following command to extend the file system:sudo btrfs filesystem resize max /mnt
- If the file system type is ext such as ext3 or ext4, run the following commands in sequence to extend the file system and remount the partition.
Option 2: Create and format MBR partitions
Perform the following operations to create more MBR partitions:
- Run the following command to create a partition:
sudo fdisk -u /dev/vdb
The following sample code demonstrates how to create a partition. In this example, a 20 GiB partition named /dev/vdb2 is created.
[testuser@ecshost ~]# sudo fdisk -u /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write commad. Command (m for help): p Disk /dev/vdb: 42.9 GB, 42949672960 bytes, 83886080 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 label type: dos Disk identifier: 0x2b31a2a3 Device Boot Start End Blocks Id System /dev/vdb1 2048 41943039 20970496 83 Linux Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (41943040-83886079, default 41943040): Using default value 41943040 Last sector, +sectors or +size{K,M,G} (41943040-83886079, default 83886079): Using default value 83886079 Partition 2 of type Linux and of size 20 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
- Run the following command to view the partition:
lsblk /dev/vdb
A command output similar to the following one is returned:
[testuser@ecshost ~]# lsblk /dev/vdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vdb 253:16 0 40G 0 disk ├─vdb1 253:17 0 20G 0 part └─vdb2 253:18 0 20G 0 part
- Run one of the following commands to create a file system.
- To create an ext4 file system, run the following command:
sudo mkfs.ext4 /dev/vdb2
- To create an xfs file system, run the following command:
sudo mkfs.xfs -f /dev/vdb2
- To create a btrfs file system, run the following command:
sudo mkfs.btrfs /dev/vdb2
- To create an ext4 file system, run the following command:
- Run the following command to view the information about the file system:
blkid /dev/vdb2
A command output similar to the following one is returned:[testuser@ecshost ~]# blkid /dev/vdb2 /dev/vdb2: UUID="e3f336dc-d534-4fdd-****-b6ff1a55bdbb" TYPE="ext4"
- Run the following command to mount the partition:
sudo mount /dev/vdb2 /mnt
- Run the following command to view the space and usage of the data disk:
df -h
A command output similar to the following one is returned. In the command output, the information about the new file system is displayed, indicating that the partition is mounted:[testuser@ecshost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.6G 36G 5% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 460K 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vdb2 9.8G 37M 9.2G 1% /mnt tmpfs 783M 0 783M 0% /run/user/0
Option 3: Extend existing GPT partitions
Perform the following operations to extend an existing GPT partition:
- View the mount path of the data disk. Unmount the partition based on the returned path, and wait until the partition is unmounted. Run the following command to view mount information:
mount | grep "/dev/vdb"
Run the following command to unmount the /dev/vdb data disk:sudo umount /dev/vdb1
Run the following command to check whether the data disk is unmounted:mount | grep "/dev/vdb"
A command output similar to the following one is returned:
[testuser@ecshost ~]# mount | grep "/dev/vdb" /dev/vdb1 on /mnt type ext4 (rw,relatime,data=ordered) [testuser@ecshost ~]# sudo umount /dev/vdb1 [testuser@ecshost ~]# mount | grep "/dev/vdb"
- Use Parted to allocate capacity for the existing GPT partition. The following sample code demonstrates how to perform the preceding steps:
[testuser@ecshost ~]# sudo parted /dev/vdb GNU Parted 3.1 Using /dev/vdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? Fix Warning: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 4294967296 blocks) or continue with the current setting? Fix/Ignore? Fix Model: Virtio Block Device (virtblk) Disk /dev/vdb: 3299GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1100GB 1100GB ext4 primary (parted) rm 1 (parted) mkpart primary 1049kB 100% (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 3299GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 3299GB 3299GB ext4 primary (parted) quit Information: You may need to update /etc/fstab.
- Run the following command to check the file system for consistency:
sudo fsck -f /dev/vdb1
A command output similar to the following one is returned:
[testuser@ecshost ~]# sudo fsck -f /dev/vdb1 fsck from util-linux 2.23.2 e2fsck 1.43.5 (04-Aug-2017) 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/vdb1: 11/67108864 files (0.0% non-contiguous), 4265369/268434944 blocks
- Extend the file system that corresponds to the partition, and remount the partition.
- ext file system such as ext3 or ext4Run the following command to extend the file system of the new partition:
sudo resize2fs /dev/vdb1
Run the following command to remount the partition:sudo mount /dev/vdb1 /mnt
- xfs file systemRun the following command to remount the partition:
sudo mount /dev/vdb1 /mnt
Run the following command to extend the file system:sudo xfs_growfs /mnt
Note The new version xfs_growfs identifies the device to extend based on the mount point. Example:xfs_growfs /mnt
. You can run thexfs_growfs --help
command to check how to use xfs_growfs of different versions. - btrfs file systemRun the following command to remount the partition:
sudo mount /dev/vdb1 /mnt
Run the following command to extend the file system:sudo btrfs filesystem resize max /mnt
- ext file system such as ext3 or ext4
Option 4: Create and format GPT partitions
Perform the following operations to create more GPT partitions. In this example, a 32 TiB data disk is used. The disk has a 4.8 TiB /dev/vdb1 partition, and a new /dev/vdb2 partition is to be created.
- Run the following command to view the information of existing partitions on the data disk:
sudo fdisk -l
A command output similar to the following one is returned:
[testuser@ecshost ~]# sudo fdisk -l Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 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 label type: dos Disk identifier: 0x000b1b45 Device Boot Start End Blocks Id System /dev/vda1 * 2048 83875364 41936658+ 83 Linux WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/vdb: 35184.4 GB, 35184372088832 bytes, 68719476736 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 label type: gpt Disk identifier: BCE92401-F427-45CC-8B0D-B30EDF279C2F # Start End Size Type Name 1 2048 10307921919 4.8T Microsoft basic mnt
- Use Parted to create a partition and allocate capacity for the partition.
- Run one of the following commands to create a file system for the new partition.
- To create an ext4 file system, run the following command:
sudo mkfs.ext4 /dev/vdb2
- To create an ext3 file system, run the following command:
sudo mkfs.ext3 /dev/vdb2
- To create an xfs file system, run the following command:
sudo mkfs.xfs -f /dev/vdb2
- To create a btrfs file system, run the following command:
sudo mkfs.btrfs /dev/vdb2
[testuser@ecshost ~]# sudo mkfs -t xfs /dev/vdb2 meta-data=/dev/vdb2 isize=512 agcount=28, agsize=268435455 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=7301444096, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=521728, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
- To create an ext4 file system, run the following command:
- Run the following command to view the changes to the partition capacity:
sudo fdisk -l
A command output similar to the following one is returned:
[testuser@ecshost ~]# sudo fdisk -l Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 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 label type: dos Disk identifier: 0x000b1b45 Device Boot Start End Blocks Id System /dev/vda1 * 2048 83875364 41936658+ 83 Linux WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/vdb: 35184.4 GB, 35184372088832 bytes, 68719476736 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 label type: gpt Disk identifier: BCE92401-F427-45CC-8B0D-B30EDF279C2F # Start End Size Type Name 1 2048 10307921919 4.8T Microsoft basic mnt 2 10307921920 68719474687 27.2T Microsoft basic test
- Run the following command to view the types of file system:
blkid
A command output similar to the following one is returned:
[testuser@ecshost ~]# blkid /dev/vda1: UUID="ed95c595-4813-480e-****-85b1347842e8" TYPE="ext4" /dev/vdb1: UUID="21e91bbc-7bca-4c08-****-88d5b3a2303d" TYPE="ext4" PARTLABEL="mnt" PARTUUID="576235e0-5e04-4b76-****-741cbc7e98cb" /dev/vdb2: UUID="a7dcde59-8f0f-4193-****-362a27192fb1" TYPE="xfs" PARTLABEL="test" PARTUUID="464a9fa9-3933-4365-****-c42de62d2864"
- Run the following command to mount the new partition:
sudo mount /dev/vdb2 /mnt
Option 5: Extend the file system of a raw data disk
If a raw data disk contains a file system but no partitions, perform the following operations to extend the file system.
- Run the following command to view the type of file system:
df -Th
A command output similar to the following one is returned. In this example, the file system type of /dev/vdb is xfs.[testuser@ecshost ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 434M 0 434M 0% /dev tmpfs tmpfs 446M 0 446M 0% /dev/shm tmpfs tmpfs 446M 524K 446M 1% /run tmpfs tmpfs 446M 0 446M 0% /sys/fs/cgroup /dev/vda1 ext4 20G 2.5G 17G 14% / tmpfs tmpfs 90M 0 90M 0% /run/user/0 /dev/vdb xfs 20G 53M 20G 1% /mnt
- Extend the file system based on the file system type.
- xfs file systemIf the file system type is xfs, run the following xfs_growfs command to extend the file system:
In the preceding command,sudo xfs_growfs /mnt
/mnt
is the mount point of the file system.Note The new version xfs_growfs identifies the device to extend based on the mount point. Example:xfs_growfs /mnt
. You can run thexfs_growfs --help
command to check how to use xfs_growfs of different versions. - ext and btrfs file systems
- Run the following command to view mount information:
mount | grep "/dev/vdb"
- Run the following command to unmount the /dev/vdb data disk:
sudo umount /dev/vdb
- Run the following command to check whether the data disk is unmounted:
A command output similar to the following one is returned:mount | grep "/dev/vdb"
[testuser@ecshost ~]# mount | grep "/dev/vdb" /dev/vdb on /mnt type ext4 (rw,relatime,data=ordered) [testuser@ecshost ~]# sudo umount /dev/vdb [testuser@ecshost ~]# mount | grep "/dev/vdb"
- Extend the file system.
- If the file system type is ext, run the following resize2fs command to extend the file system:
sudo resize2fs /dev/vdb
- If the file system type is btrfs, run the following btrfs command to extend the file system:
In the preceding command,sudo btrfs filesystem resize max /mnt
/mnt
is the mount point of the file system.
- If the file system type is ext, run the following resize2fs command to extend the file system:
- Run the following command to mount the disk to the mount point:
sudo mount /dev/vdb /mnt
- Run the following command to view mount information:
- xfs file system
- Run the
df -h
command to check whether the file system is extended:df -Th
A command output similar to the following one is returned. The command output shows that the file system has a larger capacity, which indicates that the file system is extended.[testuser@ecshost ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 434M 0 434M 0% /dev tmpfs tmpfs 446M 0 446M 0% /dev/shm tmpfs tmpfs 446M 524K 446M 1% /run tmpfs tmpfs 446M 0 446M 0% /sys/fs/cgroup /dev/vda1 ext4 20G 2.5G 17G 14% / tmpfs tmpfs 90M 0 90M 0% /run/user/0 /dev/vdb xfs 30G 63M 30G 1% /mnt