--- cloudinit/config/cc_resizefs.py +++ cloudinit/config/cc_resizefs.py 2017/11/27 11:55:37 @@ -59,7 +59,16 @@ def _resize_btrfs(mount_point, devpth): - return ('btrfs', 'filesystem', 'resize', 'max', mount_point) +# That btrfs utilities are using a path and not a device is bad, +# because the subvolume specified by '/' could be read-only +# and btrfs will wrongly fail. Correct fix would be to mount the +# real root of the filesystem (subvolid=5) and resize that. But +# using /.snapshots as workaround is Ok, too, since this is +# normally writeable. + if mount_point == '/' and os.path.isdir("/.snapshots"): + return ('btrfs', 'filesystem', 'resize', 'max', '/.snapshots') + else: + return ('btrfs', 'filesystem', 'resize', 'max', mount_point) def _resize_ext(mount_point, devpth):