Problem: A virtual machine has a data disk and it needs to be extended
Enlarge disk in VM tool; might be done online
New disk size is not seen in Linux yet. To avoid a reboot, rescan the disk:
# echo 1 > /sys/class/block/sdb/device/rescan
New size is now available:
# lsblk[...]sdb 8:16 0 2.5T 0 disk
└─sdb1 8:17 0 2T 0 part /home
Check with fdisk:
# fdisk -l /dev/sdbDisk /dev/sdb: 2.5 TiB, 2684354560000 bytes, 5242880000 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 =512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x1451b487
Device Boot Start End Sectors Size Id Type
/dev/sdb1 204841943039994194301952 2T 83 Linux
Parted also looks fine (with a GPT table it would offer me to fix sizes):
# parted /dev/sdbGNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Msft Virtual Disk (scsi)Disk /dev/sdb: 2684GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2147GB 2147GB primary btrfs
(parted) quit
Ok, let’s extend
# fdisk /dev/sdbWelcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
The size of this disk is 2.5 TiB (2684354560000 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
Command (m for help): q
Damn, this machine still uses MSDOS partition table and cannot grow beyond 2TB. Need to convert to GPT first:
Convert to GPT:
# gdisk /dev/sdbGPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q'if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
Command (? for help): p
Disk /dev/sdb: 5242880000 sectors, 2.4 TiB
Model: Virtual Disk
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 148332D1-AD46-47F7-B10A-BE80D0D1DD68
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33First usable sector is 34, last usable sector is 5242879966Partitions will be aligned on 2048-sector boundaries
Total free space is 1048577981 sectors (500.0 GiB)Number Start (sector) End (sector) Size Code Name
120484194303999 2.0 TiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)The operation has completed successfully.
Now extend partition (delete and recreate; first sector must be the same, last sector is more; do not wipe existing file system):
# fdisk /dev/sdbWelcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdb: 2.5 TiB, 2684354560000 bytes, 5242880000 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 =512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 148332D1-AD46-47F7-B10A-BE80D0D1DD68
Device Start End Sectors Size Type
/dev/sdb1 204841943039994194301952 2T Linux filesystem
Command (m for help): d
Selected partition 1Partition 1 has been deleted.
Command (m for help): n
Partition number (1-128, default 1):
First sector (34-5242879966, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P}(2048-5242879966, default 5242879966):
Created a new partition 1 of type 'Linux filesystem' and of size 2.5 TiB.
Partition #1 contains a btrfs signature.Do you want to remove the signature? [Y]es/[N]o: n
Command (m for help): p
Disk /dev/sdb: 2.5 TiB, 2684354560000 bytes, 5242880000 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 =512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 148332D1-AD46-47F7-B10A-BE80D0D1DD68
Device Start End Sectors Size Type
/dev/sdb1 204852428799665242877919 2.5T Linux filesystem
Command (m for help): w
The partition table has been altered.
Syncing disks.
Check with lsblk again:
# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
[...]sdb 8:16 0 2.5T 0 disk
└─sdb1 8:17 0 2.5T 0 part /home
Resize filesystem (it is a btrfs):
# btrfs fi resize max /homeResize '/home' of 'max'
Check size:
# df -h /homeFilesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.5T 1.9T 610G 76% /home