Qual è la differenza tra:
ln -s /mnt/extra/home /
e
mkdir /home
mount --rbind /mnt/extra/home /home
mount --rbind /mnt/extra/home
è già una directory montata
Qual è la differenza tra:
ln -s /mnt/extra/home /
e
mkdir /home
mount --rbind /mnt/extra/home /home
mount --rbind /mnt/extra/home
è già una directory montata
Risposte:
mount --rbind
crea un bind-mount ricorsivo; cioè, la gerarchia del filesystem montata su /mnt/extra/home
sarà anche accessibile attraverso /home
.
In pratica, la principale differenza tra la ln -s
soluzione e la mount --rbind
soluzione è che con ln -s
/home
è un collegamento simbolico mentre con mount --rbind
è una directory; questo influenza strumenti come find
, df
, test
/ [
ecc
Inoltre, ln -s
fallirà se /home
esiste, mentre mount --rbind
fallirà se non esiste o non è una directory vuota.
Anche il commento di Mark qui sotto è importante: ha ln -s
bisogno di un file system scrivibile su cui creare il collegamento simbolico.
ln -s
modifica il filesystem, mentre mount --rbind
non 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.
--bind
e --rbind
non mi interessa se le mie directory di destinazione sono vuote, si limitano a montare "in cima" a qualsiasi file ci sia, lasciandole inaccessibili
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).
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 --rbind
si 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, vsftpd
non sarà possibile dereferenziarlo e quindi la destinazione non sarà accessibile tramite FTP. Se invece lo fai mount --rbind
, vsftpd
accederai a quel sottostruttura come se fosse davvero lì, allo stesso modo di quando avresti collegato un file lì.
ln
crea collegamenti; in particolare,ln -s
crea collegamenti simbolici.mount
monta un filesystem su una directory. Non hanno nulla in comune.