canonical / canonical/cloud-init

cc_resizefs does not allocate space on all disks of a multi disk btrfs volume

Open
#3,937 2 comments 0 reactions 0 assignees View on GitHub
bug launchpad
Dominant language
Python
Stars
3.8k
Forks
1.1k
Avg merge
3d 8h
Merged PRs (30d)
22

Description

This bug was originally filed in Launchpad as [LP: #1955858](https://bugs.launchpad.net/cloud-init/+bug/1955858)

Launchpad details

affected_projects = []

assignee = None
assignee_name = None
date_closed = None
date_created = 2021-12-28T01:05:59.703006+00:00
date_fix_committed = None
date_fix_released = None
id = 1955858
importance = medium
is_complete = False
lp_url = https://bugs.launchpad.net/cloud-init/+bug/1955858
milestone = None
owner = nothing4you
owner_name = Richard Schwab
private = False
status = triaged
submitter = nothing4you
submitter_name = Richard Schwab
tags = []
duplicates = []

_Launchpad user **Richard Schwab(nothing4you)** wrote on 2021-12-28T01:05:59.703006+00:00_

cloud provider: self-hosted, proxmox

cloud-init config:
growpart:
  mode: auto
  devices:
    - /dev/sda1
    - /dev/sdb1
    - /dev/sdc1
    - /dev/sdd1

I have a multi disk btrfs volume as root fs for the vm.
Each disk needs to grow on first boot and the btrfs filesystem should be resized.
Partitions are grown just fine and btrfs detects that, however, running `btrfs filesystem resize max /` as currently used in https://github.com/canonical/cloud-init/blob/bae9b11da9ed7dd0b16fe5adeaf4774b7cc628cf/cloudinit/config/cc_resizefs.py#L81 does not account for having multiple disks.

From the `btrfs-filesystem` man page (debian 11, Btrfs v5.10.1):
> The devid can be found in the output of btrfs filesystem show and defaults to 1 if not specified.

Since a devid is not passed only the first disk will be resized, other disks will stay with "slack" space.

This is after I manually resized disk id 2 for testing, before it also had 3GiB slack:

root@test-vm:~# btrfs device usage /
/dev/sda1, ID: 1
   Device size: 4.00GiB
   Device slack: 3.50KiB
   Data,RAID10: 310.25MiB
   Metadata,RAID10: 64.00MiB
   System,RAID10: 8.00MiB
   Unallocated: 3.62GiB

/dev/sdb1, ID: 2
   Device size: 4.00GiB
   Device slack: 3.50KiB
   Data,RAID10: 310.25MiB
   Metadata,RAID10: 64.00MiB
   System,RAID10: 8.00MiB
   Unallocated: 3.62GiB

/dev/sdc1, ID: 3
   Device size: 4.00GiB
   Device slack: 3.00GiB
   Data,RAID10: 310.25MiB
   Metadata,RAID10: 64.00MiB
   System,RAID10: 8.00MiB
   Unallocated: 640.73MiB

/dev/sdd1, ID: 4
   Device size: 4.00GiB
   Device slack: 3.00GiB
   Data,RAID10: 310.25MiB
   Metadata,RAID10: 64.00MiB
   System,RAID10: 8.00MiB
   Unallocated: 640.73MiB

Contributor guide

Open the contributing guide

Research direction

Start in cloudinit/config/cc_resizefs.py around the btrfs filesystem resize command linked in the issue. Reproduce the multi-disk scenario or inspect the existing resize flow, then verify that resizing the root filesystem accounts for every btrfs device rather than only the default device.

Written by the indexing model from the issue text.

Assessment

Tech stack
linux, python
Domain
cloud, operating-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.