diff --git a/src/rollback.sh b/src/rollback.sh index 3f6109c..5171c17 100644 --- a/src/rollback.sh +++ b/src/rollback.sh @@ -58,11 +58,24 @@ rollback_offer() { rollback_cleanup() { : "${MOUNT_ROOT:?Mount root is required}" : "${CRYPT_NAME:?Crypt mapping name is required}" + + # Clean up bind mounts first (from postinstall) + if [[ -d "$MOUNT_ROOT" ]]; then + for bind_path in dev proc sys run; do + if findmnt "$MOUNT_ROOT/$bind_path" >/dev/null 2>&1; then + log_info "Unmounting bind mount: $MOUNT_ROOT/$bind_path" + umount -R "$MOUNT_ROOT/$bind_path" 2>/dev/null || log_warn "Failed to unmount $MOUNT_ROOT/$bind_path" + fi + done + fi + + # Clean up regular mounts if findmnt "$MOUNT_ROOT" >/dev/null 2>&1; then log_info "Unmounting $MOUNT_ROOT" umount -R "$MOUNT_ROOT" || log_warn "Failed to unmount $MOUNT_ROOT" fi + # Close LUKS mapping if [[ -e "/dev/mapper/$CRYPT_NAME" ]]; then log_info "Closing LUKS mapping $CRYPT_NAME" cryptsetup close "$CRYPT_NAME" || log_warn "Failed to close LUKS mapping"