X

News, tips, partners, and perspectives for Oracle’s virtualization offerings

Extending boot partition after export VirtualBox VM to OCI

Valery Portnyagin
Senior Developer

Preface

Quotation from OCI documentation:

"When you create a new virtual machine (VM) instance or bare metal instance based on an Oracle-provided image or custom image, you have the option of specifying a custom boot volume size. You can also expand the size of the boot volume for an existing instance; see Resizing a Volume for more information. In order to take advantage of the larger size, you need to extend the partition for the boot volume.

Starting point

Why do I want to write it here? Because the most OCI users like any other cloud users are just the people that don’t want to poke around the special OS administrative tasks and prefer to use a virtual machine without tuning it. I also belong to this group of users. What I need is an article with clear and correct explanation how to solve my issue step by step. Here, I try to cover this goal.

I wanna to describe my experience with three general cases:

  • OCI utility oci_growfs and disk with XFS filesystem;
  • Utility resize2fs and disk with ext4 filesystem;
  • disk using LVM and utility "xfs_growfs".

OCI instances uses XFS filesystem as the default. At least, I haven’t seen any other filesystems used for a boot volume if you don’t use a custom image as a boot volume. But the article named “Extending boot partition after export VM to OCI”. So why do I talk about XFS and the default filesystem used for a boot volume in OCI? Because it’s doesn’t matter. You can use any filesystems on your local VMs with any size but after export to OCI you will need to do the similar steps described in this article. And these three scenarios cover the most part of use cases in OCI:

  • The example with the utility “oci_growfs” is the default approach which may be used for any standard OCI instances.
  • The example with the utility “resize2fs” and disk with ext4 filesystem is the common use case because the ext4 filesystem is the default filesystem for the most Linux OSs.
  • The example with disk using LVM is important due to the distinct structure of storage. The type of filesystem is less important here, but in the example the filesystem XFS is used. That's why the utility "xfs_growfs" is used here.
NB! I'm not going to dive into all the details related to LVM or XFS. I just show what I had in the beginning, what I did and what I got in the end.

Extending partition using utility oci-growfs

OCI documentation advises to use the utility oci-growfs to extend a boot partition - https://docs.oracle.com/en-us/iaas/Content/Compute/References/oci-growfs.htm#ocigrowfs

If your instance is a standard OCI instance it would be the easiest way. I did it and there were no problems with it. There was one obscure point regarding how the utility “fdisk” displayed partition information.

Initially, the instance had 150GB boot volume, but the “df -h” shown only 39GB, the SWAP partition wasn’t displayed but the SWAP size was 8GB. So, sum up, we have about 50GB used by the boot volume:

$ df -h
Filesystem   Size   Used   Avail   Use%   Mounted on
devtmpfs     7,6G    0     7,6G     0%     /dev
tmpfs        7,6G    0     7,6G     0%     /dev/shm
tmpfs        7,6G   41M    7,6G     1%     /run
tmpfs        7,6G    0     7,6G     0%     /sys/fs/cgroup
/dev/sda3    39G    3,2G   36G      9%     /
/dev/sda1    200M   8,6M   192M     5%     /boot/efi
tmpfs        1,6G    0     1,6G     0%     /run/user/0
tmpfs        1,6G    0     1,6G     0%     /run/user/994
tmpfs        1,6G    0     1,6G     0%     /run/user/1000

What the “fdisk -l” shown:

$ sudo fdisk -l
Disk /dev/sda: 161.1 GB, 161061273600 bytes, 314572800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: dos
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 1 97677311 48838655+ ee GPT
Partition 1 does not start on physical sector boundary.

The strange item here was that not all partitions were displayed and the sentence “Partition 1 does not start on physical sector boundary.” was in the output. I have no clear explanation for this. Ok, just try to continue, look what the filesystem type was on the /dev/sda3:

$ sudo file -L -s /dev/sda3
/dev/sda3: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

It was the XFS filesystem which OCI uses for the standard instances.

Some initial information we have and now try to run the utility “oci-growfs”. This is the standard utility and it’s located in the folder “/usr/libexec”.

