파일이나 디렉터리가 어느 하위 볼륨에 있는지 확인하고 싶습니다. 예를 들어 하위 볼륨 마운트 지점 /mnt/btrfs-subvol
과 디렉터리가 있고 이를 /mnt/btrfs-subvol/some/dir
실행 하면 .something /mnt/btrfs-subvol/some/dir
btrfs-subvol
내가 생각할 수 있는 최선의 방법은 돌아가서 stat
256개의 inode로 각 디렉토리를 테스트하는 것이지만 그것이 유일한 방법이라고는 상상할 수 없습니다. 아니면 달릴 수도 있어요
until btrfs sub show `pwd`; cd ..;done; echo `pwd`
그러나 나는 좀 더 우아한 해결책이 있어야 한다고 생각합니다.
답변1
이를 사용할 수 있고 stat
(POSIX에서는 필요하지 않음) 해당 옵션이 충분히 풍부하다면 다음 명령은 다음과 같습니다.
stat --format=%m /mnt/btrfs-subvol/some/dir
당신이 원하는 것을 말해 줄 것입니다. 주석은 dir
모든 유형이 될 수 있습니다.문서, 반드시 디렉토리일 필요는 없습니다.
노트:
매뉴얼
%m
에는 Btrfs의 마운트 지점을 의미한다고 되어 있는데 이는 다소 오해의 소지가 있습니다. Kubuntu 18.04.5 LTS에서 테스트한 바에 따르면/mnt/btrfs-subvol/
명시적인 마운트 지점이 아니더라도(즉,mount whatever /mnt/btrfs-subvol/
발생하지 않았음) 하위 볼륨(/
또는 로 명시적으로 마운트된 하위 볼륨 내/mnt/
)인 경우 명령은 마운트로 처리됩니다. 가리키다. 이것이 당신이 원하는 것 같습니다.출력은 장치의 Btrfs 디렉터리(및 하위 볼륨) 트리의 유효한 경로가 아니라 운영 체제의 디렉터리 구조에 있는 유효한 경로입니다(차이점을 잘 모르는 경우 다음을 참조하세요).이 문제그리고 내 대답). 이번에도 이 동작이 정확히 여러분이 원하는 동작인 것 같습니다.
이 명령은 Btrfs 이외의 파일 시스템(예: Kubuntu에서
stat --format=%m /dev/null
인쇄/dev
)에서 작동합니다. 분명히 다른 파일 시스템에는 일반적으로 하위 볼륨 개념이 없습니다. 찾고 있는 파일이 Btrfs 파일 시스템에 있는지 먼저 확인해야 할 수도 있습니다.stat --file-system --format=%T /mnt/btrfs-subvol/some/dir
이 내용이 보이면
btrfs
계속해서 기본 명령을 사용하여 하위 볼륨을 찾으십시오. 불행하게도 한 번의 호출로stat
두 가지 정보(포함 또는 제외)를 인쇄할 수 있는 방법은 없습니다 .--file-system
위의 결론은 두 번 실행해야 함을 의미합니다
stat
.dir
경로 아래에서 동일한 콘텐츠가 표시 된다는 보장은 없습니다/mnt/btrfs-subvol/some/dir
. 중간에 일부 (제거) 설치가 발생하면 어떻게 되나요? 비교하다톡투. Linux에서는stat
파일 설명자를 사용하여 TOCTOU 없이 동일한 파일에서 두 개의 s를 안정적으로 실행할 수 있습니다.( stat --dereference --file-system --format=%T /proc/self/fd/3 stat --dereference --format=%m /proc/self/fd/3 ) 3</mnt/btrfs-subvol/some/dir
기호 링크 자체 인 경우
dir
명령이 이를 따릅니다.나중에 작업할 수 있도록 하위 볼륨을 알고 싶을 수도 있습니다. 무슨 일이 있어도 당신은 그것을 길로 취급할 것입니다. 사용하기 전에 상황이 바뀔 수 있으며 TOCTOU가 귀하에게 타격을 줄 수 있습니다.
관련 경로가 귀하의 동의 없이 의미를 변경하지 않을 것이라고 확신하는 경우
stat
s 및 해당 결과를 간단한 방법으로 처리하면 됩니다.내 테스트에서
stat --file-system …
동작은 다음과 같습니다stat --file-system --dereference …
. 이는 대상 파일이 심볼릭 링크인 경우 sstat
가 있거나 없거나--file-system
(둘 다 명시적) 일관성 없는 결과를 생성할 수 있음을 의미합니다.--dereference