Cosa fa Linux con i file esistenti in un mount point?


52

Se provo a montare una cartella che contiene già dei file, Linux mi dà un messaggio di errore o va avanti e mostra sia il filesystem montato che i file che erano già nella cartella?


2
Potresti sempre provarlo con alcuni file di test, no?
Chris,

Vorrei se potessi. Ha appena scoperto che non avevo nulla con cui provare. Ho provato a smontare e montare l'unità in questione, ma i risultati erano inconcludenti perché avevano entrambi gli stessi file.
magro

C'è un modo per rendere la cartella non scrivibile in modo che i file non possano esistere lì?
endolith,

Risposte:


33

Verrà semplicemente montato e i file scompariranno, tornando indietro quando la cartella viene smontata.


1
Cosa intendi con sparire? Continuano a esistere sul server e semplicemente non vengono visualizzati o vengono eliminati?
magro,

Vado a fare un rapido controllo, ma penso che vengano eliminati.
Azz,

17
+1 I file sono semplicemente invisibili mentre la directory è montata "su di essi". Non vanno mai davvero via, sono solo inaccessibili ...
sleske,

10
Funziona come uno stack, se monti qualcos'altro, nasconde il contenuto precedente. Quando smonti, le cose precedenti diventano di nuovo visibili.
vtest

4
Sono confuso da come qualcuno che ha detto "tornare indietro quando la cartella è smontata" è stato in grado di dire 3 minuti dopo "Penso che vengano eliminati". Per fortuna per tutti gli altri, il primo è la realtà qui.
underscore_d

111

Quando si monta un filesystem su una directory /mount-point, non è più possibile accedere /mount-pointdirettamente ai file . Esistono ancora, ma /mount-pointora si riferisce alla radice del filesystem montato, non alla directory che fungeva da punto di montaggio, quindi non è possibile accedere al contenuto di questa directory, almeno in questo modo. Per esempio:

# touch /mount-point/somefile
# ls /mount-point/somefile
/mount-point/somefile
# mount /dev/something /mount-point
# ls /mount-point/somefile
ls: cannot access /mount-point/somefile: No such file or directory

Esistono modi per ottenere una vista unita del filesystem montato e dei dati che erano già presenti, ma è necessario un livello aggiuntivo chiamato un filesystem union .

Sotto Linux, c'è un modo per vedere i file nascosti. È possibile utilizzare mount --bindper ottenere un'altra vista del filesystem in cui si trova il punto di montaggio. Per esempio

mount --bind / /other-root-view

Vedrai tutti i file nel filesystem di root sotto /other-root-view.

# cat /other-root-view/etc/hostname 
darkstar

In particolare, /mount-pointora sarà accessibile come /other-root-view/mount-point, e poiché /other-root-view/mount-pointnon è un mount point, puoi vedere i suoi contenuti lì:

# ls /mount-point/somefile
ls: cannot access /mount-point/somefile: No such file or directory
# ls /other-root-view/mount-point/somefile
/other-root-view/mount-point/somefile

5
Gilles, questa risposta mi ha appena salvato il culo quando avevo bisogno di ottenere alcune registrazioni di asterisco salvate sotto un mount point NSF! Ho sempre pensato che il legame avesse la stessa prospettiva dell'utente. Grazie!
Andyortlieb,

E le directory? Se ho montato su /mount-point/1/poi montato un altro filesystem su /mount-point/, posso ancora accedere /mount-point/1/?
CMCDragonkai,

@CMCDragonkai Sì, indirettamente usando un bind mount come descritto nella mia risposta.
Gilles 'SO- smetti di essere malvagio' il

Giles, questa è una tecnica geniale e mi ha aiutato ad analizzare cosa c'è nel mio sistema. Ha anche aiutato con un'altra domanda, che è come controllare l'uso di tutte le directory root senza attraversare i punti di mount. Soluzione: mkdir /r; mount --bind / /r; du -sh /r/*. Grazie
Manngo,

@Manngo per riferimento futuro, questo non è necessario. du -x(equivalente a du --one-file-system) lo avrebbe fatto senza la necessità di --bindshenanigans.
Darael,
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.