canonical / lxd

Powerful system container and virtual machine manager
https://canonical.com/lxd
GNU Affero General Public License v3.0
4.38k stars 931 forks source link

Trying to give a size to a LVM volume fails. Seems it is only accepting bytes as unit. #11146

Closed gustavosr98 closed 1 year ago

gustavosr98 commented 1 year ago

Required information

Issue description

I am trying to have on a LXD container a disk backed by LVM with higher size than 10GB default size.

Steps to reproduce

If I try creating the volume and after the fact update its size I get "Error: Volume "size" property is not valid for volume type"

$ lxc profile show personal
config: {}
description: Personal
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: personal-pool
    type: disk
name: personal
used_by:
- /1.0/instances/nextcloud

$ lxc launch ubuntu:jammy -p personal nextcloud

$ pvs
  PV                     VG              Fmt  Attr PSize  PFree 
  /dev/mapper/dm_crypt-0 ubuntu-vg       lvm2 a--  <1.82t <1.72t
  /dev/mapper/sdb_crypt  personal-vg-lxd lvm2 a--  <1.82t     0 

$ vgs
  VG              #PV #LV #SN Attr   VSize  VFree 
  personal-vg-lxd   1   3   0 wz--n- <1.82t     0 
  ubuntu-vg         1   1   0 wz--n- <1.82t <1.72t

$ lvs
  LV                                                                      VG              Attr       LSize   Pool            Origin                                                                  Data%  Meta%  Move Log Cpy%Sync Convert
  containers_nextcloud                                                    personal-vg-lxd Vwi-aotz-k  10.00g personal-lv-lxd images_672583a05778fdd42770408068c5f932d8383539b4cdf20f11b92a0bf3b24d45 13.33                                  
  images_672583a05778fdd42770408068c5f932d8383539b4cdf20f11b92a0bf3b24d45 personal-vg-lxd Vwi---tz-k  10.00g personal-lv-lxd                                                                                                                
  personal-lv-lxd                                                         personal-vg-lxd twi-aotz--  <1.82t                                                                                         0.07   10.46                           
  ubuntu-lv                                                               ubuntu-vg       -wi-ao---- 100.00g   

$ lxc storage show personal-pool
config:
  lvm.thinpool_name: personal-lv-lxd
  lvm.use_thinpool: "true"
  lvm.vg.force_reuse: "true"
  lvm.vg_name: personal-vg-lxd
  source: personal-vg-lxd
  volatile.initial_source: personal-vg-lxd
description: ""
name: personal-pool
driver: lvm
used_by:
- /1.0/images/672583a05778fdd42770408068c5f932d8383539b4cdf20f11b92a0bf3b24d45
- /1.0/instances/nextcloud
- /1.0/profiles/personal
status: Created
locations:
- none

