Estoy tratando de entender la diferencia entre usar ln -s
y mount --bind
. En el escenario básico, puedo usar ambos para acceder a un directorio desde otro lugar. ¿En qué escenarios esos dos se comportarán de manera diferente?
command-line
mount
symbolic-link
Łukasz
fuente
fuente
rm -r
de amount --bind
. Con aln
, elimina el enlace, mientras que para a--bind
, tiene el mismo efecto que ejecutarlorm -r
en el objetivo. No es bueno, como encontré poco antes de reconstruir uno de mis servidores ...Respuestas:
Se comportarán de manera diferente en al menos dos casos:
A
) que tienen algo más (B
) montado en ellos. El enlace mostrará el contenido de mount target (B
) en lugar del original (A
).Además, puede enlazar montar un directorio o archivo en un directorio o archivo existente, enmascarando el contenido original (haciendo que el contenido original sea inaccesible a menos que el original se haya montado en otro lugar). Un enlace simbólico requiere que el original se mueva o se elimine.
fuente
Bueno,
ln -s
crea un enlace simbólico, mientras quemount --bind
crea una montura.Un enlace simbólico es un tipo especial de archivo. Si lo hace
ln -s /var/target /var/link
,/var/link
habrá un archivo que contiene la ruta "/var/target
" en él. La única diferencia entre un enlace simbólico y un archivo ordinario es que cuando un programa intenta realizar una operación en un enlace simbólico, la operación generalmente se realiza en el destino en lugar del archivo. Entonces, si lo hacels /var/link
, ells
programa intentará obtener una lista de directorio para/var/link
, pero en realidad obtendrá una lista de directorio para/var/target
.Sin embargo, los enlaces simbólicos siguen siendo solo archivos. Pueden ser renombrados y eliminados y todo ese jazz. Tenga en cuenta que no puede crear un enlace simbólico (o un archivo ordinario)
/var/link
si ya hay un archivo llamado/var/link
; primero deberías deshacerte de él.Un montaje no es un archivo; Es un registro que el núcleo guarda en la memoria. Si lo hace
mount --bind /var/target /var/mount
, el núcleo registrará el hecho de que/var/mount
ahora es un nuevo nombre para/var/target
. (No conozco los detalles; en particular, no sé si montar algo en un subdirectorio/var/target
hará que aparezca/var/mount
también, o por qué o por qué no. Se agradecerán las modificaciones de esta respuesta). Así que ahora si lo hacels /var/mount
, sucederá lo mismo que lo hizols /var/target
, porque/var/mount
y/var/target
son el mismo directorio.Las monturas no son archivos. No sé qué pasaría si intentaras renombrar o eliminar
/var/mount
. Tenga en cuenta que no puede montar nada a/var/mount
menos que ya haya un directorio en/var/mount
.fuente
ln -s ../../myfile .
. Si mueve eso a otro directorio, apuntará a otro lugar porque es un enlace relativo. Esto puede ser útil si necesita hacer una copia de seguridad de un subárbol y aún así los enlaces funcionan en la copia de seguridad.Además, ln -s sobreviviría a un reinicio; mientras que mount --bind no lo haría, a menos que edite / etc / fstab para hacerlo persistente.
fuente
Además de las otras respuestas. El sistema no permite enlaces duros al directorio:
La montura le permite crear enlaces duros, es decir, dos o más nombres para el mismo inodo :
(Uno puede encontrar que ayuda para la copia de seguridad de instantáneas con la versión anterior de rsync).
Además, tenga en cuenta que este montaje no está completo:
Por lo tanto, el soporte aún es de lectura y escritura, incluso si solicité la opción ro (solo lectura).
fuente