Що відбувається з фактичним вмістом / tmp, коли він встановлений на жорсткому диску?
Досить нічого. Вони просто приховані від перегляду, недоступні за допомогою звичайного обходу файлової системи.
Чи можливо виконувати r / w операції з фактичним вмістом / tmp під час встановлення жорсткого диска?
Так. Процеси, у яких були відкриті ручки файлів усередині вашого "оригіналу" /tmp
, надалі зможуть ними користуватися. Ви також можете зробити "знову" деінде, встановивши прив'язку в /
іншому місці.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
Ось невеликий експеримент, який ви можете провести, щоб покращити (сподіваюся) відчуття того, що відбувається.
Примітка. Це не спроба бути абсолютно правильним чи вичерпним описом того, що насправді відбувається. Має бути досить точним, щоб дати тобі велику картину.
Я створив користувача, зателефонованого me
на своїй машині, та довільну директорію в його будинку з файлом у ньому:
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
На даний момент нічого незвичайного - це просто звичайний каталог з простим файлом. Залишаю сеанс відкритим право, як є, з його cwd
всередині цього тестового каталогу.
Як root, я створюю невелику файлову систему і монтую її над /home/me/tmp
.
root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s
root@home # mkfs -t ext2 ./fs
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done
root@home # mount ./fs /home/me/tmp
Потім я відкриваю новий термінал як me
і оглядаюсь:
me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied
Отже, цього файлу, який ми створили, явно немає. lost+found
Каталог є показником кореня з внутр файлової системи. І я втратив дозвіл на запис, тому явно це не оригінальний каталог.
Повернувшись до першого me
сеансу, давайте подивимось, як він бачить світ:
me@home $ echo something else > other_file
Немає проблем із написанням.
me@home $ cat some_file other_file
hello
something else
Оригінальний файл все ще є, новий файл створений без проблем.
Так? Що відбувається?
Перший сеанс увійшов до каталогу до того, як він був накладений кореневим монтажем іншої файлової системи на ньому. Ця дія монтажу взагалі не впливає на оригінальну файлову систему. Процес оболонки має цілком дійсну ручку до каталогу в оригінальній файловій системі і може продовжувати взаємодію з ним. Це свого роду бігають під на килим точки монтування.
Другий сеанс увійшов до каталогу після того, як було встановлено кріплення. Так він бачить нову, порожню файлову систему. І sysadmin захистив дозволи, тому він не може використовувати потрібний простір ... давайте виправити це.
root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls
lost+found some_file
me@home #2 $ cat some_file
bye bye
Чи може сесія 1 втекти з-під килима? (Стає затхлим.)
Звичайно! Якщо сеанс 1 перемістить резервну копію дерева файлових систем з монтажу, вона втратить цю ручку всередину і піде за версією, як і всі інші.
me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory
Такий же вигляд, як і сесія №2, ми повернулися до нормального стану.
Але як ти знаєш, файли не зникли? Ніхто більше не дивиться!
Це один із моментів, коли кріплення кріплення стає зручним. Вони дозволяють вам змонтувати вже змонтовану файлову систему десь в іншому місці.
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(Так, ви можете прив’язати-змонтувати файлову систему "всередині себе". Прохолодний трюк, так?)
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
Так що вони справді є, готові до дії. Просто вони не видимі / недоступні у своєму початковому місці, кріплення приховує їх від звичайних обходів каталогів.
Я закликаю вас пограти з цим, це дійсно не складно, коли ви зрозуміли "фокус", який виконується. І як тільки ви зрозуміли ™, погляньте на файлові системи об'єднання, щоб ще більше потягнути килими :-)
Однак одне зауваження: встановлення над /tmp
або /var
(або будь-яким із основних каталогів ОС) насправді не є хорошою ідеєю, коли процес завантаження закінчується. Дуже багато додатків залишають стан у цих каталогах, і можуть серйозно заплутатися, якщо ви граєте в них монтажні ігри.