$ sudo /usr/libexec/oci-growfs
CHANGE: partition=3 start=17188864 old: size=80486400 end=97675264 new: size=297383902 end=314572766
Confirm? [y/n]y
CHANGED: partition=3 start=17188864 old: size=80486400 end=97675264 new: size=297383902 end=314572766
meta-data=/dev/sda3      isize=256     agcount=4, agsize=2515200 blks
         =               sectsz=4096   attr=2, projid32bit=1
         =               crc=0         finobt=0, sparse=0, rmapbt=0
         =               reflink=0
data     =               bsize=4096    blocks=10060800, imaxpct=25
         =               sunit=0       swidth=0 blks
naming   = version 2     bsize=4096    ascii-ci=0, ftype=1
log      = internal log  bsize=4096    blocks=4912, version=2
         = sectsz=4096   sunit=1       blks, lazy-count=1
realtime = none          extsz=4096    blocks=0, rtextents=0

data blocks changed from 10060800 to 37172987

The result looked good. The size changed - “data blocks changed from 10060800 to 37172987”.

Let’s look what we have:

$ sudo fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sda: 161.1 GB, 161061273600 bytes, 314572800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: gpt
Disk identifier: B1BAD63A-5E10-47EF-93D1-57E1A5BC89CB

# Start     End        Size    Type              Name
1 2048      411647     200M    EFI System        EFI System Partition
2 411648    17188863   8G      Linux             swap
3 17188864  314572765  141,8G  Microsoft basic 

Firstly, you may notice that all partitions were displayed and there weren’t the sentence “Partition 1 does not start on physical sector boundary”. It means the utility fixed some minor error with the sectors boundary.

Secondly, the odd item that the partition 3 was shown as “Microsoft basic”. Some explanation can be found here – http://www.rodsbooks.com/linux-fs-code. Briefly, It’s not the real problem which user should bother.

Look what the “df -h” and “lsblk” show:

$ df -h
Filesystem   Size   Used   Avail   Use%   Mounted on
devtmpfs     7,6G    0     7,6G     0%     /dev
tmpfs        7,6G    0     7,6G     0%     /dev/shm
tmpfs        7,6G   41M    7,6G     1%     /run
tmpfs        7,6G    0     7,6G     0%     /sys/fs/cgroup
/dev/sda3    142G   3,2G   139G     3%     /
/dev/sda1    200M   8,6M   192M     5%     /boot/efi
tmpfs        1,6G    0     1,6G     0%     /run/user/0
tmpfs        1,6G    0     1,6G     0%     /run/user/994
tmpfs        1,6G    0     1,6G     0%     /run/user/1000
$ lsblk
NAME    MAJ:MIN RM   SIZE   RO   TYPE    MOUNTPOINT
sda       8:0    0   150G   0    disk
├─sda2    8:2    0   8G     0    part    [SWAP]
├─sda3    8:3    0   141,8G 0    part    /
└─sda1    8:1    0   200M   0    part    /boot/efi

Both utilities display the actual information about the root filesystem with the correct size.

NB! There is no need to unmount the extended partition or SWAP partition or reboot the instance. It’s important in some cases.

 Extending partition using utility resize2fs

In this case there was a standard disk 50GB with ext4 filesystem which was needed to extend. SWAP partition existed too, but here it followed the root partition. And the chain of actions is different and little bit harder because it’s needed to turn off swap feature temporary and delete SWAP partition to combine free space with the partition containing the root filesystem.

$ lsblk
NAME     MAJ:MIN   RM   SIZE   RO   TYPE   MOUNTPOINT
sda        8:0     0    50G    0    disk
|-sda1     8:1     0    7G     0    part   /<-7GB, but 50GB in reality
`-sda2     8:2     0    1G     0    part   [SWAP]
$ df -h
Filesystem   Size   Used   Avail  Use%   Mounted on
devtmpfs     15G    0      15G    0%     /dev
tmpfs        15G    0      15G    0%     /dev/shm
tmpfs        15G    8.5M   15G    1%     /run
tmpfs        15G    0      15G    0%     /sys/fs/cgroup
/dev/sda1    6.9G   6.8G   0      100%   /<-7GB, but 50GB in reality
tmpfs        3.0G   0      3.0G   0%     /run/user/1000

Initial information

Using utility Parted

Getting information about the partitions sizes and free space. Run Parted, convert displaying size from “bytes” to “sectors”

$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) unit s
(parted) print free
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 104857600s
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start      End        Size       Type     File system     Flags
       2s         2047s      2046s                               Free Space
1      2048s      14680063s  14678016s  primary  ext4 boot
2      14680064s  16777215s  2097152s   primary  linux-swap(v1)
       16777216s  104857599s 88080384s                           Free Space

It’s seen that the Free Space occupies 88080384 sectors.

Using utility fdisk

$ sudo fdisk -l
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disklabel type: dos
Disk identifier: 0xc352c342

Device      Boot   Start     End       Sectors   Size  Id   Type
/dev/sda1   *      2048      14680063  14678016   7G   83   Linux
/dev/sda2          14680064  16777215  2097152    1G   82   Linux swap / Solaris

It’s seen that the whole size of disk /dev/sda is 50GB.

Turn off swap

To use the available free space we need to turn off the swap.

$ sudo swapoff -a
$ lsblk
NAME    MAJ:MIN   RM   SIZE   RO   TYPE   MOUNTPOINT
sda       8:0     0    50G    0    disk
|-sda1    8:1     0    7G     0    part
`-sda2    8:2     0    1G     0    part

