Что делает Linux с существующими файлами в точке монтирования?

52

Если я пытаюсь смонтировать папку, в которой уже есть файлы, выдаст ли мне linux сообщение об ошибке или покажет как смонтированную файловую систему и файлы, которые уже были в этой папке?

стройное
источник
2
Всегда можно попробовать с некоторыми тестовыми файлами, нет?
Крис
Я бы, если бы мог. Просто получилось, что мне не с чем было проверять. Я попытался размонтировать и смонтировать диск, но результаты оказались неубедительными, потому что у них обоих были одинаковые файлы.
тонкий
Есть ли способ сделать папку недоступной для записи, чтобы файлы там не могли существовать?
Эндолит

Ответы:

33

Он будет просто смонтирован, и файлы исчезнут, вернувшись, когда папка будет размонтирована.

Azz
источник
1
Что вы подразумеваете под исчезновением? Они продолжают существовать на сервере и просто не отображаются или удалены?
худенький
Я пойду проведу быструю проверку, но я думаю, что они удалены.
Azz
17
+1 Файлы просто невидимы, пока каталог монтируется над ними. Они никогда не уходят, они просто недоступны ...
Слёске
10
Он работает как стек, если вы монтируете что-то еще, он скрывает предыдущий контент. Когда вы отключите, предыдущий материал снова станет видимым.
вторник
4
Я смущен тем, как кто-то, кто сказал «возвращаться, когда папка размонтирована», смог через 3 минуты сказать «я думаю, что они удалены». К счастью для всех остальных, первое является реальностью здесь.
underscore_d
111

Когда вы монтируете файловую систему в каталоге /mount-point, вы больше не можете обращаться к файлам /mount-pointнапрямую. Они все еще существуют, но /mount-pointтеперь относятся к корню смонтированной файловой системы, а не к каталогу, который служил точкой монтирования, поэтому к содержимому этого каталога нельзя получить доступ, по крайней мере, таким образом. Например:

# 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

Есть способы получить объединенное представление смонтированной файловой системы и данных, которые уже присутствовали, но вам нужен дополнительный слой, называемый объединенной файловой системой .

Под Linux есть способ увидеть скрытые файлы. Вы можете использовать, mount --bindчтобы получить другой вид файловой системы, где находится точка монтирования. Например

mount --bind / /other-root-view

Вы увидите все файлы в корневой файловой системе /other-root-view.

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

В частности, /mount-pointтеперь будет доступно как /other-root-view/mount-point, и, поскольку /other-root-view/mount-pointэто не точка монтирования, вы можете увидеть ее содержимое там:

# 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
Жиль, этот ответ только что спас мой зад, когда мне нужно было получить несколько записей звездочек, которые были сохранены под точкой монтирования NSF! Я всегда думал, что --bind имеет ту же перспективу, что и пользователь. Спасибо!
andyortlieb
А как насчет каталогов? Могу ли я получить доступ к /mount-point/1/другой файловой системе /mount-point/, если я смонтировал ее /mount-point/1/?
CMCDragonkai
@CMCDragonkai Да, косвенно, используя привязку, как описано в моем ответе.
Жиль "ТАК - перестань быть злым"
Джайлс, это блестящая техника, которая помогла мне проанализировать, что происходит в моей собственной системе. Это также помогло с другим вопросом, который заключается в том, как проверить использование всех корневых каталогов без обхода точек монтирования. Решение mkdir /r; mount --bind / /r; du -sh /r/*. Спасибо
Manngo
@Manngo для дальнейшего использования, это не обязательно. du -x(эквивалентно du --one-file-system) сделал бы это без необходимости --bindмахинаций.
Дараэль