[arch-releng] [PATCH 1/1] allow to grow devices

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Thu Aug 29 18:31:29 EDT 2013


On 08/29/2013 10:55 AM, Christian Hesse wrote:
> From: Christian Hesse <mail at eworm.de>
> 
> actually cowfile_size is limited to values smaller or equal to 100. That
> way you have to decide at iso build time what size your filesystems should
> have.
> 
> I have added a feature to allow values bigger than 100: In this case the
> read only device is linearly assembled with a sparse file (we do not have
> to care about size on disk as no write go to this file), this device is
> used for read only device then. After chroot (or when the system has
> bootet up) you can grow your filesystem to the new size.
> 
> Growing the filesystem in initramfs would be possible, but we would have
> to add userspace utilities (resize2fs, xfs_growfs, ...) there...
> ---
>  archiso/initcpio/hooks/archiso | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/archiso/initcpio/hooks/archiso b/archiso/initcpio/hooks/archiso
> index 66a6273..94d5a99 100644
> --- a/archiso/initcpio/hooks/archiso
> +++ b/archiso/initcpio/hooks/archiso
> @@ -6,13 +6,28 @@ _mnt_fs() {
>      local img_fullname="${img##*/}";
>      local img_name="${img_fullname%%.*}"
>      local dm_snap_name="${dm_snap_prefix}_${img_name}"
> -    local ro_dev ro_dev_size rw_dev
> +    local ro_dev ro_dev_size rw_dev rw_dev_size pad_dev pad_dev_size
>  
>      ro_dev=$(losetup --find --show --read-only "${img}")
>      echo ${ro_dev} >> /run/archiso/used_block_devices
>      ro_dev_size=$(blockdev --getsz ${ro_dev})
> +
>      if [[ "${cowfile_size}" == "100" ]]; then
>          rw_dev_size=${ro_dev_size}
> +    elif [[ "${cowfile_size}" -gt 100 ]]; then
> +        pad_dev_size=$((ro_dev_size/100*cowfile_size - ro_dev_size))
> +        dd of="/run/archiso/cowspace/${cow_directory}/${img_name}.pad" count=0 seek=${pad_dev_size} &> /dev/null
> +        pad_dev=$(losetup --find --show --read-only "/run/archiso/cowspace/${cow_directory}/${img_name}.pad")
> +        echo ${pad_dev} >> /run/archiso/used_block_devices
> +        # this is just a sparse file that never gets written to, so just delete it
> +        rm "/run/archiso/cowspace/${cow_directory}/${img_name}.pad"
> +        echo -e "0 ${ro_dev_size} linear ${ro_dev} 0\n${ro_dev_size} ${pad_dev_size} linear ${pad_dev} 0" | dmsetup create "ro_${dm_snap_name}"
> +
> +        ro_dev="/dev/mapper/ro_${dm_snap_name}"
> +        ro_dev_size="$((ro_dev_size + pad_dev_size))"
> +        rw_dev_size="${ro_dev_size}"
> +
> +        msg ":: Device ${dm_snap_name} has been grown, remember to grow your filesystem!"
>      else
>          # size calculation done in this way to avoid integer overflow when ro_dev_size is > 10.2G
>          rw_dev_size=$((ro_dev_size/100*cowfile_size))
> 

Too much complex, and some sematics broken (for example, you are mixing
terms for setting non-cowdevices or storing non-cow file inside
cowspace, missing proper device shutdown, ...)

Why not just use a value above 100%? ;)

Thanks for your interest on improving archiso :)

-- 
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 555 bytes
Desc: OpenPGP digital signature
URL: <http://mailman.archlinux.org/pipermail/arch-releng/attachments/20130829/44253703/attachment.asc>


More information about the arch-releng mailing list