Por que não consigo criar um link físico a partir do arquivo do dispositivo em um diretório diferente do / dev?

10

Quando eu quis criar um link físico no meu diretório /home no modo root , 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 só consegui criar um link físico no diretório /dev 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 diretório /home (ou outros diretórios)?

    
por Reza Harasani 29.03.2018 / 12:46

3 respostas

20

But I could only create a hard link in the /dev directory and it was not possible in other directories.

Como mostrado pela mensagem de erro, não é possível criar um link físico em diferentes sistemas de arquivos; você pode criar apenas links suaves (simbólicos).

Por exemplo, se o seu /home estiver em uma partição diferente da partição raiz, você não poderá vincular de forma rígida o /tmp/foo a /home/user/ .

Agora, como apontado @RichardNeumann, /dev é geralmente montado como um sistema de arquivos devtmpfs. Veja este exemplo:

[dr01@centos7 ~]$ df
Filesystem                      1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos_centos7-root  46110724 3792836  42317888   9% /
devtmpfs                          4063180       0   4063180   0% /dev
tmpfs                             4078924       0   4078924   0% /dev/shm
tmpfs                             4078924    9148   4069776   1% /run
tmpfs                             4078924       0   4078924   0% /sys/fs/cgroup
/dev/sda1                         1038336  202684    835652  20% /boot
tmpfs                              815788      28    815760   1% /run/user/1000

Portanto, você só pode criar links físicos para arquivos em /dev em /dev .

    
por 29.03.2018 / 12:52
9

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 os sistemas de arquivos.

No entanto, você pode conseguir o que deseja com o comando mknod .

  1. Executar ls -l /dev/devicefile . Você deve ver uma saída como esta:     crw-rw-rw- 1 raiz raiz 1, 9 mar 29 15:46 / dev / urandom
  2. Anote o número na coluna de tamanho ( 1, 9 ).
  3. Execute o comando mknod /path/to/destination c 1 9 (substituindo os valores desejados).

Por que isso funciona?

Os arquivos de dispositivos são efetivamente links físicos para um arquivo abstrato implementado pelo kernel ou pelos drivers do kernel. Embora não seja possível 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, 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. p>     

por 29.03.2018 / 18:09
2

Links físicos 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 passar pelos sistemas de arquivos e podem até apontar para algo que não está lá.

    
por 29.03.2018 / 14:31