It’s seen that the “lsblk” doesn’t mark /dev/sda2 as SWAP partition.

Using fdisk

Display free space on the disk

$ sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): F
Unpartitioned space /dev/sda: 42 GiB, 45097156608 bytes, 88080384 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
Start     End        Sectors   Size
16777216  104857599  88080384  42G

Display information about partitions

Information about /dev/sda2

Command (m for help): i
Partition number (1,2, default 2): 2
Device: /dev/sda2
Start: 14680064
End: 16777215
Sectors: 2097152
Cylinders: 4113
Size: 1G
Id: 82
Type: Linux swap / Solaris
Start-C/H/S: 1023/254/2
End-C/H/S: 1023/254/2

Information about /dev/sda1

Command (m for help): i
Partition number (1,2, default 2): 1
Device: /dev/sda1
Boot: *
Start: 2048
End: 14680063
Sectors: 14678016
Cylinders: 28781
Size: 7G
Id: 83
Type: Linux
Start-C/H/S: 4/4/1
End-C/H/S: 1023/254/2
Attrs: 80

Deletion partitions

Now we are ready to delete partitions.

Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

We deleted both partitions, not only SWAP partition.

General information now:

Command (m for help): p
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disklabel type: dos
Disk identifier: 0xc352c342

There are no any partitions.

Now we are ready to create 2 new partitions – first primary partition (48GB) and second SWAP partition (2 GB).

Creation new primary partition with size 48GB

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p

Partition number (1-4, default 1): 1 
First sector (2048-104857599, default 2048): 2048 
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +48G 
Created a new partition 1 of type 'Linux' and of size 48 GiB.

Partition #1 contains a ext4 signature. 
Do you want to remove the signature? [Y]es/[N]o: n

It’s possible to set the size in GB not in sectors. Here “+48G” is the size of new primary partition.

Mark partition 1 as bootable

Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.

Creation partition 2 with size 2GB

Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (100665344-104857599, default 100665344):
Last sector, +sectors or +size{K,M,G,T,P} (100665344-104857599, default 104857599):

Created a new partition 2 of type 'Linux' and of size 2 GiB.

Mark partition 2 as SWAP

Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Save settings and exit

Command (m for help): w
The partition table has been altered.
Syncing disks.

Disk extension without unmounting and rebooting

After creation new partitions with 48GB and 2GB the system still hasn’t seen the changes. The standard approach is to reboot the system. But we’ll try to avoid this step because the Linux starting from 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.

$ df -h
Filesystem    Size   Used    Avail  Use%    Mounted on
devtmpfs      15G     0      15G    0%      /dev
tmpfs         15G     0      15G    0%      /dev/shm
tmpfs         15G     8.5M   15G    1%      /run 
tmpfs         15G     0      15G    0%      /sys/fs/cgroup 
/dev/sda1     6.9G    6.8G   0      100%    / <---still 7GB 
tmpfs         3.0G    0      3.0G   0%      /run/user/1000

The “df -h” still displays /dev/sda1 wit the size 7GB.

Run partprobe

From partprobe documentation:”partprobe is a program that informs the operating system kernel of partition table changes, by requesting that the operating system re-read the partition table.”. This quote explains all about this utility. Nothing to add.

$ partprobe

The partprobe doesn’t issue any messages in the case of success.

Run resize2fs

