If not set, nothing is changed in current behaviour. Since dm-snapshot allows to use as "COW" a file with any size, without caring about the the size of "origin", we can avoid creating a "COW" file of the same size as the "origin". This is really useful, when using as cow_device= a filesystem that is VFAT where sparse files are not supported, so if root-image.fs is 1000M, passing cowfile_size=25% will create a root-image.cow of 250M instead of 1000M. --- README | 5 +++++ archiso/initcpio/hooks/archiso | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README b/README index ce8d355..c33f444 100644 --- a/README +++ b/README @@ -65,6 +65,11 @@ INDEX Size is in bytes (suffix with "k", "m" and "g") or in percentage of available RAM. Default: "75%" +* cowfile_size= Set the size for all files to be used as COW (dm-snapshot), + in percentage of the ro-device.fs file. This is mostly useful + when cow_device= is used and filesystem does not support + sparse files (ie VFAT). + Default: "100%" * copytoram_size= Set the size of tmpfs. This space is used for copy of all SquashFS images used, if copytoram=y. Size is in bytes (suffix with "k", "m" and "g") or diff --git a/archiso/initcpio/hooks/archiso b/archiso/initcpio/hooks/archiso index 5b94743..491ed2f 100644 --- a/archiso/initcpio/hooks/archiso +++ b/archiso/initcpio/hooks/archiso @@ -11,13 +11,14 @@ _mnt_fs() { ro_dev=$(losetup --find --show --read-only "${img}") echo ${ro_dev} >> /run/archiso/used_block_devices ro_dev_size=$(blockdev --getsz ${ro_dev}) + rw_dev_size=$((ro_dev_size*cowfile_size/100)) if [[ "${cow_persistent}" == "P" ]]; then if [[ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]]; then msg ":: Found '/run/archiso/cowspace/${cow_directory}/${img_name}.cow', using as persistent." else msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as persistent." - dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.cow" count=0 seek=${ro_dev_size} &> /dev/null + dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.cow" count=0 seek=${rw_dev_size} &> /dev/null fi else if [[ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]]; then @@ -25,7 +26,7 @@ _mnt_fs() { rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" fi msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as non-persistent." - dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.cow" count=0 seek=${ro_dev_size} &> /dev/null + dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.cow" count=0 seek=${rw_dev_size} &> /dev/null fi rw_dev=$(losetup --find --show "/run/archiso/cowspace/${cow_directory}/${img_name}.cow") @@ -101,6 +102,11 @@ run_hook() { [[ -z "${archisobasedir}" ]] && archisobasedir="arch" [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch" [[ -z "${archisodevice}" ]] && archisodevice="/dev/disk/by-label/${archisolabel}" + if [[ -z "${cowfile_size}" ]]; then + cowfile_size="100" + else + cowfile_size=${cowfile_size/%} + fi if [[ -z "${aitab}" ]]; then aitab="/run/archiso/bootmnt/${archisobasedir}/aitab" -- 1.7.12.2