Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

mkcomposefs: building from a directory silently loses hardlinks

Abierto
#444 5 comentarios 0 reacciones 0 asignados Ver en GitHub

@cgwalters ya está trabajando en esto.

Desde el 28/7/2026.

  • #446 de @cgwalters — abierto

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

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:

  1. the image's fs-verity digest differs from what any hardlink-aware builder produces for the same tree (image identity depends on the toolchain);

  2. 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

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de composefs/composefs

Todos los issues de composefs/composefs

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.