Run the command “sudo resize2fs /dev/sda1”. Our root filesystem has still mounted on /dev/sda1. Our goal here is to expand the root filesystem on the whole partition /dev/sda1.

$ sudo resize2fs /dev/sda1
resize2fs 1.45.4 (23-Sep-2019)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 6
The filesystem on /dev/sda1 is now 12582912 (4k) blocks long.

All looks good – no warnings, cautions, errors.

Mount back swap

The partition /dev/sda2 is used as the swap partition again.

Run the command “sudo mkswap /dev/sda2”:

$ sudo mkswap /dev/sda2
Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)
no label, UUID=7e3edc09-b016-4a72-a8d2-f5f374874ad6

Remembering the UUID of new partitions

Run the command “lsblk -o +uuid”:

$ lsblk -o +uuid,name
NAME     MAJ:MIN  RM  SIZE  RO  TYPE   MOUNTPOINT UUID
sda        8:0    0   50G   0   disk   
|-sda1     8:1    0   48G   0   part   /          e8c76f86-3ec5-4cf6-b3c2-d19d5cd53e21
`-sda2     8:2    0   2G    0   part   [SWAP]     7e3edc09-b016-4a72-a8d2-f5f374874ad6

Updating UUIDs in /etc/fstab

To keep the changes after rebooting we are going to update the file /etc/fstab. Update the UUIDs for the appropriate mount points.

$ cat /etc/fstab
UUID=e8c76f86-3ec5-4cf6-b3c2-d19d5cd53e21 / ext4 defaults 1 1
UUID=7e3edc09-b016-4a72-a8d2-f5f374874ad6 swap swap defaults 0 0

Turn on swap

$ sudo swapon -a

The final results

$ df -h
Filesystem   Size  Used   Avail Use%  Mounted on
devtmpfs     15G    0     15G   0%    /dev
tmpfs        15G    0     15G   0%    /dev/shm
tmpfs        15G    8.5M  15G   1%    /run
tmpfs        15G    0     15G   0%    /sys/fs/cgroup
/dev/sda1    48G    6.9G  39G   16%   / <------the correct size 48GB
tmpfs        3.0G   0     3.0G  0%    /run/user/1000

The size of the partition /dev/sda1 is correct and occupies 48GB.

$ lsblk
NAME    MAJ:MIN  RM  SIZE  RO   TYPE   MOUNTPOINT
sda       8:0    0   50G   0    disk
|-sda1    8:1    0   48G   0    part   /
`-sda2    8:2    0   2G    0    part   [SWAP]

The partition /dev/sda2 marked as SWAP.

Extending partition using LVM

Initially it was a boot disk with 100GB size. But the command “df -h” displayed only 30GB size:

$ df -h
Filesystem                  Size  Used Avail   Use%   Mounted on
devtmpfs                    32G    0     32G   0%     /dev
tmpfs                       32G    0     32G   0%     /dev/shm
tmpfs                       32G    145M  32G   1%     /run
tmpfs                       32G    0     32G   0%     /sys/fs/cgroup
/dev/mapper/ocivolume-root  30G    14G   16G   46%    / <--30GB, but 100GB in reality
/dev/mapper/ocivolume-oled  10G    143M  9.9G  2%     /var/oled
/dev/sda2                   1014M  409M  606M  41%    /boot
/dev/sda1                   100M   5.7M  95M   6%     /boot/efi
tmpfs                       6.3G   0     6.3G  0%     /run/user/988
/dev/sdb                    1007G  5.7G  951G  1%     /mnt/data
tmpfs                       6.3G   0     6.3G  0%     /run/user/1000

Which partitions are used by LVM? The command “lsblk” says us about it:

$ lsblk -f
NAME               FSTYPE  LABEL      UUID                                    MOUNTPOINT
sda
|-sda1             vfat               E347-11BF                               /boot/efi
|-sda2             xfs                c4e0f271-8199-48e8-b520-dea2c4de655b    /boot
`-sda3                   LVM2_member  lUcAyE-ZeQe-pZj5-0Zf8-LcSt-TEfV-msghca
 |-ocivolume-root  xfs                a71d0599-3867-4163-9dff-d61a44b36407    /
 `-ocivolume-oled  xfs                626b14d7-fb2f-4678-8a16-64deca22d002    /var/oled

