mount
얼마 전 나는 나중에 가려진 디렉토리의 파일에 액세스할 수 있기를 원했습니다 . SE에서 몇 가지 QA 답변을 찾은 기억이 나지만, 제가 시도한 답변 중 어느 것도 효과가 없었던 것으로 기억합니다. 어쩌면 그들은 이전 Linux 커널에서 작업하고 있었을지도 모르겠습니다. 이제 최신 커널(현재 5.x) 중 하나가 포함된 배포판을 사용하려고 합니다.
마운트로 인해 가려진 디렉토리 트리 부분에 액세스하기 위해 "표준" 도구를 사용할 수 있는 방법이 실제로 있다면 답변을 작성해 주십시오.
나는 몇 가지 해결책을 생각했습니다.
- 디렉토리의 하드 링크(inode)에 대한 소프트 링크를 만들 수 있는 도구가 있을까요? AFAIK 표준은
ln
이를 수행할 수 없습니다.ln -s
(AFAIK 및 시행착오를 통해) inode가 아닌 파일 트리의 위치에 대한 링크를 만듭니다. 해당 위치가 가리키는 위치가 변경되면(상단 마운트를 통해) 심볼릭 링크는 이전 위치가 아닌 새 위치를 가리킵니다.
@terdon의 의견에 대한 응답으로 추가되었습니다.
사용자 관점(적어도 내 독자 man ln
등)에서 심볼릭 링크는 운영 체제(시스템 유틸리티 포함)가 inode(하드 링크)와 구별되는 링크 유형입니다. 이는 find
루프에서 통과되지 않는 링크 입니다 .
물리적 inode 데이터를 반수동으로 읽은 후
dd
(마운트 전) 나중에 다른 데이터에 적용합니다(기본적으로 하드 링크). 어떻게 하나요?커널의 폴더에 대한 하드 링크를 활성화합니다. (저는 이것을 특별한 작업에 거의 사용하지 않을 계획입니다. 순환적 추론을 알고 있지만 제가 아는 한 많은 Unix가 이를 갖고 있고 작동합니다.) 어떻게 하나요?
추신 : 질문을 여러 개로 나누는 것이 더 나을 수도 있습니다 ...
보충 2. ln -s
테스트:
$ echo 123 > 1/1/te.xt
$ ln -s 1/1 2
$ ls 2
te.xt
$ sudo mount -o loop /path/ubuntu-20.04.3-desktop-amd64.iso 1
$ ls 2 # 2 is displayed as broken link in GUI
2
3개를 추가했습니다. mount --bind
다음에서 시도해 보세요.기본 마운트 지점 경로의 콘텐츠에 액세스- 실패
$ mount --bind 1 2
$ ls 2
1
$ sudo mount -o loop /path/ubuntu-20.04.3-desktop-amd64.iso 1
$ ls 2
boot casper dists EFI install isolinux md5sum.txt pool preseed ubuntu
추가 4: 이전 레벨에 마운트 바인딩 - 같은 방식으로 실패합니다(그런데 tmpfs 시스템인데 ext4에서도 작동할까요? --bind
에서 읽으라고 제안한 내용에 대한 설명을 찾지 못했습니다 man mount
).
보충 5: 오버섀도잉 명령 이후에 실행해야 하는
것으로 나타났습니다 .mount --bind
mount
답변1
..
디렉토리 트리에 순환이 발생할 수 있고 디렉토리 항목이 고유하지 않게 되므로 디렉토리에 대한 하드 링크를 만들 수 없습니다 . 디렉터리에 대한 하드 링크를 생성할 수 없으므로 디렉터리 하드 링크에 대한 소프트 링크를 생성할 수 없습니다.
너가 아니라면파일 시스템 자체에 대한 바이너리 패치, 이 경우 다음과 같이 또는 다른 방법으로 중단할 수 있습니다. 적어도 fsck
그것은 당신을 덜거덕거리게 할 것이고, 파일 시스템 드라이버도 토할 것인지 궁금합니다.
에 일부 데이터가 있고 /foo
에 다른 것을 마운트하는 동안 해당 데이터를 사용할 수 있도록 유지해야 하는 경우 /foo
가장 쉬운 방법은 이름을 /foo
로 변경 /bar
하고 새 빈 디렉토리를 만든 /foo
다음 해당 새 디렉토리에 다른 파일 시스템을 마운트하는 것입니다 /foo
.
Linux에서는 바인드 마운트를 사용하여 에 무언가를 마운트한 후 원본 파일이 에 표시 되도록 /foo
전체 원본 파일을 바인드 마운트할 수 있습니다 . 하지만 나머지 부분 도 거기에 표시되므로 , 등이 표시 됩니다 ./
/bar
/foo
/bar/foo
/
/bar/bin
/bar/etc
# mkdir /foo /bar
# touch /foo/file-in-root-fs.txt
# mount -t tmpfs tmpfs /foo
# mount --bind / /bar
# ls -l /bar/foo
total 0
-rw-r--r-- 1 root root 0 Dec 1 14:36 file-in-root-fs.txt
새 설치 아래에 하나의 디렉토리만 바인드 마운트할 수 있는지 확인하려고 했지만 방법을 찾지 못했습니다.
/foo
설치를 먼저 바인딩 /bar
한 다음 설치 하려는 직접적인 시도 /foo
도 새 설치를 두 위치 모두에 복사하는 것으로 보입니다. (이것은 오래된 커널에 있지만)
# mount --bind /foo /bar
# mount -t tmpfs tmpfs /foo
# ls -ldi /foo /bar
46378188 drwxrwxrwt 2 root root 40 Dec 1 14:37 /bar/
46378188 drwxrwxrwt 2 root root 40 Dec 1 14:37 /foo/