diff --git a/cleanup_image.sh b/cleanup_image.sh index cd91612..8474aeb 100644 --- a/cleanup_image.sh +++ b/cleanup_image.sh @@ -26,12 +26,24 @@ if [[ -d "${mount}" ]]; then (cat /dev/zero >"${mount}/zero.fill" 2>/dev/null || true); sync; rm -f "${mount}/zero.fill" fi - umount "${mount}/dev/pts" || fuser -ckv "${mount}/dev/pts" || umount --force --lazy "${mount}/dev/pts" || true - umount "${mount}/dev" || fuser -ckv "${mount}/dev" || umount --force --lazy "${mount}/dev" || true - umount "${mount}/proc" || fuser -ckv "${mount}/proc" || umount --force --lazy "${mount}/proc" || true - umount "${mount}/sys" || fuser -ckv "${mount}/sys" || umount --force --lazy "${mount}/sys" || true - umount "${mount}/boot" || fuser -ckv "${mount}/boot" || umount --force --lazy "${mount}/boot" || true - umount "${mount}" || fuser -ckv "${mount}" || umount --force --lazy "${mount}" || true + for mp in "${mount}/dev/pts" "${mount}/dev" "${mount}/proc" "${mount}/sys" "${mount}/boot" "${mount}" ; do + mountpoint "${mp}" && { + retries=0 + force="" + while ! umount ${force} "${mp}" ; do + retries=$((retries + 1)) + if [ "${retries}" -ge 10 ]; then + echo "Could not unmount ${mp} after ${retries} attempts, giving up." + exit 1 + fi + if [ "${retries}" -eq 5 ]; then + force="--force" + fi + fuser -ckv "${mp}" + sleep 1 + done + } + done if [[ "${optimize}x" == "x" || "${optimize}x" == "yesx" ]]; then rootfs_partnum=${rootpartition}