Когда я хотел создать жесткую ссылку в своем /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
каталоге (или других каталогах)?
/dev
обычно монтируется какdevtmpfs
файловая система. Таким образом, вы можете создавать жесткие ссылки только на файлы/dev
внутри/dev
. Например, вы не можете даже создать жесткие ссылки/dev/null
внутри/dev/pts
, потому что он монтируетсяdevpts
как другая файловая система.Жесткая ссылка не может быть использована для достижения того, чего вы хотите, потому что жесткие ссылки не работают между файловыми системами.
Тем не менее, вы можете достичь того, что вы хотите с помощью
mknod
команды.Беги
ls -l /dev/devicefile
. Вы должны увидеть результат вроде этого:1, 9
).mknod /path/to/destination c 1 9
(подставив нужные значения).Почему это работает?
Файлы устройств - это жесткие ссылки на абстрактный файл, реализованный ядром или драйверами ядра. Хотя вы не можете создавать жесткие ссылки на объекты файловой системы из другой файловой системы, это не объекты файловой системы, поэтому, зная их основные и второстепенные ссылочные номера, вы можете создать ссылку на них из любой файловой системы.
источник
Жесткие ссылки просто создают другую запись в каталоге, указывающую на файл (где файл - это файл, подобный файлу, например каталогу). Поэтому жесткие ссылки не могут ссылаться на файл в другой файловой системе.
Софт-ссылки в этом случае вы друг. Использование
ln -s
. Мягкие ссылки могут проходить через файловые системы и даже могут указывать на то, чего там нет.источник