Als ich /home
im Root- Modus einen festen Link in meinem Verzeichnis erstellen wollte , zeigte Linux die folgende Fehlermeldung an:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
Die obige Fehlermeldung wird unten angezeigt:
# cd /home/user/
# ln /dev/sda1 my_sdb
Ich konnte jedoch nur einen festen Link im /dev
Verzeichnis erstellen , was in anderen Verzeichnissen nicht möglich war.
Jetzt möchte ich wissen, wie man einen festen Link aus einer vorhandenen Gerätedatei (wie sdb1
) im /home
Verzeichnis (oder anderen Verzeichnissen) erstellt.
/dev
wird normalerweise alsdevtmpfs
Dateisystem gemountet . Daher können Sie nur Hardlinks zu Dateien/dev
innerhalb von erstellen/dev
. Sie können zB nicht einmal Hardlinks nach/dev/null
innen erstellen/dev/pts
, da esdevpts
als anderes Dateisystem bereitgestellt wird.Ein fester Link kann nicht verwendet werden, um das zu erreichen, was Sie möchten, da harte Links zwischen Dateisystemen nicht funktionieren.
Mit dem
mknod
Befehl können Sie jedoch erreichen, was Sie wollen .Ausführen
ls -l /dev/devicefile
. Sie sollten eine Ausgabe wie diese sehen:1, 9
).mknod /path/to/destination c 1 9
(ersetzen Sie die gewünschten Werte).Warum funktioniert das?
Gerätedateien sind effektiv feste Links zu einer abstrakten Datei, die vom Kernel oder den Kerneltreibern implementiert wird. Sie können zwar keine festen Links zu Dateisystemobjekten aus einem anderen Dateisystem erstellen, diese sind jedoch keine Dateisystemobjekte. Wenn Sie also ihre Haupt- und Nebenreferenznummern kennen, können Sie aus jedem Dateisystem einen Verweis darauf erstellen.
quelle
Harte Links erstellen einfach einen weiteren Eintrag in einem Verzeichnis, der auf eine Datei verweist (wobei Datei eine Datei wie ein Verzeichnis ist). Daher können Hardlinks nicht auf eine Datei in einem anderen Dateisystem verweisen.
Softlinks sind in diesem Fall dein Freund. Verwenden Sie
ln -s
. Softlinks können sich über Dateisysteme erstrecken und sogar auf etwas verweisen, das nicht vorhanden ist.quelle