Qual è la differenza tra ln -s e mount --rbind?


8

Qual è la differenza tra:

ln -s /mnt/extra/home /

e

mkdir /home
mount --rbind /mnt/extra/home /home

1
lncrea collegamenti; in particolare, ln -screa collegamenti simbolici. mountmonta un filesystem su una directory. Non hanno nulla in comune.
AlexP,

Ma mount --rbind /mnt/extra/homeè già una directory montata
NerdOfLinux

Mettilo come risposta e
segnerò

Risposte:


13

mount --rbindcrea un bind-mount ricorsivo; cioè, la gerarchia del filesystem montata su /mnt/extra/homesarà anche accessibile attraverso /home.

In pratica, la principale differenza tra la ln -ssoluzione e la mount --rbindsoluzione è che con ln -s /homeè un collegamento simbolico mentre con mount --rbindè una directory; questo influenza strumenti come find, df, test/ [ecc

Inoltre, ln -sfallirà se /homeesiste, mentre mount --rbindfallirà se non esiste o non è una directory vuota.

Anche il commento di Mark qui sotto è importante: ha ln -sbisogno di un file system scrivibile su cui creare il collegamento simbolico.


7
La grande differenza è che ln -smodifica il filesystem, mentre mount --rbindnon lo fa. Ciò significa che è possibile montare la directory principale su una radice di sola lettura (ad es. Un CD di avvio), ma non è possibile creare un collegamento simbolico su di essa.
Segna il

3
--binde --rbindnon mi interessa se le mie directory di destinazione sono vuote, si limitano a montare "in cima" a qualsiasi file ci sia, lasciandole inaccessibili
Xen2050

7

In questo caso, sia un attacco di collegamento che un collegamento simbolico funzioneranno in modo simile per la maggior parte degli scopi, ma presentano differenze importanti.

Un collegamento simbolico è un po 'più leggero. Puoi avere centinaia o migliaia di collegamenti simbolici senza che ciò costituisca un grosso problema di gestione. Si siedono nel filesystem piuttosto che richiedere un'installazione speciale a livello di sistema.

I collegamenti simbolici possono essere copiati e copiati correttamente da strumenti come cp e rsync. Cioè, gli strumenti sono in grado di riconoscere e copiare il collegamento simbolico, assicurando che al ripristino da qualche altra parte il collegamento venga ripristinato e punti alla destinazione corretta. Funzionerà tutto "correttamente" per impostazione predefinita. Al contrario, quando si esegue il backup o la copia di un mount bind, il mount verrà trattato in modo trasparente, causando la copia dei file stessi, il che può portare alla duplicazione se si ottengono anche gli stessi file nella loro altra posizione e se si desidera lavoro aggiuntivo se si desidera per replicare il bind mount nella destinazione.

I collegamenti simbolici possono essere modificati o eliminati da qualsiasi utente che abbia accesso al collegamento, quindi è facile renderlo solo per superutente o aprirlo a un determinato utente. I montaggi di associazione possono essere impostati o modificati solo dal superutente.

Se questo suona come un'approvazione brillante di collegamenti simbolici, lo è. Sono un modo più semplice di collegamento tra file e directory. Utilizzeresti i bind mount solo per le situazioni in cui un collegamento simbolico non funzionerebbe, il che potrebbe comportare meno situazioni di quanto pensi. La maggior parte degli strumenti, inclusi gli strumenti di backup e sincronizzazione, ha un comportamento predefinito sensato per i collegamenti simbolici e il loro trattamento dei collegamenti simbolici può essere configurabile. I montaggi di bind sono trasparenti a tali strumenti, quindi perdi quella flessibilità e potresti perdere il comportamento sensibile (ad esempio, come menzionato sopra, la duplicazione delle directory nei tuoi backup).


0

Un'altra differenza è che il collegamento simbolico è simbolico , ovvero fa semplicemente riferimento a un percorso , una stringa di caratteri, ed è dedotto ogni volta che si apre una sottodirectory / file nel percorso target. Al contrario, mount --rbindsi comporta più come un hard link, per il quale il percorso non viene rivalutato su ogni dereference.

Questo fa la differenza in alcuni scenari come chroot. Ad esempio vsftpd chroot s nella directory home dell'account utente FTP a cui si accede. Pertanto, se si inserisce un collegamento simbolico in quella directory, vsftpdnon sarà possibile dereferenziarlo e quindi la destinazione non sarà accessibile tramite FTP. Se invece lo fai mount --rbind, vsftpdaccederai a quel sottostruttura come se fosse davvero lì, allo stesso modo di quando avresti collegato un file lì.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.