diff --git a/kiwi/defaults.py b/kiwi/defaults.py index 960cf1cf418..1005b0f9a52 100644 --- a/kiwi/defaults.py +++ b/kiwi/defaults.py @@ -1148,15 +1148,21 @@ def get_min_partition_mbytes(): return 10 @staticmethod - def get_min_volume_mbytes(): + def get_min_volume_mbytes(filesystem: str): """ Provides default minimum LVM volume size in mbytes + per filesystem :return: mbsize value :rtype: int """ - return 120 + if filesystem == 'btrfs': + return 120 + elif filesystem == 'xfs': + return 300 + else: + return 30 @staticmethod def get_lvm_overhead_mbytes(): diff --git a/kiwi/storage/setup.py b/kiwi/storage/setup.py index 4d04036ca32..0ddd0a5e9f3 100644 --- a/kiwi/storage/setup.py +++ b/kiwi/storage/setup.py @@ -361,7 +361,9 @@ def _accumulate_volume_size(self, root_mbytes): # on first boot of the disk image in oemboot/repart if self.disk_resize_requested: for volume in self.volumes: - disk_volume_mbytes += Defaults.get_min_volume_mbytes() + disk_volume_mbytes += Defaults.get_min_volume_mbytes( + self.filesystem + ) return disk_volume_mbytes # For static disk(no resize requested) we need to add the @@ -378,7 +380,7 @@ def _accumulate_volume_size(self, root_mbytes): data_volume_mbytes.volume[volume.realpath] if disk_add_mbytes > 0: disk_volume_mbytes += disk_add_mbytes + \ - Defaults.get_min_volume_mbytes() + Defaults.get_min_volume_mbytes(self.filesystem) else: message = dedent('''\n Requested volume size {0}MB for {1!r} is too small @@ -402,7 +404,7 @@ def _accumulate_volume_size(self, root_mbytes): if disk_add_mbytes > 0: disk_volume_mbytes += disk_add_mbytes + \ - Defaults.get_min_volume_mbytes() + Defaults.get_min_volume_mbytes(self.filesystem) else: log.warning( 'root volume size of %s MB is too small, skipped', diff --git a/kiwi/volume_manager/base.py b/kiwi/volume_manager/base.py index b97bef98c5b..c4e0001f6f8 100644 --- a/kiwi/volume_manager/base.py +++ b/kiwi/volume_manager/base.py @@ -317,7 +317,7 @@ def get_volume_mbsize( # Therefore the requested size is set to null and we add # the required minimum size for just storing the data size_type = 'freespace' - mbsize = Defaults.get_min_volume_mbytes() + mbsize = Defaults.get_min_volume_mbytes(filesystem_name) if size_type == 'freespace' and os.path.exists(lookup_abspath): exclude_paths = [] @@ -337,8 +337,8 @@ def get_volume_mbsize( ) volume_size = SystemSize(lookup_abspath) - if mbsize != Defaults.get_min_volume_mbytes(): - mbsize += Defaults.get_min_volume_mbytes() + if mbsize != Defaults.get_min_volume_mbytes(filesystem_name): + mbsize += Defaults.get_min_volume_mbytes(filesystem_name) mbsize += volume_size.customize( volume_size.accumulate_mbyte_file_sizes(exclude_paths), filesystem_name diff --git a/kiwi/xml_state.py b/kiwi/xml_state.py index 87606fb3149..14ef9b7a046 100644 --- a/kiwi/xml_state.py +++ b/kiwi/xml_state.py @@ -1731,6 +1731,7 @@ def get_volumes(self) -> List[volume_type]: """ volume_type_list: List[volume_type] = [] systemdisk_section = self.get_build_type_system_disk_section() + selected_filesystem = self.build_type.get_filesystem() swap_mbytes = self.get_oemconfig_swap_mbytes() swap_name = self.get_oemconfig_swap_name() if not systemdisk_section: @@ -1802,7 +1803,7 @@ def get_volumes(self) -> List[volume_type]: ) else: size = 'freespace:' + format( - Defaults.get_min_volume_mbytes() + Defaults.get_min_volume_mbytes(selected_filesystem) ) if ':all' in size: @@ -1832,7 +1833,7 @@ def get_volumes(self) -> List[volume_type]: defaults.ROOT_VOLUME_NAME if volume_management == 'lvm' else '' if have_full_size_volume: size = 'freespace:' + format( - Defaults.get_min_volume_mbytes() + Defaults.get_min_volume_mbytes(selected_filesystem) ) fullsize = False else: diff --git a/test/unit/defaults_test.py b/test/unit/defaults_test.py index faa498c419e..cc21ac1a29f 100644 --- a/test/unit/defaults_test.py +++ b/test/unit/defaults_test.py @@ -217,3 +217,8 @@ def test_get_snapper_config_template_file(self, mock_os_path_exists): mock_os_path_exists.return_value = True assert Defaults.get_snapper_config_template_file('root') == \ 'root/etc/snapper/config-templates/default' + + def test_get_min_volume_mbytes(self): + assert Defaults.get_min_volume_mbytes('btrfs') == 120 + assert Defaults.get_min_volume_mbytes('xfs') == 300 + assert Defaults.get_min_volume_mbytes('some') == 30 diff --git a/test/unit/storage/setup_test.py b/test/unit/storage/setup_test.py index 53acc103d72..6cefbfd1a45 100644 --- a/test/unit/storage/setup_test.py +++ b/test/unit/storage/setup_test.py @@ -212,7 +212,7 @@ def test_get_disksize_mbytes_partition_too_small(self, mock_os_path_exists): @patch('os.path.exists') def test_get_disksize_mbytes_volumes(self, mock_exists): mock_exists.side_effect = lambda path: path != 'root_dir/newfolder' - assert self.setup_volumes.get_disksize_mbytes() == 2774 + assert self.setup_volumes.get_disksize_mbytes() == 2144 @patch('os.path.exists') def test_get_disksize_mbytes_partitions(self, mock_exists): @@ -244,7 +244,7 @@ def test_get_disksize_mbytes_oem_volumes(self, mock_exists): Defaults.get_default_efi_boot_mbytes() + \ Defaults.get_default_boot_mbytes() + \ root_size + \ - 5 * Defaults.get_min_volume_mbytes() + 5 * Defaults.get_min_volume_mbytes('ext3') @patch('os.path.exists') def test_get_disksize_mbytes_root_volume(self, mock_exists): diff --git a/test/unit/system/profile_test.py b/test/unit/system/profile_test.py index 3dd9a59a12b..a8736b18f58 100644 --- a/test/unit/system/profile_test.py +++ b/test/unit/system/profile_test.py @@ -81,9 +81,9 @@ def test_create_oem(self, mock_which): os.remove(self.profile_file) assert self.profile.dot_profile == { 'kiwi_Volume_1': 'usr_lib|size:1024|usr/lib', - 'kiwi_Volume_2': 'etc_volume|freespace:120|etc', + 'kiwi_Volume_2': 'etc_volume|freespace:30|etc', 'kiwi_Volume_3': 'bin_volume|size:all|/usr/bin', - 'kiwi_Volume_4': 'usr_bin|freespace:120|usr/bin', + 'kiwi_Volume_4': 'usr_bin|freespace:30|usr/bin', 'kiwi_Volume_5': 'LVSwap|size:128|', 'kiwi_Volume_Root': 'LVRoot|freespace:500|', 'kiwi_bootkernel': None, diff --git a/test/unit/volume_manager/base_test.py b/test/unit/volume_manager/base_test.py index cdabc6c88c7..d91a7d57caa 100644 --- a/test/unit/volume_manager/base_test.py +++ b/test/unit/volume_manager/base_test.py @@ -124,7 +124,7 @@ def test_get_volume_mbsize( assert self.volume_manager.get_volume_mbsize( self.volume_manager.volumes[0], self.volume_manager.volumes, 'ext3' - ) == 362 + ) == 272 @patch('kiwi.volume_manager.base.SystemSize') @patch('os.path.exists') @@ -140,7 +140,7 @@ def test_get_volume_mbsize_for_oem_type( assert self.volume_manager.get_volume_mbsize( self.volume_manager.volumes[0], self.volume_manager.volumes, 'ext3', True - ) == 162 + ) == 72 @patch('kiwi.volume_manager.base.SystemSize') @patch('os.path.exists') @@ -168,7 +168,7 @@ def test_get_volume_mbsize_nested_volumes( assert self.volume_manager.get_volume_mbsize( self.volume_manager.volumes[0], self.volume_manager.volumes, 'ext3' - ) == 362 + ) == 272 size.accumulate_mbyte_file_sizes.assert_called_once_with( ['root_dir/usr/lib'] ) @@ -204,7 +204,7 @@ def test_get_volume_mbsize_root_volume( assert self.volume_manager.get_volume_mbsize( self.volume_manager.volumes[2], self.volume_manager.volumes, 'ext3', True - ) == 162 + ) == 72 size.accumulate_mbyte_file_sizes.assert_called_once_with( ['root_dir/usr', 'root_dir/usr/lib'] ) diff --git a/test/unit/volume_manager/lvm_test.py b/test/unit/volume_manager/lvm_test.py index 2f744b54259..b1be6134778 100644 --- a/test/unit/volume_manager/lvm_test.py +++ b/test/unit/volume_manager/lvm_test.py @@ -175,8 +175,8 @@ def mock_os_exists_return(path): self.volume_manager.volume_group = 'volume_group' self.volume_manager.create_volumes('ext3') myvol_size = 500 - etc_size = 200 + 42 + Defaults.get_min_volume_mbytes() - root_size = 100 + 42 + Defaults.get_min_volume_mbytes() + etc_size = 200 + 42 + Defaults.get_min_volume_mbytes('ext3') + root_size = 100 + 42 + Defaults.get_min_volume_mbytes('ext3') assert mock_attrs.call_args_list == [ call( diff --git a/test/unit/xml_state_test.py b/test/unit/xml_state_test.py index 83c58fbed1e..3db07fb0005 100644 --- a/test/unit/xml_state_test.py +++ b/test/unit/xml_state_test.py @@ -434,7 +434,7 @@ def test_get_volumes_for_arch(self): volume_type( name='usr_lib', parent='', - size='freespace:120', + size='freespace:30', realpath='usr/lib', mountpoint='usr/lib', fullsize=False, @@ -493,7 +493,7 @@ def test_get_volumes(self): is_root_volume=True ), volume_type( - name='etc_volume', parent='', size='freespace:120', + name='etc_volume', parent='', size='freespace:30', realpath='etc', mountpoint='etc', fullsize=False, label=None, @@ -557,7 +557,7 @@ def test_get_volumes_no_explicit_root_setup_other_fullsize_volume(self): is_root_volume=False ), volume_type( - name='LVRoot', parent='', size='freespace:120', realpath='/', + name='LVRoot', parent='', size='freespace:30', realpath='/', mountpoint=None, fullsize=False, label=None, attributes=[],