florius
September 6, 2018, 10:05am
1
Hi,
I currently have 2 LXC containers, and I’d like a third container.
However I’ve run out of space.
How would one resize the default btrfs storage?
# lxc storage list
+---------+-------------+--------+--------------------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------------------+---------+
| default | | btrfs | /var/snap/lxd/common/lxd/disks/default.img | 9 |
+---------+-------------+--------+--------------------------------------------+---------+
On my container:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/loop1 5.0G 4.0G 761M 85% /
I’m running LXD on Debian via Snap, and run 3.4:
# lxd --version
3.4
Any help/ advice is appreciated! Thanks
stgraber
(Stéphane Graber)
September 7, 2018, 5:10am
2
You should be able to grow the sparse file with:
dd if=/dev/zero of=/var/snap/lxd/common/lxd/disks/default.img bs=1 count=0 seek=10G
btrfs filesystem resize max /dev/loop1
(untested, based from a bit of googling)
florius
September 7, 2018, 1:15pm
3
Hi @stgraber , thanks for your help.
Should I do the ‘btrfs filesystem resize’ on my container?
If not, on which loop device then?
This is on my host-server:
/dev/loop0 55M 55M 0 100% /snap/lxd/8393
/dev/loop2 88M 88M 0 100% /snap/core/5328
/dev/loop3 87M 87M 0 100% /snap/core/4917
/dev/loop4 87M 87M 0 100% /snap/core/5145
/dev/loop5 55M 55M 0 100% /snap/lxd/8415
/dev/loop1 55M 55M 0 100% /snap/lxd/8339
Thank you!
EDIT:
# lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
NAME FSTYPE SIZE MOUNTPOINT LABEL
loop0 squashfs 54.6M /snap/lxd/8393
loop1 squashfs 54.6M /snap/lxd/8339
loop2 squashfs 87.9M /snap/core/5328
loop3 squashfs 86.9M /snap/core/4917
loop4 squashfs 87M /snap/core/5145
loop5 squashfs 54.6M /snap/lxd/8415
loop6 btrfs 10G default
sda 30G
|-sda1 ext2 243M /boot
`-sda2 LVM2_member 29.8G
|-noc--01--vg-root ext4 27.8G /
`-noc--01--vg-swap_1 swap 2G [SWAP]
sr0 1024M
# btrfs filesystem resize max /dev/loop6
ERROR: resize works on mounted filesystems and accepts only
directories as argument. Passing file containing a btrfs image
would resize the underlying filesystem instead of the image.
stgraber
(Stéphane Graber)
September 7, 2018, 6:42pm
4
Ok, so you may want to do:
nsenter -t $(pgrep daemon.start) -m – btrfs filesystem resize max /var/snap/lxd/common/lxd/storage-pools/default
Which should then aim the resize operation at the right mount namespace.
florius
September 9, 2018, 4:00pm
5
# btrfs filesystem show
Label: 'default' uuid: 14359730-f8e4-4ba9-b9f2-81e929d841d6
Total devices 1 FS bytes used 3.70GiB
devid 1 size 10.00GiB used 4.77GiB path /dev/loop6
I mounted /dev/loop6 (to /mnt) and resized it with truncate -s +10G /dev/loop6
and rebooted, that’s it!
Thank you!
bluis8
September 13, 2019, 2:10am
6
Hi
Trying to do the same, without success
mounted /dev/loop4 (to /mnt), then truncate like in the example:
truncate -s +10G /dev/loop4
got the following error:
truncate: failed to truncate '/dev/loop4' at 42949672960 bytes: Invalid argument
UPDATE:
The following steps made it in my case (Ubuntu 18.04, LXD 3.0.1):
ATTENTION: In order to understand the following steps, I recommend to read this thread from the beginning.
Stopped containers (lxc stop containername)
As root (obvious but it may help someone):
mount /dev/loop4 mnt
truncate -s +30G /var/lib/lxd/disks/default.img
reboot
stop containers
btrfs filesystem resize max /var/lib/lxd/storage-pools/default
and that’s it
Don’t know if there is something unnecessary in my solution, but that’s the way it worked for me
Cheers !!
2 Likes
uli-heller
(Uli Heller)
January 14, 2021, 8:15am
7
For me, I’m getting this:
root@sb35 ~ # lxc --version
4.10
root@sb35 ~ # nsenter -t $(pgrep daemon.start) -m -- btrfs filesystem resize max /var/snap/lxd/common/lxd/storage-pools/default
nsenter: failed to execute btrfs: No such file or directory
Is there another easy way? My workaround is to determine the device of the default pool, temporarily mount it, execute btrfs
on the mounted pool, unmount it.
Update : for LXD on snap when using default BTRFS storage pool :
Enter any container and execute df -h | grep loop
and you can see the loop
Stop containers
mkdir /mnt/loop{n°}
mount /dev/loop{n°} /mnt/loop{n°}
truncate -s +{size}G /var/snap/lxd/common/lxd/disks/default.img
reboot
Check if all containers are stoped if not stop them
btrfs filesystem resize max /var/snap/lxd/common/mntns/var/snap/lxd/common/lxd/storage-pools/default
2 Likes