diff --git a/gnu/packages/linux-initrd.scm b/gnu/packages/linux-initrd.scm
index b62843aadd026c03165d1f7f67f8f2056c397ad2..ed30fa56b162684185228583821ee466cf6a3a71 100644
--- a/gnu/packages/linux-initrd.scm
+++ b/gnu/packages/linux-initrd.scm
@@ -363,8 +363,7 @@ (define-public gnu-system-initrd
         (make-essential-device-nodes)
 
         ;; Prepare the real root file system under /root.
-        (unless (file-exists? "/root")
-          (mkdir "/root"))
+        (mkdir-p "/root")
         (if root
             ;; Assume ROOT has a usable /dev tree.
             (mount root "/root" "ext3")
@@ -374,6 +373,9 @@ (define-public gnu-system-initrd
 
         (mount-essential-file-systems #:root "/root")
 
+        (mkdir-p "/root/tmp")
+        (mount "none" "/root/tmp" "tmpfs")
+
         ;; XXX: We don't copy our fellow Guile modules to /root (see
         ;; 'qemu-initrd'), so if TO-LOAD tries to load a module (which can
         ;; happen if it throws, to display the exception!), then we're