Re: sbuild on hurd-amd64...
Le 22/08/2025 à 15:47, Stéphane Glondu a écrit :
FI, apparently ATM when using a file as image, libstore uses 1-byte
block size, and thus disk sizes should be smaller than 2G otherwise
boot's device size reporting interface gets wrong.
(an alternative is to use a disk partition, which report 512-byte block
size)
Perhaps we could make libstore use 512-byte block size when the file is
multiple of 512 bytes. It could also be configurable, by introducing a
libstore layer (similarly to the part libstore layer)
It makes sense, but I'm not yet there.
I've implemented the first idea. With the attached patch, I can boot a
subhurd with a 3G image. (Without, I cannot.)
Cheers,
--
Stéphane
From ab82e4e6065e523e9bb0e733e9c9d58c126f29c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Glondu?= <steph@glondu.net>
Date: Sat, 23 Aug 2025 09:03:53 +0100
Subject: [PATCH] libstore/file.c: use 512-byte blocks if file size is a
multiple
As suggested in:
[🔎] aKheR0SX8yI5Aw9Q@begin">https://lists.debian.org/msgid-search/[🔎] aKheR0SX8yI5Aw9Q@begin
---
libstore/file.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/libstore/file.c b/libstore/file.c
index c54eee9..7c08d4b 100644
--- a/libstore/file.c
+++ b/libstore/file.c
@@ -271,6 +271,7 @@ store_file_create (file_t file, int flags, struct store **store)
struct store_run run;
struct stat stat;
error_t err = io_stat (file, &stat);
+ size_t block_size = 1;
if (err)
return err;
@@ -278,9 +279,14 @@ store_file_create (file_t file, int flags, struct store **store)
run.start = 0;
run.length = stat.st_size;
+ if ((stat.st_size & 0x1ff) == 0) {
+ block_size = 512;
+ run.length = stat.st_size >> 9;
+ }
+
flags |= STORE_ENFORCED; /* 'cause it's the whole file. */
- return _store_file_create (file, flags, 1, &run, 1, store);
+ return _store_file_create (file, flags, block_size, &run, 1, store);
}
/* Like store_file_create, but doesn't query the file for information. */
--
2.50.1
Reply to: