¿El kernel elimina entradas en /dev en un initramfs?

¿El kernel elimina entradas en /dev en un initramfs?

Tengo un sistema Linux integrado, mínimo y totalmente personalizado (vainilla, 3.3.8, i486, Vortex86dx) que arranca desde una imagen initramfs. No se utilizan scripts de distribución estándar, solo un único archivo rcS que realiza la inicialización.

Tengo un disco Flash IDE con dos particiones en /dev/hda1 y /dev/hda2.

Como se trata de una distribución integrada mínima para un sistema fijo, tiene un directorio estático /dev que contiene /dev/hda1 y /dev/hda2, y no hay UDEV.

En el momento en que init llama a rcS, la entrada /dev/hda1 ya no está presente. No se han ejecutado otros scripts, aplicaciones de usuario o demonios en este momento. /dev/hda1aparecehaber sido eliminado por el kernel (?)

No tengo el mismo problema si inicio mi objetivo a través de un sistema de archivo raíz NFS durante mi proceso de desarrollo.

Utilizo Buildroot para crear el directorio /dev a través del archivo device_table_dev.txt. p.ej

# IDE Devices
/dev/hda    b   640 0   0   3   0   0   0   -
/dev/hda    b   640 0   0   3   1   1   1   4

Inspeccioné rootfs.tar.gz desde la salida/imágenes de Buildroot. El directorio /dev contiene /dev/hda1:

brw-r-----  1 root root  3,   0 Jul  2 13:44 hda
brw-r-----  1 root root  3,   1 Jul  2 13:44 hda1
brw-r-----  1 root root  3,   2 Jul  2 13:44 hda2
brw-r-----  1 root root  3,   3 Jul  2 13:44 hda3
brw-r-----  1 root root  3,   4 Jul  2 13:44 hda4

La lista de mi directorio posterior al arranque (realizada desde rcS, en la parte superior del script) en el destino se ve así:

brw-r-----   1 root   root    3,   0 Jul  2 12:44 hda
brw-r-----   1 root   root    3,   2 Jul  2 12:44 hda2
brw-r-----   1 root   root    3,   3 Jul  2 12:44 hda3
brw-r-----   1 root   root    3,   4 Jul  2 12:44 hda4

Falta /dev/hda1. /dev/hda2 es una partición en el mismo disco pero todavía está allí. Extraño.

Si ejecuto la utilidad Busybox "mdev -s", restaura/dev/hda1 en el destino y funciona normalmente. por ejemplo puedo montarlo

¿Alguien ha visto este comportamiento antes?

¿El kernel elimina entradas de /dev?

Respuesta1

El udevsubsistema crea y monta un tmpfssistema de archivos en /devel momento del arranque. El contenido lo completa el kernel a medida que se detectan los dispositivos. Dado que tmpfsreside en la memoria virtual, no es persistente, por lo que los cambios no sobreviven después de los reinicios. Incluso si ya tiene uno /dev, al montar el nuevo sistema de archivos se oculta el directorio y parece que se han eliminado todos los especiales de su dispositivo. No lo han hecho, pero el resultado final es el mismo: las ofertas especiales no están donde esperas.

Sospecho que encontrará que sus entradas hday hdaXhan sido reemplazadas por entradas sday sdaX. Alternativamente, consulte /proc/devicesy /proc/partitionspara obtener el nombre udevasignado a la unidad.

A veces, una solución rápida y sucia fdisk -l /dev/[sh]d[a-z]puede ayudar (funciona mejor si tiene menos de 26 discos de cada tipo).

Por cierto, el esquema de nombres utilizado por udevestá estandarizado y su estática /devpodría ser peor que seguir las convenciones. Si udevcree que es así /dev/sda, adelante. Podrías escapar de posibles rarezas y malentendidos en el futuro.

información relacionada