mkcomposefs: building from a directory silently loses hardlinks
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- c, linux
- Área
- operating-systems, tooling
Línea de trabajo
Reproduce el problema con el comando de directorio mkcomposefs mostrado y, después, inspecciona la salida de composefs-info dump y fsverity digest para el árbol con enlaces duros. Compara el resultado con el comportamiento de cfsctl y --from-file; se considera terminado cuando las dos entradas de directorio conservan el inode compartido y los metadatos de los enlaces, informan del tamaño correcto del árbol y producen el digest esperado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When building from a directory (mkcomposefs <dir> <out>), hardlinked files are emitted as independent inodes. It leads to two consequences:
-
the image's fs-verity digest differs from what any hardlink-aware builder produces for the same tree (image identity depends on the toolchain);
-
the mounted image misreports the mount dir/tree size (and nlink=1, distinct inodes).
This issue is reproducible on v1.0.8 and current main (on 07/28/2026).
The steps to reproduce it:
$ mkdir tree && dd if=/dev/zero of=tree/big bs=1M count=100 && ln tree/big tree/big-link
$ du -sh --apparent-size tree
100M tree
$ mkcomposefs --digest-store=objects --min-version=1 --max-version=1 tree tree.cfs
$ composefs-info dump tree.cfs
/ 4096 40755 2 ...
/big 104857600 100644 1 ... 62/37f0e7... - 6237f0e7...
/big-link 104857600 100644 1 ... 62/37f0e7... - 6237f0e7...
$ fsverity digest tree.cfs
sha256:88d2ef4f83caccd657e6e6844144ffa67dc155a8fe3476e4b8859d5d05643f7c tree.cfs
$ mkdir mnt && mount -t composefs -o basedir=objects tree.cfs mnt
$ du -sh --apparent-size mnt/
200M mnt/
The hardlink is gone: two full entries, nlink=1 each.
composefs-rs's cfsctl, reading the same directory into the same V1 format, disagrees:
$ cfsctl --no-repo --hash sha256 --erofs-version 1 compute-id --no-propagate-usr-to-root tree
18c06b7c0b8cc959d23f2e2a7e1fccb2f402f6cc6052e936be4ee41686127015
(The flags only remove unrelated differences: cfsctl otherwise defaults to SHA-512 and propagates "/usr" metadata to the root inode.)
Control: replace the ln with cp and both tools emit the identical digest, the writers agree byte-for-byte at baseline, so the hardlink is the only issue here. This breaks any digest-based cross-check between images built from a directory and by hardlink-aware tools like composefs-rs, or mkcomposefs --from-file).
- Lenguaje dominante
- C
- Estrellas
- 694
- Forks
- 55
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de composefs/composefs
-
test/command failure with filtered `listxattr` syscallPosiblemente ocupada @Kiskae la tomó hace 3 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dependency DashboardAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 25/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
Enable `nfs_export` option when mounting overlay (or at least add a mount options flag for it)Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Todos los issues de composefs/composefs
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
libsdl-org/SDL#16539 ·
Los mantenedores suelen responder en 1 día
-
git-workflow task-4
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
dosemu2/dosemu2#3178 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Los mantenedores suelen responder en 1 día