Cuando quería crear un enlace duro en mi /home
directorio en modo raíz , Linux mostró el siguiente mensaje de error:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
El mensaje de error anterior se muestra a continuación:
# cd /home/user/
# ln /dev/sda1 my_sdb
Pero solo pude crear un enlace duro en el /dev
directorio, y no fue posible en otros directorios.
Ahora, quiero saber cómo crear un enlace duro desde un archivo de dispositivo existente (como sdb1
) en el /home
directorio (u otros directorios).
/dev
generalmente se monta como undevtmpfs
sistema de archivos. Por lo tanto, solo puede crear enlaces duros a archivos/dev
dentro/dev
. Por ejemplo, ni siquiera puede crear enlaces/dev/null
internos/dev/pts
, ya que está montadodevpts
como un sistema de archivos diferente.Un enlace duro no se puede usar para lograr lo que desea, porque los enlaces duros no funcionan entre sistemas de archivos.
Sin embargo, puede lograr lo que desea con el
mknod
comando.Ejecutar
ls -l /dev/devicefile
. Debería ver una salida como esta:1, 9
).mknod /path/to/destination c 1 9
(sustituyendo los valores que desee).¿Por qué funciona esto?
Los archivos de dispositivo son efectivamente enlaces duros a un archivo abstracto implementado por el núcleo o los controladores del núcleo. Si bien no puede crear enlaces duros a objetos del sistema de archivos desde otro sistema de archivos, estos no son objetos del sistema de archivos y, por lo tanto, al conocer sus números de referencia mayores y menores, puede crear una referencia a ellos desde cualquier sistema de archivos.
fuente
Los enlaces duros simplemente crean otra entrada en un directorio, apuntando a un archivo (donde el archivo es similar a un archivo, como un directorio). Por lo tanto, los enlaces duros no pueden hacer referencia a un archivo en otro sistema de archivos.
Soft-links eres tu amigo en este caso. Uso
ln -s
. Los enlaces suaves pueden atravesar sistemas de archivos e incluso pueden apuntar a algo que no está allí.fuente