Quando eu queria criar um hard link no meu /home
diretório no modo raiz , o Linux mostrava 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 só consegui criar um hard link no /dev
diretório, e 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 outros diretórios)?
Conforme mostrado pela mensagem de erro, não é possível criar um link físico em diferentes sistemas de arquivos; você pode criar apenas links flexíveis (simbólicos).
Por exemplo, se você
/home
estiver em uma partição diferente da sua partição raiz, não poderá fazer um link físico/tmp/foo
para/home/user/
.Agora, como @RichardNeumann apontou,
/dev
geralmente é montado como um sistema de arquivos devtmpfs. Veja este exemplo:Portanto, você só pode criar links físicos para arquivos
/dev
dentro de/dev
.Um link físico não pode ser usado para obter o que você deseja, porque links físicos não funcionam entre sistemas de arquivos.
No entanto, você pode conseguir o que deseja com o
mknod
comando.Corra
ls -l /dev/devicefile
. Você deve ver uma saída como esta:1, 9
).mknod /path/to/destination c 1 9
(substituindo pelos valores que desejar).Por que isso funciona?
Os arquivos de dispositivo são efetivamente hard links para um arquivo abstrato implementado pelo kernel ou pelos drivers do kernel. Embora você não possa criar hard links 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, você pode criar uma referência a eles a partir de qualquer sistema de arquivos.
Os hard links apenas criam outra entrada em um diretório, apontando para um arquivo (onde o arquivo é um arquivo como uma coisa, como um diretório). Portanto, hard-links não podem referenciar um arquivo em outro sistema de arquivos.
Soft-links são seus amigos neste caso. Use
ln -s
. Os softlinks podem atravessar sistemas de arquivos e até apontar para algo que não existe.