Linux 파일 시스템에서 루프를 만듭니다
-
06-09-2019 - |
문제
Linux FileSystem에서 루프를 어떻게 작성합니까? Linux 파일 시스템의 DAG (Directed Acyclic Graph) 속성을 깨고 싶습니다. 이게 가능해? 우분투에 스크래치 박스 크로스 컴파일러를 설치했을 때이 조건을 한 번 보았습니다.
나는 지금 그것을 재생산하는 방법을 모른다.
해결책
다른 응답자들은 이미 루프백 장치를 사용하여 마운트를 설정하는 방법에 답했지만 구체적으로 물었습니다. bind
조금 다른 마운트. 바인드 마운트를 사용하려면 --bind
마운트 명령에서. 예를 들어:
mount --bind /original/path /new/path
이렇게하면 파일 시스템 위치에 액세스 할 수 있습니다 /original/path
또한 접근 가능 /new/path
. 이것이 그렇게 될 것입니다 ~ 아니다 MountPoints 다음! 예를 들어 다음 마운트 포인트가 있다고 가정합니다.
/something
/something/underneath/that
이제 내가 만든다고 가정 해 봅시다 bind
마운트 /something
:
mount --bind /something /new_something
같은 파일에 액세스 할 수 있습니다 /something/myfile
경로를 통해 /new_something/myfile
. 그러나 전 할겁니다 ~ 아니다 같은 파일에 액세스 할 수 있습니다 /something/underneath/that/otherfile
경로를 통해 /new_something/underneath/that/otherfile
. 별도를 설정해야합니다 bind
각 파일 시스템 마운트; 또는 비교적 새로운 커널이있는 경우 사용할 수 있습니다. rbind
마운트 하다 MountPoints를 따르십시오 :
mount --rbind /something /new_something
하나의 경고 rbind
마운트 : 파일 시스템이 다음에 장착 된 경우를 처리하지 않습니다. rbind
설정입니다. 즉, 다음과 같은 산이 있다고 가정 해 봅시다.
/something
그런 다음 내 설정을 설정했습니다 rbind
위와 같이 그 다음에 나는 마운트한다 /something/underneath/that
: rbind
마술처럼 새 마운트를 rbind
위치. 또한 커널의 버그로 인해 분명히 마운트 할 수는 없습니다. rbind
산.
또한 "마운트 (2) 시스템 호출을 사용하여 바인드 마운트를 설정하는 방법"을 의미하는 경우를 대비하여 : MS_BIND
깃발 (정의 된 mount.h
) 전화 할 때 mount(2)
정기적으로 bind
산. 용을 위해 rbind
마운트, 당신은 지정해야합니다 MS_BIND
그리고 문서화 MS_REC
깃발 (정의 된 linux/fs.h
).
도움이되기를 바랍니다.
에릭 멜스키
다른 팁
지금까지 모든 답변은 루프백 장치에 장착하고 사용 루프를 생성하지 않는 것 같습니다. 바인딩 마운트.
아마 발견했듯이
$ mkdir -p test/test
$ mount --bind test test/test
액세스 할 수 있습니다 test/test/test
, 그리고 더 이상. 조차도
$ mount --rbind test test/test
재귀 바인드-마운트는 소스에서 기존 마운트를 찾고 대상에 바인딩하기 때문에 작동합니다.
바인드 마운트가 마운트 포인트를 교차하지 않기 때문에 요청한 것은 불가능합니다. 파일 시스템 루프를 정말로 시뮬레이션하려면 의사 결합 마운트를 사용해보십시오. Localfs. 나는 나 자신을 시도하지 않았다. 그 자체로 제공되는 파일 시스템을 읽을 때 잠겨있을 수있다. 방금 NFS 트리를 crossmnt
그 자체로 그것을 장착하지만 비슷한 이유로 실패합니다.
mount /path/to/device /path/to/mount/location -o loop
여기서/path/to/device는 마운트하려는 파티션 또는 디스크 이미지로가는 경로로,/path/to/mount/location은 장치/이미지를 장착하려는 폴더의 경로입니다. 아래에
SO와 같은 파일 시스템의 유형을 포함해야 할 수도 있습니다 (FAT16/FAT32 사용) :
mount /path/to/device /path/to/mount/location -o loop -t vfat
처음부터 하나를 만들 수 있습니다.
먼저 이미지 파일을 만들고 초기화하십시오
dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE
다음으로 FS 유형의 선택을 사용하여 유효한 파티션으로 만드십시오.
mkfs.ext3 -F /tmp/loop.img
새 이미지를 장착하십시오
mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop
이제 새 이미지에서 파일 및 디렉토리를 만들/복사 할 수 있습니다.
재미있어
젠장!