하드 드라이브가 마운트 될 때 / tmp의 실제 내용은 어떻게됩니까?
거의 아무것도 없습니다. 그들은 정상적인 파일 시스템 탐색을 통해 도달 할 수없는보기에서 숨겨져 있습니다.
하드 드라이브가 마운트되어있는 동안 / tmp의 실제 내용에 대해 r / w 작업을 수행 할 수 있습니까?
예. "원본"내부에서 열린 파일 핸들이있는 프로세스 /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
해당 테스트 디렉토리 안에 세션을 그대로 열어 둡니다 .
루트로서 작은 파일 시스템을 만들어서 마운트합니다 /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
디렉토리는 EXT 파일 시스템의 루트를 나타낸다. 그리고 쓰기 권한이 없어서 원래 디렉토리가 아닙니다.
첫 번째 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
그래서 그들은 실제로 행동 할 준비가되어 있습니다. 단순히 원래 위치에서 볼 수 없거나 도달 할 수 없다는 것만으로 마운트하면 일반적인 디렉토리 탐색에서 숨길 수 있습니다.
나는 당신이 이것을 가지고 놀 것을 장려합니다. 당신이 재생되는 "속임수"를 이해 한 후에는 실제로 복잡하지 않습니다. 그리고 일단 Got It ™을 사용하면 더 많은 양탄자를 얻기 위해 통합 파일 시스템을 살펴보십시오 :-)
그러나 한 가지 참고 사항 : 부팅 프로세스가 완료되면 /tmp
또는 /var
(또는 핵심 OS 디렉토리 중 하나 이상) 마운트 하는 것은 좋은 생각이 아닙니다. 많은 응용 프로그램이 해당 디렉토리에 상태를 유지하며 주변에서 마운트 게임을하면 심각하게 혼란 스러울 수 있습니다.