Hello Florian & Thomas, I was able to reproduce the issue: ‘guix system disk-image --file-system-format=iso9660’ would create partly unreadable images.
Since this was pretty much like the issue I had encountered with ‘guix system docker-image’, which would produce truncated tarballs, and since calling ‘sync’ wasn’t enough, I looked at our file system mount options… The attached patch fixes the problem for me. In hindsight, it’s not surprising that “cache=loose” on the /xchg mount point (used to exchange data between the host and the guest) would have this effect. Florian, it would be great if you could confirm. Just apply it on ‘master’, and then run: ./pre-inst-env guix system disk-image --file-system-format=iso9660 \ gnu/system/install.scm Thanks, and apologies for blaming Xorriso, which presumably never had anything to do with it! Ludo’.
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index db9b1707d7..22e3fcc522 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -94,6 +94,12 @@ (define %linux-vm-file-systems ;; File systems mounted for 'derivation-in-linux-vm'. These are shared with ;; the host over 9p. + ;; + ;; The 9p documentation says that cache=loose is "intended for exclusive, + ;; read-only mounts", without additional details. It's much faster than the + ;; default cache=none, especially when copying and registering store items. + ;; Thus, use cache=loose, except for /xchg where we want to ensure + ;; consistency. (list (file-system (mount-point (%store-prefix)) (device "store") @@ -102,18 +108,12 @@ (flags '(read-only)) (options "trans=virtio,cache=loose") (check? #f)) - - ;; The 9p documentation says that cache=loose is "intended for - ;; exclusive, read-only mounts", without additional details. In - ;; practice it seems to work well for these, and it's much faster than - ;; the default cache=none, especially when copying and registering - ;; store items. (file-system (mount-point "/xchg") (device "xchg") (type "9p") (needed-for-boot? #t) - (options "trans=virtio,cache=loose") + (options "trans=virtio") (check? #f)) (file-system (mount-point "/tmp") @@ -530,10 +530,7 @@ should set REGISTER-CLOSURES? to #f." #$os #:compressor '(#+(file-append gzip "/bin/gzip") "-9n") #:creation-time (make-time time-utc 0 1) - #:transformations `((,root-directory -> ""))) - - ;; Make sure the tarball is fully written before rebooting. - (sync)))))) + #:transformations `((,root-directory -> "")))))))) (expression->derivation-in-linux-vm name build #:make-disk-image? #f