The formatting isn't ideal but it's seen that the partition sda3 is under LVM control. So we will work with the disk /dev/sda below.

Using the utility Parted

Run Parted

$ sudo parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra 112037888 blocks) or continue with the current setting?
Fix/Ignore? f
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number   Start    End     Size    File system  Name                  Flags
1        1049kB   106MB   105MB   fat16        EFI System Partition  boot, esp
2        106MB    1180MB  1074MB  xfs
3        1180MB   43.1GB  41.9GB  lvm

We see that /dev/sda has the size 107GB. Again if we sum the values from the column “Size” it’s clear that the half part of disk isn’t used (41.9GB + 1074MB + 105MB isn’t equal 107GB).

Converting the size from bytes to sectors

Using dimension “sectors” instead of “bytes” is more convenient for our task because much easy in calculation.

(parted) unit s
(parted) print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 209715200s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number      Start      End        Size      File system    Name                  Flags
1           2048s      206847s    204800s   fat16          EFI System Partition  boot, esp
2           206848s    2303999s   2097152s  xfs
3           2304000s   84223999s  81920000s lvm

Display the free space

(parted) print free
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 209715200s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number   Start      End         Size        File system    Name                  Flags
1        2048s      206847s     204800s     fat16          EFI System Partition  boot, esp
2        206848s    2303999s    2097152s    xfs
3        2304000s   84223999s   81920000s   lvm
         84224000s  209715166s  125491167s                 Free Space

You notice that now we observe a new line in the end containing the words “Free space”. It’s exactly those unused space which we are going to join to the original partition 3.

Deletion LVM partition

To combine the partition 3 and free space it ‘s needed to delete the partition 3 at first. It's not the join in reality, we’ll create new partition that span all free space on the disk.

(parted) rm 3
Error: Partition(s) 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.

Print free space

(parted) print free
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 209715200s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number     Start     End         Size       File system  Name                  Flags
1          2048s     206847s     204800s    fat16        EFI System Partition  boot, esp
2          206848s   2303999s    2097152s   xfs
           2304000s  209715166s  207411167s              Free Space

Now the Free Space has size 207411167 sectors.

Also you see the error message, but you can skip it for now. The error is correct but it’s mostly a caution than error for us. Later you’ll see that there is a way to avoid the step with rebooting.

Creation new partition

We are going to create new partition which spans all free space on the partition and filesystem is XFS because the original filesystem is also XFS. To achieve this we use the start position which we got from the Parted “print free” in the chapter above. As the end position we use 100% that informs Parted that all available free space should be used.

(parted) mkpart
Partition name? []?
File system type? [ext2]? xfs
Start? 2304000s
End? 100%

Look what we got:

(parted) print free
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 209715200s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number    Start       End         Size        File system   Name                  Flags
1         2048s       206847s     204800s     fat16         EFI System Partition  boot, esp
2         206848s     2303999s    2097152s    xfs
3         2304000s    209713151s  207409152s  xfs
          209713152s  209715166s  2015s                     Free Space

We can see that the third partition was created and the size is 207409152 sectors. And Free Space occupies only 2015 sectors.

And that’s all what we do with the utility Parted. Next part is about some special aspects regarding unmounting filesystem and the utility xfs_repair.

Using xfs_repair and trying to unmount a root filesystem

Somewhere in Oracle documentation or in some Oracle blogs, I don’t remember exactly, there was a recommendation to use the utility “xfs_repair” to check a partition with XFS filesystem. My apologies, but I can’t find this article at moment. All I remember that it was the recommendation to use “xfs_repair” before “xfs_growfs”. When I executed this command I saw the following errors:

$ sudo xfs_repair /dev/mapper/ocivolume-root
xfs_repair: /dev/mapper/ocivolume-root contains a mounted filesystem
xfs_repair: /dev/mapper/ocivolume-root contains a mounted and writable filesystem

Of course, there is some logic in the message. Ok, why don't try to unmount? It was impossible to unmount the filesystem:

$ sudo umount -f /dev/mapper/ocivolume-root /
umount: /: target is busy.

This also does matter of course. The root filesystem is used for now and can't be unmounted.

Finally, the command "xfs_growfs -d /" did nothing:

$ sudo xfs_growfs -d /
meta-data=/dev/mapper/ocivolume-root isize=512 agcount=4, agsize=1904384 blks
         =              sectsz=4096 attr=2, projid32bit=1
         =              crc=1 finobt=1, sparse=1, rmapbt=0
         =              reflink=1
