Kiedy chciałem utworzyć twardy link w moim /home
katalogu w trybie root , Linux wyświetlił następujący komunikat o błędzie:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
Powyższy komunikat o błędzie pokazano poniżej:
# cd /home/user/
# ln /dev/sda1 my_sdb
Ale mogłem utworzyć tylko twardy link w /dev
katalogu i nie było to możliwe w innych katalogach.
Teraz chcę wiedzieć, jak utworzyć twardy link z istniejącego pliku urządzenia (np. sdb1
) W /home
katalogu (lub innych katalogach)?
/dev
jest zwykle montowany jakodevtmpfs
system plików. W ten sposób można tworzyć tylko dowiązania twarde do plików/dev
wewnątrz/dev
. Nie możesz np. Nawet utworzyć dowiązań twardych do/dev/null
wewnątrz/dev/pts
, ponieważ jest on montowanydevpts
jako inny system plików.Nie można użyć twardego łącza do osiągnięcia tego, co chcesz, ponieważ twarde łącza nie działają między systemami plików.
Możesz jednak osiągnąć to, co chcesz za pomocą
mknod
polecenia.Uruchom
ls -l /dev/devicefile
. Powinieneś zobaczyć takie wyjście:1, 9
).mknod /path/to/destination c 1 9
(zastępując żądane wartości).Dlaczego to działa?
Pliki urządzeń są faktycznie twardymi dowiązaniami do pliku abstrakcyjnego zaimplementowanego przez jądro lub sterowniki jądra. Chociaż nie można tworzyć twardych łączy do obiektów systemu plików z innego systemu plików, nie są to obiekty systemu plików, a zatem znając ich główne i drobne numery referencyjne, można utworzyć odwołanie do nich z dowolnego systemu plików.
źródło
Twarde linki po prostu tworzą kolejną pozycję w katalogu, wskazując na plik (gdzie plik jest czymś podobnym do pliku, takim jak katalog). Dlatego twarde łącza nie mogą odwoływać się do pliku w innym systemie plików.
W tym przypadku jesteś przyjacielem. Zastosowanie
ln -s
. Miękkie linki mogą przechodzić między systemami plików, a nawet wskazywać na coś, czego nie ma.źródło