$ lxc storage volume set personal-pool container/nextcloud size=20 --debug
DEBUG  [2022-11-23T20:13:08Z] Connecting to a local LXD over a Unix socket 
DEBUG  [2022-11-23T20:13:08Z] Sending request to LXD                        etag= method=GET url="http://unix.socket/1.0"
DEBUG  [2022-11-23T20:13:08Z] Got response struct from LXD                 
DEBUG  [2022-11-23T20:13:08Z] 
    {
        "config": {
            "core.https_address": "[::]"
        },
        "api_extensions": [
            "storage_zfs_remove_snapshots",
            "container_host_shutdown_timeout",
            "container_stop_priority",
            "container_syscall_filtering",
            "auth_pki",
            "container_last_used_at",
            "etag",
            "patch",
            "usb_devices",
            "https_allowed_credentials",
            "image_compression_algorithm",
            "directory_manipulation",
            "container_cpu_time",
            "storage_zfs_use_refquota",
            "storage_lvm_mount_options",
            "network",
            "profile_usedby",
            "container_push",
            "container_exec_recording",
            "certificate_update",
            "container_exec_signal_handling",
            "gpu_devices",
            "container_image_properties",
            "migration_progress",
            "id_map",
            "network_firewall_filtering",
            "network_routes",
            "storage",
            "file_delete",
            "file_append",
            "network_dhcp_expiry",
            "storage_lvm_vg_rename",
            "storage_lvm_thinpool_rename",
            "network_vlan",
            "image_create_aliases",
            "container_stateless_copy",
            "container_only_migration",
            "storage_zfs_clone_copy",
            "unix_device_rename",
            "storage_lvm_use_thinpool",
            "storage_rsync_bwlimit",
            "network_vxlan_interface",
            "storage_btrfs_mount_options",
            "entity_description",
            "image_force_refresh",
            "storage_lvm_lv_resizing",
            "id_map_base",
            "file_symlinks",
            "container_push_target",
            "network_vlan_physical",
            "storage_images_delete",
            "container_edit_metadata",
            "container_snapshot_stateful_migration",
            "storage_driver_ceph",
            "storage_ceph_user_name",
            "resource_limits",
            "storage_volatile_initial_source",
            "storage_ceph_force_osd_reuse",
            "storage_block_filesystem_btrfs",
            "resources",
            "kernel_limits",
            "storage_api_volume_rename",
            "macaroon_authentication",
            "network_sriov",
            "console",
            "restrict_devlxd",
            "migration_pre_copy",
            "infiniband",
            "maas_network",
            "devlxd_events",
            "proxy",
            "network_dhcp_gateway",
            "file_get_symlink",
            "network_leases",
            "unix_device_hotplug",
            "storage_api_local_volume_handling",
            "operation_description",
            "clustering",
            "event_lifecycle",
            "storage_api_remote_volume_handling",
            "nvidia_runtime",
            "container_mount_propagation",
            "container_backup",
            "devlxd_images",
            "container_local_cross_pool_handling",
            "proxy_unix",
            "proxy_udp",
            "clustering_join",
            "proxy_tcp_udp_multi_port_handling",
            "network_state",
            "proxy_unix_dac_properties",
            "container_protection_delete",
            "unix_priv_drop",
            "pprof_http",
            "proxy_haproxy_protocol",
            "network_hwaddr",
            "proxy_nat",
            "network_nat_order",
            "container_full",
            "candid_authentication",
            "backup_compression",
            "candid_config",
            "nvidia_runtime_config",
            "storage_api_volume_snapshots",
            "storage_unmapped",
            "projects",
            "candid_config_key",
            "network_vxlan_ttl",
            "container_incremental_copy",
            "usb_optional_vendorid",
            "snapshot_scheduling",
            "snapshot_schedule_aliases",
            "container_copy_project",
            "clustering_server_address",
            "clustering_image_replication",
            "container_protection_shift",
            "snapshot_expiry",
            "container_backup_override_pool",
            "snapshot_expiry_creation",
            "network_leases_location",
            "resources_cpu_socket",
            "resources_gpu",
            "resources_numa",
            "kernel_features",
            "id_map_current",
            "event_location",
            "storage_api_remote_volume_snapshots",
            "network_nat_address",
            "container_nic_routes",
            "rbac",
            "cluster_internal_copy",
            "seccomp_notify",
            "lxc_features",
            "container_nic_ipvlan",
            "network_vlan_sriov",
            "storage_cephfs",
            "container_nic_ipfilter",
            "resources_v2",
            "container_exec_user_group_cwd",
            "container_syscall_intercept",
            "container_disk_shift",
            "storage_shifted",
            "resources_infiniband",
            "daemon_storage",
            "instances",
            "image_types",
            "resources_disk_sata",
            "clustering_roles",
            "images_expiry",
            "resources_network_firmware",
            "backup_compression_algorithm",
            "ceph_data_pool_name",
            "container_syscall_intercept_mount",
            "compression_squashfs",
            "container_raw_mount",
            "container_nic_routed",
            "container_syscall_intercept_mount_fuse",
            "container_disk_ceph",
            "virtual-machines",
            "image_profiles",
            "clustering_architecture",
            "resources_disk_id",
            "storage_lvm_stripes",
            "vm_boot_priority",
            "unix_hotplug_devices",
            "api_filtering",
            "instance_nic_network",
            "clustering_sizing",
            "firewall_driver",
            "projects_limits",
            "container_syscall_intercept_hugetlbfs",
            "limits_hugepages",
            "container_nic_routed_gateway",
            "projects_restrictions",
            "custom_volume_snapshot_expiry",
            "volume_snapshot_scheduling",
            "trust_ca_certificates",
            "snapshot_disk_usage",
            "clustering_edit_roles",
            "container_nic_routed_host_address",
            "container_nic_ipvlan_gateway",
            "resources_usb_pci",
            "resources_cpu_threads_numa",
            "resources_cpu_core_die",
            "api_os",
            "container_nic_routed_host_table",
            "container_nic_ipvlan_host_table",
            "container_nic_ipvlan_mode",
            "resources_system",
            "images_push_relay",
            "network_dns_search",
            "container_nic_routed_limits",
            "instance_nic_bridged_vlan",
            "network_state_bond_bridge",
            "usedby_consistency",
            "custom_block_volumes",
            "clustering_failure_domains",
            "resources_gpu_mdev",
            "console_vga_type",
            "projects_limits_disk",
            "network_type_macvlan",
            "network_type_sriov",
            "container_syscall_intercept_bpf_devices",
            "network_type_ovn",
            "projects_networks",
            "projects_networks_restricted_uplinks",
            "custom_volume_backup",
            "backup_override_name",
            "storage_rsync_compression",
            "network_type_physical",
            "network_ovn_external_subnets",
            "network_ovn_nat",
            "network_ovn_external_routes_remove",
            "tpm_device_type",
            "storage_zfs_clone_copy_rebase",
            "gpu_mdev",
            "resources_pci_iommu",
            "resources_network_usb",
            "resources_disk_address",
            "network_physical_ovn_ingress_mode",
            "network_ovn_dhcp",
            "network_physical_routes_anycast",
            "projects_limits_instances",
            "network_state_vlan",
            "instance_nic_bridged_port_isolation",
            "instance_bulk_state_change",
            "network_gvrp",
            "instance_pool_move",
            "gpu_sriov",
            "pci_device_type",
            "storage_volume_state",
            "network_acl",
            "migration_stateful",
            "disk_state_quota",
            "storage_ceph_features",
            "projects_compression",
            "projects_images_remote_cache_expiry",
            "certificate_project",
            "network_ovn_acl",
            "projects_images_auto_update",
            "projects_restricted_cluster_target",
            "images_default_architecture",
            "network_ovn_acl_defaults",
            "gpu_mig",
            "project_usage",
            "network_bridge_acl",
            "warnings",
            "projects_restricted_backups_and_snapshots",
            "clustering_join_token",
            "clustering_description",
            "server_trusted_proxy",
            "clustering_update_cert",
            "storage_api_project",
            "server_instance_driver_operational",
            "server_supported_storage_drivers",
            "event_lifecycle_requestor_address",
            "resources_gpu_usb",
            "clustering_evacuation",
            "network_ovn_nat_address",
            "network_bgp",
            "network_forward",
            "custom_volume_refresh",
            "network_counters_errors_dropped",
            "metrics",
            "image_source_project",
            "clustering_config",
            "network_peer",
            "linux_sysctl",
            "network_dns",
            "ovn_nic_acceleration",
            "certificate_self_renewal",
            "instance_project_move",
            "storage_volume_project_move",
            "cloud_init",
            "network_dns_nat",
            "database_leader",
            "instance_all_projects",
            "clustering_groups",
            "ceph_rbd_du",
            "instance_get_full",
            "qemu_metrics",
            "gpu_mig_uuid",
            "event_project",
            "clustering_evacuation_live",
            "instance_allow_inconsistent_copy",
            "network_state_ovn",
            "storage_volume_api_filtering",
            "image_restrictions",
            "storage_zfs_export",
            "network_dns_records",
            "storage_zfs_reserve_space",
            "network_acl_log",
            "storage_zfs_blocksize",
            "metrics_cpu_seconds",
            "instance_snapshot_never",
            "certificate_token",
            "instance_nic_routed_neighbor_probe",
            "event_hub",
            "agent_nic_config",
            "projects_restricted_intercept",
            "metrics_authentication",
            "images_target_project",
            "cluster_migration_inconsistent_copy",
            "cluster_ovn_chassis",
            "container_syscall_intercept_sched_setscheduler",
            "storage_lvm_thinpool_metadata_size",
            "storage_volume_state_total",
            "instance_file_head",
            "instances_nic_host_name",
            "image_copy_profile",
            "container_syscall_intercept_sysinfo",
            "clustering_evacuation_mode",
            "resources_pci_vpd",
            "qemu_raw_conf",
            "storage_cephfs_fscache",
            "network_load_balancer",
            "vsock_api",
            "instance_ready_state",
            "network_bgp_holdtime",
            "storage_volumes_all_projects",
            "metrics_memory_oom_total",
            "storage_buckets",
            "storage_buckets_create_credentials",
            "metrics_cpu_effective_total",
            "projects_networks_restricted_access",
            "storage_buckets_local",
            "loki",
            "acme",
            "internal_metrics",
            "cluster_join_token_expiry",
            "remote_token_expiry",
            "init_preseed",
            "storage_volumes_created_at",
            "cpu_hotplug"
        ],
        "api_status": "stable",
        "api_version": "1.0",
        "auth": "trusted",
        "public": false,
        "auth_methods": [
            "tls"
        ],
        "environment": {
            "addresses": [
                "192.168.0.10:8443",
                "10.119.189.1:8443"
            ],
            "architectures": [
                "x86_64",
                "i686"
            ],
            "certificate": "-----BEGIN CERTIFICATE-----\nMIICBjCCAYygAwIBAgIQQYqGKv2ssj6rJBjr4USO1DAKBggqhkjOPQQDAzA1MRww\nGgYDVQQKExNsaW51eGNvbnRhaW5lcnMub3JnMRUwEwYDVQQDDAxyb290QGJpZ2Js\ndWUwHhcNMjIxMTIxMDE1MTMzWhcNMzIxMTE4MDE1MTMzWjA1MRwwGgYDVQQKExNs\naW51eGNvbnRhaW5lcnMub3JnMRUwEwYDVQQDDAxyb290QGJpZ2JsdWUwdjAQBgcq\nhkjOPQIBBgUrgQQAIgNiAASu02VsUwQX/4TmL4sgmeCKC+ybMO9PYC89lscNYKkY\nF0qKVpkokezw6CqP9lZp6laSTHxGDcu/BBhvJlJLt0DUqb5dj4cq0WgmSdzOoR0r\n2+tPsmDZ1I/FMHUEvWYxd+SjYTBfMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAK\nBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMCoGA1UdEQQjMCGCB2JpZ2JsdWWHBH8A\nAAGHEAAAAAAAAAAAAAAAAAAAAAEwCgYIKoZIzj0EAwMDaAAwZQIwPZNbZkdFCRuP\nqmhcWoVSgqR8IO7KVxY2d1zoAvlDhsyLCwd86rGvWt7RfgHq2gHuAjEAu8FzA9eD\nJawWMBHtUN37dP5hBNCLgLSYdYfJu2sr2L4ELD6IdA4DmSVcKBr8QXs2\n-----END CERTIFICATE-----\n",
            "certificate_fingerprint": "6f65fb8b767237aba416ef3d41da4ea2f7bd4c8a77765f49bdf53d404aaaa717",
            "driver": "lxc | qemu",
            "driver_version": "5.0.1 | 7.1.0",
            "firewall": "nftables",
            "kernel": "Linux",
            "kernel_architecture": "x86_64",
            "kernel_features": {
                "idmapped_mounts": "true",
                "netnsid_getifaddrs": "true",
                "seccomp_listener": "true",
                "seccomp_listener_continue": "true",
                "shiftfs": "false",
                "uevent_injection": "true",
                "unpriv_fscaps": "true"
            },
            "kernel_version": "5.15.0-53-generic",
            "lxc_features": {
                "cgroup2": "true",
                "core_scheduling": "true",
                "devpts_fd": "true",
                "idmapped_mounts_v2": "true",
                "mount_injection_file": "true",
                "network_gateway_device_route": "true",
                "network_ipvlan": "true",
                "network_l2proxy": "true",
                "network_phys_macvlan_mtu": "true",
                "network_veth_router": "true",
                "pidfd": "true",
                "seccomp_allow_deny_syntax": "true",
                "seccomp_notify": "true",
                "seccomp_proxy_send_notify_fd": "true"
            },
            "os_name": "Ubuntu",
            "os_version": "22.04",
            "project": "default",
            "server": "lxd",
            "server_clustered": false,
            "server_event_mode": "full-mesh",
            "server_name": "bigblue",
            "server_pid": 1780,
            "server_version": "5.8",
            "storage": "dir | lvm | zfs | btrfs",
            "storage_version": "1 | 2.03.07(2) (2019-11-30) / 1.02.167 (2019-11-30) / 4.45.0 | 2.1.4-0ubuntu0.1 | 5.4.1",
            "storage_supported_drivers": [
                {
                    "Name": "btrfs",
                    "Version": "5.4.1",
                    "Remote": false
                },
                {
                    "Name": "ceph",
                    "Version": "15.2.16",
                    "Remote": true
                },
                {
                    "Name": "cephfs",
                    "Version": "15.2.16",
                    "Remote": true
                },
                {
                    "Name": "cephobject",
                    "Version": "15.2.16",
                    "Remote": true
                },
                {
                    "Name": "dir",
                    "Version": "1",
                    "Remote": false
                },
                {
                    "Name": "lvm",
                    "Version": "2.03.07(2) (2019-11-30) / 1.02.167 (2019-11-30) / 4.45.0",
                    "Remote": false
                },
                {
                    "Name": "zfs",
                    "Version": "2.1.4-0ubuntu0.1",
                    "Remote": false
                }
            ]
        }
    } 
