리눅스 연결되지 않은 chroot 또는 디렉토리? 시스템에) 디렉토리를 만들 수 있습니까?

chroot하거나 링크되지 않은 (기본 루트 파일 시스템에) 디렉토리를 만들 수 있습니까? 내가 이해 한대로 커널은 파일 시스템에 링크가없는 파일 / 폴더를 자동으로 삭제하지만 두 번째 루트를 갖는 방법이 있습니까?



답변

예, 아마도 당신은 이미 그 중 몇 가지를 가지고있을 것입니다. 여러 장소에 여러 개의 독립적 인 파일 시스템을 마운트 할 수 있다는 점을 기억하십시오.이 파일 시스템 하나 하나마다 고유 한 “루트”가 있습니다.

예를 들어, 별도의 “데이터”파티션이에 마운트 된 /mnt/data경우 해당 디렉토리는 사실상 파일 시스템 루트이며 ..그 위에는 없습니다. (/ sys 또는 / dev와 같은 내부 파일 시스템에도 동일하게 적용됩니다.)

Linux에서는 VFS 계층 ( “가상 파일 시스템”)이이 작업을 수행합니다. 루트 1은에 액세스 할 수 /있고 루트 2는에 액세스 할 수있게하며 /mnt/data/mnt/data/..연결 하는 환상을 만듭니다 /mnt.


(리눅스에서 VFS에는 일반적으로 사용되는 몇 가지 다른 흥미로운 기능이 있습니다 /. 예를 들어, 커널이 시작될 때 /빈 “tmpfs”파일 시스템에 첨부되어 initramfs가 압축 해제됩니다. 결국 기본 루트 파일 시스템은 어딘가에 마운트됩니다 에서 /new_root또는, 및 이동/ 특수 중 하나를 사용 pivot_root하거나 일반적인 mount --move. 플러스는 물론, 이미 언급 한을 chroot.

즉, VFS 루트 디렉토리가 반드시 그런 것은 아닙니다.

chroot뿐만 아니라 마운트 네임 스페이스를 사용하여 여러 개의 VFS 루트를 한 번에 가질 수 있습니다. 여기서는 다른 프로세스가 다른 VFS 마운트를 완전히 볼 수 있습니다. Docker와 같은 ‘컨테이너’에서 사용됩니다.)


그러나 파일 시스템 루트에 링크가없는 것은 아닙니다. 그것은 단지로부터 링크가 없습니다 위를 하지만, 쉽게에서 링크 할 수 있습니다 아래 – (가) 일반 하위 디렉토리 (예 : 빈 / 등을) .. 입니다 진정한 링크, 그래서 /에서 링크 할 것이다 /bin/.., /etc/..등등하고 있습니다.

(흥미롭게, 이것이 읽기 전용 디렉토리의 이름을 바꿀 수는 있지만 다른 곳으로 이동할 수는 없습니다. 왜냐하면 ..링크 를 갱신하기 위해 디렉토리에 기록해야하기 때문 입니다.)