diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 92e92237b64398876c6770fb37e18c9bd110be3a..69bd05b516f0243c2c79329eae3916795d6e9ab6 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -126,7 +126,11 @@ (define* (copy-item item references target
     ;; Remove DEST if it exists to make sure that (1) we do not fail badly
     ;; while trying to overwrite it (see <http://bugs.gnu.org/20722>), and
     ;; (2) we end up with the right contents.
-    (when (file-exists? dest)
+    (when (false-if-exception (lstat dest))
+      (for-each make-file-writable
+                (find-files dest (lambda (file stat)
+                                   (eq? 'directory (stat:type stat)))
+                            #:directories? #t))
       (delete-file-recursively dest))
 
     (copy-recursively item dest