DEBUG  [2022-11-23T20:13:08Z] Sending request to LXD                        etag= method=GET url="http://unix.socket/1.0/storage-pools/personal-pool/volumes/container/nextcloud"
DEBUG  [2022-11-23T20:13:08Z] Got response struct from LXD                 
DEBUG  [2022-11-23T20:13:08Z] 
    {
        "config": {
            "block.filesystem": "ext4",
            "block.mount_options": "discard"
        },
        "description": "",
        "name": "nextcloud",
        "type": "container",
        "used_by": [
            "/1.0/instances/nextcloud"
        ],
        "location": "none",
        "content_type": "filesystem",
        "project": "default",
        "created_at": "2022-11-23T19:37:28.38501455Z"
    } 
DEBUG  [2022-11-23T20:13:08Z] Sending request to LXD                        etag="\"5a56056f1d968805fbbc9c3d0d6d609e3c81e285a05f1df71fd8c64666c4378f\"" method=PUT url="http://unix.socket/1.0/storage-pools/personal-pool/volumes/container/nextcloud"
DEBUG  [2022-11-23T20:13:08Z] 
    {
        "config": {
            "block.filesystem": "ext4",
            "block.mount_options": "discard",
            "size": "20"
        },
        "description": ""
    } 
Error: Volume "size" property is not valid for volume type

