Mi configuración requiere que algunos de mis /etc
archivos residan en una partición separada. Para ello he creado un enlace suave:
ls -li /etc/group
956 lrwxrwxrwx 1 root root 21 May 7 15:48 /etc/group -> /var/common/etc/group
ls -li /var/common/etc/group
3145744 -rw-r--r-- 1 root root 668 May 11 11:02 /var/common/etc/group
Mi problema es cuando intento ejecutar comandos usando estos archivos:
groupadd foo
groupadd: failure while writing changes to /etc/group
strace
informes:
rename("/etc/group+", "/var/common/etc/group") = -1 EXDEV (Invalid cross-device link)
write(2, "groupadd: failure while writing "..., 54groupadd: failure while writing changes to /etc/group
) = 54
¿Alguna idea de cómo puedo ponerme groupadd
a trabajar?
Respuesta1
Dividir archivos /etc
entre particiones es una mala idea por este motivo.
Lo que sucede es que la groupadd
utilidad crea un archivo temporal y luego reemplaza el /etc/groups
archivo real (o más bien, lo que apunta el enlace simbólico) con el temporal mediante una rename
operación simple.
El problema es que rename()
solo funciona en el mismo sistema de archivos; de lo contrario, arroja un error.
Otro problema potencial con el que te puedes encontrar aquí es que cuando algo va a hacer el archivo rename
, bloquea el enlace simbólico y ahora es un archivo normal.
Otro problema potencial es que /etc
se requieren muchos archivos para un inicio adecuado, antes de que el sistema tenga la oportunidad de montar otros volúmenes. Por lo tanto, esos archivos en realidad faltarán.
En resumen, no, esto no se puede arreglar. Y no debería hacerse de todos modos.
Respuesta2
/etc
está destinado a estar en el sistema de archivos raíz. Lo más sensato es mantenerlo así.
Si realmente necesita dividir /etc
, es posible que obtenga mejores resultados con un soporte de unión. Sin embargo, no sé si Linux admite montajes de unión donde uno de los componentes coincide con el punto de montaje, y sería difícil no hacer que lo real /etc
en el sistema de archivos raíz forme parte del montaje de unión.
Si desea colocar todo /etc
en una partición diferente, puede crear un mínimo /etc
que contenga justo lo que se necesita ( /etc/fstab
, lo que necesita init ( /etc/inittab
o /etc/init
y /etc/rc*
o lo que sea que use su sistema de inicio), mínimo /etc/passwd
y /etc/group
, etc.). Temprano durante el arranque (¡mucho antes que /etc/rc.local
!), realice el montaje vinculante /var/common/etc
en /etc
. Pero eso requerirá mucho trabajo para hacerlo bien y el resultado será /var/common/etc
el conjunto /etc
, que probablemente no sea lo que desea. Esta configuración tiene sentido principalmente para algunos sistemas integrados que no utilizan ninguno de los sistemas de inicio habituales y tienen una restricción estricta en el tamaño del sistema de archivos raíz.
Si tiene un /var/common
servidor compartido entre muchos servidores, debe abordar el problema de manera diferente. Utilice un sistema de gestión de configuración adecuado para implementar archivos compartidos en /etc
.
Un archivo como /etc/passwd
y /etc/group
no debe compartirse entre máquinas. Utilice estos archivos sólo para usuarios y grupos locales. Para entradas que se comparten entre máquinas, utilice NIS o LDAP.