X-Git-Url: http://git.grml.org/?a=blobdiff_plain;ds=sidebyside;f=scripts%2Fcasper-helpers;h=f8bd206bf971ecbf6bdd45ed95174071e8eedfc6;hb=refs%2Ftags%2Fdebian%2F1.79%2Bdebian-1;hp=61d801911bcd73ab0bcd00d4b1d9a4fff49aa118;hpb=112ee0e018e658f0c6dfb0bee32be19ae67ce00f;p=live-boot-grml.git diff --git a/scripts/casper-helpers b/scripts/casper-helpers index 61d8019..f8bd206 100644 --- a/scripts/casper-helpers +++ b/scripts/casper-helpers @@ -6,6 +6,11 @@ else MP_QUIET="-q" fi +if [ ! -x "/bin/fstype" ]; then + # klibc not in path -> not in initramfs + export PATH="${PATH}:/usr/lib/klibc/bin" +fi + sys2dev() { sysdev=${1#/sys} echo "/dev/$(udevinfo -q name -p ${sysdev} 2>/dev/null|| echo ${sysdev##*/})" @@ -22,6 +27,17 @@ subdevices() { echo ${r} } +get_fstype() { + local FSTYPE + local FSSIZE + eval $(fstype < $1) + if [ "$FSTYPE" != "unknown" ]; then + echo $FSTYPE + return 0 + fi + /lib/udev/vol_id -t $1 2>/dev/null +} + where_is_mounted() { device=$1 if grep -q "^$device " /proc/mounts; then @@ -56,39 +72,45 @@ base_path () done } -used_fs_size () +fs_size () { - # Returns used fs kbytes + 5% more + # Returns used/free fs kbytes + 5% more # You could pass a block device as $1 or the mount point as $2 dev="${1}" mountp="${2}" + used="${3}" if [ -z "${mountp}" ]; then mountp=$(where_is_mounted "${dev}") if [ "$?" -gt 0 ]; then - mountp=/mnt/tmp_fs_size + mountp="/mnt/tmp_fs_size" mkdir -p "${mountp}" mount -t $(get_fstype "${dev}") -o ro "${dev}" "${mountp}" doumount=1 fi fi - size=$(du -ks ${mountp} | cut -f1) - size=$(expr ${size} + ${size}/20 ) # FIXME: 5% more to be sure - needed_space=$(expr ${size} * 1024) + if [ "${used}" = "used" ]; then + size=$(du -ks ${mountp} | cut -f1) + size=$(expr ${size} + ${size} / 20 ) # FIXME: 5% more to be sure + else + # free space + size="$(df -k | grep -s ${mountp} | awk '{print $4}')" + fi - if [ ! -z "${doumount}" ]; then + if [ -n "${doumount}" ]; then umount "${mountp}" rmdir "${mountp}" fi - echo "${needed_space}" + echo "${size}" } setup_loop() { local fspath=$1 local module=$2 local pattern=$3 + local offset=$4 modprobe "${MP_QUIET}" -b "$module" udevsettle @@ -96,7 +118,11 @@ setup_loop() { for loopdev in $pattern; do if [ "$(cat $loopdev/size)" -eq 0 ]; then dev=$(sys2dev "${loopdev}") - losetup "$dev" "$fspath" + if [ -n "$offset" ]; then + losetup -o "$offset" "$dev" "$fspath" + else + losetup "$dev" "$fspath" + fi echo "$dev" return 0 fi