Quando eu queria criar um link físico no meu /home
diretório no modo raiz , o Linux mostrou a seguinte mensagem de erro:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
A mensagem de erro acima é mostrada abaixo:
# cd /home/user/
# ln /dev/sda1 my_sdb
Mas eu só consegui criar um link físico no /dev
diretório e isso não foi possível em outros diretórios.
Agora, quero saber como criar um link físico a partir de um arquivo de dispositivo existente (como sdb1
) no /home
diretório (ou em outros diretórios)?
/dev
geralmente é montado como umdevtmpfs
sistema de arquivos. Assim, você só pode criar hardlinks para arquivos/dev
dentro dele/dev
. Por exemplo, você não pode nem criar hardlinks para/dev/null
dentro/dev/pts
, porque ele é montado comdevpts
um sistema de arquivos diferente.Um link físico não pode ser usado para alcançar o que você deseja, porque os links físicos não funcionam entre sistemas de arquivos.
No entanto, você pode conseguir o que deseja com o
mknod
comandoCorra
ls -l /dev/devicefile
. Você deve ver uma saída como esta:1, 9
).mknod /path/to/destination c 1 9
(substituindo os valores desejados).Por que isso funciona?
Os arquivos do dispositivo são efetivamente links físicos para um arquivo abstrato implementado pelo kernel ou pelos drivers do kernel. Embora você não possa criar links físicos para objetos do sistema de arquivos de outro sistema de arquivos, eles não são objetos do sistema de arquivos e, portanto, conhecendo seus números de referência principais e secundários, é possível criar uma referência a eles a partir de qualquer sistema de arquivos.
fonte
Os links físicos apenas criam outra entrada em um diretório, apontando para um arquivo (em que arquivo é semelhante a um arquivo, como um diretório). Portanto, os links físicos não podem fazer referência a um arquivo em outro sistema de arquivos.
Soft-links você é amigo neste caso. Use
ln -s
. Os softlinks podem atravessar sistemas de arquivos e até apontar para algo que não existe.fonte