If I try to set size option on the profile seems it is only accepting bytes as unit

$ lxc profile edit personal
config: {}
description: Personal
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: personal-pool
    type: disk
    size: 20 GB
name: personal
used_by:
- /1.0/instances/nextcloud

Config parsing error: Device validation failed for "root": Invalid value for device option "size": Invalid value: 20 GB
Press enter to open the editor again or ctrl+c to abort change
$ lxc profile edit personal
config: {}
description: Personal
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: personal-pool
    type: disk
    size: 20 GiB
name: personal
used_by:
- /1.0/instances/nextcloud

Config parsing error: Device validation failed for "root": Invalid value for device option "size": Invalid value: 20 GiB
Press enter to open the editor again or ctrl+c to abort change
$ lxc profile edit personal
config: {}
description: Personal
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: personal-pool
    type: disk
    size: 20
name: personal
used_by:
- /1.0/instances/nextcloud

$ lxc launch ubuntu:jammy -p personal test2
Creating test2
Error: Failed instance creation: Failed creating instance from image: Failed to run: resize2fs /dev/personal-vg-lxd/containers_test2 0K: exit status 1 (resize2fs 1.45.5 (07-Jan-2020)
resize2fs: Invalid new size: 0K)

$ lxc profile edit personal
config: {}
description: Personal
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: personal-pool
    size: "2199023255552"
    type: disk
name: personal
used_by:
- /1.0/instances/nextcloud
- /1.0/instances/test3

$ lvs
  containers_test3                                                        personal-vg-lxd Vwi-aotz-k   2.00t personal-lv-lxd images_672583a05778fdd42770408068c5f932d8383539b4cdf20f11b92a0bf3b24d45 0.12                                   
tomponline commented 1 year ago

For instances, you cannot set the size on the underlying storage volume, but instead set it on the instance device itself and it will be applied to the volume.

lxc profile device set <profile> root size 20GB

But don't use spaces between amount and units.

See https://linuxcontainers.org/lxd/docs/master/reference/instance_units/