diff mbox series

[bug#66448] image: Add 'lba partition label.

Message ID xfgq5yq6qbqweg5mwx6e6srwucjpmthpsvj72o7zf3yqlfdgt6@gvf4couknkqz
State New
Headers show
Series [bug#66448] image: Add 'lba partition label. | expand

Commit Message

Gabriel Wicki Oct. 10, 2023, 4:29 p.m. UTC
Some (embedded) system create FAT32/LBA partitions first, i thought this
is too easy to not include in Guix.

Please let me know if I can improve anything!

TIA for review and merge


From c5080162e8a77f60aaf9a967a896f57c113dde47 Mon Sep 17 00:00:00 2001
Message-ID: <c5080162e8a77f60aaf9a967a896f57c113dde47.1696954175.git.gabriel@erlikon.ch>
From: Gabriel Wicki <gabriel@erlikon.ch>
Date: Tue, 10 Oct 2023 18:02:04 +0200
Subject: [PATCH] image: Add 'lba partition label.

* gnu/image.scm (validate-partition-flags): Add lba to the valid flags.
* doc/guix.texi ('partition' Reference): Document it.
---
 doc/guix.texi | 10 ++++++----
 gnu/image.scm |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)


base-commit: f4e8baf3806e79d7111d2943859865ae4ee0b59d

Comments

Mathieu Othacehe Oct. 11, 2023, 8:51 a.m. UTC | #1
Hello,

> +  (let ((bad-flags (lset-difference eq? value '(boot esp lba))))

I may be missing something, but don't we need something in
make-vfat-image of (gnu build image) to take that one into account?

Thanks,

Mathieu
Gabriel Wicki Oct. 11, 2023, 8:55 a.m. UTC | #2
I didn't follow the whole source tree to figure out how all of this
works, but this tiny change makes the image partition show up as LBA.
Mathieu Othacehe Oct. 13, 2023, 1:02 p.m. UTC | #3
Hello,

> I didn't follow the whole source tree to figure out how all of this
> works, but this tiny change makes the image partition show up as LBA.

I had a closer look, this flag has no effect at all. If the 'esp flag is
set then the MBR partition type is set to 0xEF (EFI partition). If the
flag is removed, then depending on the file-system type: "fat16"
or "fat32", the partition type will be 0x0E or 0x0C which are
respectively FAT16 with LBA an FAT32 with LBA.

I guess that by removing the 'esp flag and adding the 'lba flag you
ended up with an LBA partition. That was the consequence of removing the
'esp flag, not adding the 'lba flag.

The partition type is specified in the partition->dos-type procedure of
(gnu system image). The corresponding types can be found here:
https://en.wikipedia.org/wiki/Partition_type.

We could improve the documentation here by stating that fat16 and fat32
partitions are by default LBA compatible, but the source modification in
not needed.

Thanks,

Mathieu
diff mbox series

Patch

diff --git a/doc/guix.texi b/doc/guix.texi
index ad26a29513..95aae6ac02 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -45590,10 +45590,12 @@  partition Reference
 
 @item @code{flags} (default: @code{'()})
 The partition flags as a list of symbols.  Possible values are
-@code{'boot} and @code{'esp}.  The @code{'boot} flags should be set if
-you want to boot from this partition.  Exactly one partition should have
-this flag set, usually the root one. The @code{'esp} flag identifies a
-UEFI System Partition.
+@code{'boot}, @code{'esp} and @code{'lba}.  The @code{'boot} flags
+should be set if you want to boot from this partition.  Exactly one
+partition should have this flag set, usually the root one. The
+@code{'esp} flag identifies a UEFI System Partition.  The @code{'lba}
+flag @acronym{LBA, Local Block Addressing} allows for bigger FAT
+partitions than 8GiB.
 
 @item @code{initializer} (default: @code{#false})
 The partition initializer procedure as a gexp.  This procedure is called
diff --git a/gnu/image.scm b/gnu/image.scm
index 523653dd77..493aea94cd 100644
--- a/gnu/image.scm
+++ b/gnu/image.scm
@@ -100,7 +100,7 @@  (define-with-syntax-properties (validate-partition-offset (value properties))
 
 ;; The supported partition flags.
 (define-with-syntax-properties (validate-partition-flags (value properties))
-  (let ((bad-flags (lset-difference eq? value '(boot esp))))
+  (let ((bad-flags (lset-difference eq? value '(boot esp lba))))
     (unless (and (list? value) (null? bad-flags))
       (raise
        (make-compound-condition