data     =              bsize=4096 blocks=7617536, imaxpct=25
         = sunit=0      swidth=0 blks
naming   = version 2    bsize=4096 ascii-ci=0, ftype=1
log      = internal log bsize=4096 blocks=3719, version=2
         =              sectsz=4096 sunit=1 blks, lazy-count=1
realtime = none         extsz=4096 blocks=0, rtextents=0

data size unchanged, skipping

"data size unchanged, skipping" - this happened because LVM in action and to extend the partitions the LVM utlilties “pvs”, “pvresize”, “lvextend” must be used.

Using the utilities pvresize и lvextend

Run the utility “pvs” to display information about physical volumes:

$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ocivolume lvm2 a-- <39.06g 0

Extend physical volume

Our physical volume is /dev/sda3. Run the command “sudo pvresize /dev/sda3”:

$ sudo pvresize /dev/sda3
Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

Look what has been changed:

$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ocivolume lvm2 a-- <98.90g <59.84g

It's seen that the physical size is 98.9GB and free size is 59.84GB now. After physical volume we are going to extend logical volume.

 

Extend logical volume

Run the command “sudo lvextend -l +100%FREE /dev/mapper/ocivolume-root”:

$ sudo lvextend -l +100%FREE /dev/mapper/ocivolume-root
Size of logical volume ocivolume/root changed from <29.06 GiB (7439 extents) to <88.90 GiB (22758 extents).
Logical volume ocivolume/root successfully resized.

the argument "+100%FREE" says that all free space should be occupied. The output says that the logical volume has been resized successfully and it's size has grown up to 88.9GB.

Look what has been changed:

$ df -h
Filesystem                  Size   Used   Avail   Use%  Mounted on
devtmpfs                    32G    0      32G     0%    /dev
tmpfs                       32G    0      32G     0%    /dev/shm
tmpfs                       32G    8.6M   32G     1%    /run
tmpfs                       32G    0      32G     0%    /sys/fs/cgroup
/dev/mapper/ocivolume-root  30G    6.7G   23G     23%   / <-still 30GB
/dev/sda2                   1014M  409M   606M    41%   /boot
/dev/mapper/ocivolume-oled  10G    142M   9.9G    2%    /var/oled
/dev/sda1                   100M   5.7M   95M     6%    /boot/efi
tmpfs                       6.3G   0      6.3G    0%    /run/user/988
tmpfs                       6.3G   0      6.3G    0%    /run/user/1000

But the “df -h” has still shown nothing changes. The partition /dev/mapper/ocivolume-root has the old size 30GB.

Using the utility xfs_growfs

And now after the operations with LVM utilities we are ready to execute the command “xfs_growfs” as the last step:

$ sudo xfs_growfs /
meta-data=/dev/mapper/ocivolume-root isize=512 agcount=4, agsize=1904384 blks
         =              sectsz=4096  attr=2, projid32bit=1
         =              crc=1        finobt=1, sparse=1, rmapbt=0
         =              reflink=1
    data =              bsize=4096   blocks=7617536, imaxpct=25
         =              sunit=0      swidth=0 blks
  naming = version 2    bsize=4096   ascii-ci=0, ftype=1
     log = internal log bsize=4096   blocks=3719, version=2
         =              sectsz=4096  sunit=1 blks, lazy-count=1
realtime = none         extsz=4096   blocks=0, rtextents=0
data blocks changed from 7617536 to 23304192

All look good and correct.

Final results:

$ df -hT | grep mapper
/dev/mapper/ocivolume-root xfs 89G 7.1G 82G 8% / <---------- now 89GB
/dev/mapper/ocivolume-oled xfs 10G 142M 9.9G 2% /var/oled
NB! There is no need to mount/unmount the partitions or reboot the system to apply the changes in case of using XFS filesystem.

The LVM partition /dev/mapper/ocivolume-root has new size 89GB. It's what we expected.

Afterword

There is a lot of information in the internet regarding resizing a boot partition on the different types of filesystems. This post isn't the final point. Here i described the 3 most common scenarios (as i suppose) which user runs into in the life. Apart from that i shown the output for all commands which were used in the article. I guess it should help users to understand what to expect in case of successful command.

 

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.