Hi! I just tested your patch, Danny (last version attached): I took the image at and then did: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> ,m (gnu build file-systems) scheme@(gnu build file-systems)> (define sb (read-iso9660-superblock "/tmp/debian-8.7.1-amd64-netinst.iso.part")) scheme@(gnu build file-systems)> (iso9660-superblock-volume-name sb) $2 = "Debian 8.7.1 amd64 1" scheme@(gnu build file-systems)> (iso9660-superblock-uuid sb) $3 = #vu8(50 48 49 55 48 49 49 54 49 49 48 49 48 49 48 48 0) scheme@(gnu build file-systems)> (bytevector-length $3) $4 = 17 scheme@(gnu build file-systems)> (uuid->string $3) $5 = "32303137-3031-3136-3131-303130313030" --8<---------------cut here---------------end--------------->8--- Seems to work! Could you clarify the two “See grub” in here: --8<---------------cut here---------------start------------->8--- (define (iso9660-superblock-uuid sblock) "Return the Volume ID of a iso9660 superblock SBLOCK as a 4-byte bytevector." ;; Note: The field is the volume creation time. ;; FIXME Use only certain parts (See grub). ;; FIXME treat "all 0" as invalid. (sub-bytevector sblock 813 17)) ;; FIXME make result human-readable (See grub). ;(define (iso9660-uuid->string uuid) --8<---------------cut here---------------end--------------->8--- Should ‘iso9660-uuid->string’ be different from ‘uuid->string’? Anyway, I think we should polish and commit real soon. :-) Perhaps we can add a note about endianness and assume little endian for now. Thank you Danny! Ludo’.