Чому я не можу створити жорстке посилання з файлу пристрою в каталозі / не / dev?


11

Коли я хотів створити жорстке посилання в моєму /homeкаталозі в кореневому режимі, Linux показало таке повідомлення про помилку:

ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link

Наведене вище повідомлення про помилку показано нижче:

# cd /home/user/
# ln /dev/sda1 my_sdb

Але я міг створити лише жорстке посилання в /devкаталозі, а це не було можливо в інших каталогах.

Тепер я хочу знати, як створити жорстке посилання з існуючого файлу пристрою (наприклад sdb1) у /homeкаталозі (або інших каталогах)?

Відповіді:


21

Але я міг створити лише жорстке посилання в каталозі / dev, і це було неможливо в інших каталогах.

Як показано в повідомленні про помилку, неможливо створити жорстке посилання в різних файлових системах; ви можете створювати лише м'які (символічні) посилання.

Наприклад, якщо ви /homeперебуваєте в іншому розділі, ніж у вашому кореневому розділі, ви не зможете жорстко посилатися /tmp/fooна нього /home/user/.

Тепер, як зазначав @RichardNeumann, /devзазвичай монтується як файлова система devtmpfs. Дивіться цей приклад:

[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

Тому ви можете створювати лише жорсткі посилання на файли /devвсередині /dev.


3
Розділ - це не проблема. Це, як ви заявили, обмеження міжфайлової системи. /devзазвичай монтується як devtmpfsфайлова система. Таким чином, ви можете створювати лише жорсткі посилання на файли /devвсередині /dev. Ви, наприклад, навіть не можете створити жорсткі посилання /dev/nullвсередині /dev/pts, оскільки він змонтований devptsяк інша файлова система.
Річард Нойман

1
@RichardNeumann Добрий момент. Я виправив свою відповідь, яка була частково правильною.
dr_

11

Жорстке посилання не можна використовувати для досягнення бажаного, оскільки жорсткі посилання не працюють між файловими системами.

Однак ви можете досягти того, що хочете за допомогою mknodкоманди.

  1. Біжи ls -l /dev/devicefile. Ви повинні побачити такий вихід:

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. Зверніть увагу на номер у стовпці розміру (1, 9 ).
  3. Виконайте команду mknod /path/to/destination c 1 9(замінивши потрібні значення).

Чому це працює?

Файли пристроїв - це фактично жорсткі посилання на абстрактний файл, реалізований драйверами ядра або ядра. Хоча ви не можете створити жорсткі посилання на об’єкти файлової системи з іншої файлової системи, це не об’єкти файлової системи, і, знаючи їх основні та незначні довідкові номери, ви можете створити посилання на них з будь-якої файлової системи.



2

Жорсткі посилання просто створюють ще один запис у каталозі, вказуючи на файл (де файл - такий файл, як, наприклад, каталог). Тому жорсткі посилання не можуть посилатися на файл в іншій файловій системі.

Софт-посилання - ти друг у цьому випадку. Використовуйте ln -s. Софтпосилання можуть переходити через файлові системи і навіть можуть вказувати на те, що там немає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.