echo
echo "Options:"
echo " -c, --cow: specifies the copy on write directory (default: /cow)."
- echo " -d, --destination: specifies the output snapshot directory (default: /home/\$USERNAME/Desktop/casper-snapshot)."
+ echo " -d, --device: specifies the output snapshot device (default: none)."
echo " -o, --output: specifies the output image file (default: $type dependent)."
echo " -r, --resync-string: internally used to resync previous made snapshots."
echo " -t,--type: specifies the snapshot type between \'squashfs\', \'ext2\' or \'cpio\'.gz archive (default: cpio)"
{
# Parse command line
ARGS="${1}"
- ARGUMENTS="`getopt --longoptions cow:,destination:,output:,type:,help,usage,version --name=${PROGRAM} --options c:d:o:t:,h,u,v --shell sh -- ${ARGS}`"
+ ARGUMENTS="`getopt --longoptions cow:,device:,output,resync-string:,type:,help,usage,version --name=${PROGRAM} --options c:d:o:t:r:,h,u,v --shell sh -- ${ARGS}`"
if [ "${?}" != "0" ]; then
echo "Terminating." >&2
DEST=$(echo "${SNAP_RSTRING}" | cut -f3 -d ':')
case "${DEST}" in
- *.cpio.gz|*.cpz|*.gz)
+ *.cpio.gz)
TYPE="cpio" ;;
- *.squashfs|*.squ})
+ *.squashfs)
TYPE="squashfs" ;;
"")
TYPE="ext2" ;;
- *.ext2|*.ext)
+ *.ext2)
TYPE="ext2" ;;
*)
Usage "Unregognized String" ;;
+casper (1.77+debian-3) unstable; urgency=medium
+
+ * Fixed "todisk=" parsing.
+ * Urgency is set to medium to try reaching Etch with important
+ features/bugfixes.
+
+ -- Marco Amadori <marco.amadori@gmail.com> Wed, 1 Nov 2006 11:15:56 +0100
+
casper (1.77+debian-2) unstable; urgency=medium
[ Marco Amadori ]
export NETBOOT=${x#netboot=} ;;
toram)
export TORAM=1 ;;
- todisk=)
+ todisk=*)
export TODISK=${x#todisk=} ;;
showmounts)
export SHOWMOUNTS=1 ;;
fi
}
-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
-}
-
is_nice_device() {
sysfs_path="${1#/sys}"
if /lib/udev/path_id "${sysfs_path}" | grep -E -q "ID_PATH=(usb|pci-[^-]*-[ide|scsi|usb])"; then
copytodev="${2}"
copyto="${copyfrom}_swap"
- size=$(used_fs_size "null" "${copyfrom}")
+ size=$(fs_size "" ${copyfrom} "used")
if [ "${copytodev}" = "ram" ]; then
# copying to ram:
else
# it should be a writable block device
if [ -b "${copytodev}" ]; then
- free_string="space"
- freespace="$(df -k ${copytodev} | grep -s ${copytodev} | awk '{print $4}')"
- fstype="$(get_fstype ${devname})"
dev="${copytodev}"
+ free_string="space"
+ fstype=$(get_fstype "${dev}")
+ freespace=$(fs_size "${dev}")
else
+ [ "$quiet" != "y" ] && log_warning_msg "${copytodev} is not a block device."
return 1
fi
fi
- if [ ! ${freespace} -lt ${size} ] ; then
- [ "$quiet" != "y" ] && log_begin_msg "Not enough free ${free_string} to copy live media in ${copytodev}."
- [ "$quiet" != "y" ] && log_end_msg
+ if [ "${freespace}" -lt "${size}" ] ; then
+ [ "$quiet" != "y" ] && log_warning_msg "Not enough free ${free_string} (${freespace}k > ${size}k) to copy live media in ${copytodev}."
return 1
fi
# begin copying..
- [ "$quiet" != "y" ] && log_begin_msg "Copying live media to ${copytodev}..."
mkdir "${copyto}"
+ echo "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
umount ${copyfrom}
mount -r -o move ${copyto} ${copyfrom}
rmdir ${copyto}
- [ "$quiet" != "y" ] && log_end_msg
return 0
}
todir="${2}"
snap_type="${3}"
- #size=$(used_fs_size "${fromdev}")
+ size=$(fs_size "${fromdev}" "" "used")
if [ -b "${fromdev}" ]; then
# look for free mem
panic "Unable to find a medium containing a live file system"
fi
- if [ ! -z "${TORAM}" ]; then
- copy_live_to "${livefs_root}" "ram"
- elif [ ! -z "${TODISK}" ]; then
- copy_live_to "${livefs_root}" "${TODISK}"
+ if [ -n "${TORAM}" ]; then
+ live_dest="ram"
+ elif [ -n "${TODISK}" ]; then
+ live_dest="${TODISK}"
+ fi
+ if [ -n "${live_dest}" ]; then
+ [ "$quiet" != "y" ] && log_begin_msg "Copying live_media to ${live_dest}"
+ copy_live_to "${livefs_root}" "${live_dest}"
+ [ "$quiet" != "y" ] && log_end_msg
fi
mount_images_in_directory "${livefs_root}" "${rootmnt}"
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##*/})"
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
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() {