[arch-releng] [RFC] [PATCH] [archiso] Introduce cowfile_size= bootparam

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Mon Oct 8 04:06:28 EDT 2012


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



More information about the arch-releng mailing list