diff --git a/src/scripts/backup_nocloud.sh b/src/scripts/backup_nocloud.sh
index f6e4908203a1af3482b1c7dda2578b984763a80b..2817ee320d110455b7df13fb98826f5f324e97b7 100755
--- a/src/scripts/backup_nocloud.sh
+++ b/src/scripts/backup_nocloud.sh
@@ -43,10 +43,11 @@ premier(){
 
 # Supprime la sauvegarde la plus ancienne
 supprimer_anciennes_sauvegardes(){
-    dir=`premier \`/bin/ls $dest/.. | grep $postfix \``
+    dir=`premier \`/bin/ls $parent_dir | grep $postfix \``
     [ -z "$dir" ] && return 1
     do_log "Plus de place suppression de la sauvegarde la plus ancienne: $dir"
-    rm -rf $dest/../$dir
+    rm -rf $parent_dir/$dir
+    return $?
 }
 
 do_log(){
@@ -122,6 +123,20 @@ sauvegarde_seafile(){
     /srv/$seafile/seafile-server-latest/seaf-fuse.sh stop
 }
 
+# tente de liberer de l'espace si c'est pertinent puis rejoue les commandes
+# passées en arguments
+liberer_espace(){
+    if [ "`df --output=avail $parent_dir  | sed 1d`" -lt $MIN_SIZE ]
+    then
+        supprimer_anciennes_sauvegardes
+        test_and_fail $? "Plus d'espace sur le disque et pas d'ancienne sauvegarde a supprimer"
+        $@
+        ret=$?
+    else
+        test_and_fail 1 "l'action '$@' a planté innopinement"
+    fi
+}
+
 usage(){
     echo "Utilisation $0 [options] device"
     echo "Device doit etre un disque non monté"
@@ -155,6 +170,7 @@ mysql=false
 postgres=false
 encfs=false
 archive=false
+MIN_SIZE=$((1024*1024))
 
 # Transform long options to short ones
 for arg in "$@"; do
@@ -228,7 +244,7 @@ dev=$1
 
 do_log "démarrage le `date`"
 
-[ ! -d $dest ] && mkdir $dest
+[ ! -d "$dest" ] && mkdir "$dest"
 
 /bin/mount -t auto $dev $dest
 test_and_fail $? "Impossible de monter le disque destination, abandon"
@@ -252,8 +268,9 @@ then
 fi
 
 parent_dir=$dest
-dest=$parent_dir/$date$postfix
-mkdir $dest
+dest="$parent_dir/$date$postfix"
+mkdir "$dest"
+[ ! -d "$dest" ] && liberer_espace mkdir "$dest"
 
 for action in $ACTIONS
 do
@@ -261,15 +278,8 @@ do
     ret=$?
     while [ $ret -ne 0 ]
     do
-        if [ "`df --output=avail $parent_dir  | sed 1d`" -lt $((1024*1024)) ]
-        then
-            supprimer_anciennes_sauvegardes
-            test_and_fail $? "Plus d'espace sur le disque et pas d'ancienne sauvegarde a supprimer"
-            $action
-            ret=$?
-        else
-            test_and_fail 1 "l'action '$action' a planté innopinement"
-        fi
+        liberer_espace $action
+        ret=$?
     done
     nom=${action/_/ }
     do_log "$nom reussie"