디렉터리/파일이 있는 하위 볼륨을 확인하는 방법은 무엇입니까?

디렉터리/파일이 있는 하위 볼륨을 확인하는 방법은 무엇입니까?

파일이나 디렉터리가 어느 하위 볼륨에 있는지 확인하고 싶습니다. 예를 들어 하위 볼륨 마운트 지점 /mnt/btrfs-subvol과 디렉터리가 있고 이를 /mnt/btrfs-subvol/some/dir실행 하면 .something /mnt/btrfs-subvol/some/dirbtrfs-subvol

내가 생각할 수 있는 최선의 방법은 돌아가서 stat256개의 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가 귀하에게 타격을 줄 수 있습니다.

    관련 경로가 귀하의 동의 없이 의미를 변경하지 않을 것이라고 확신하는 경우 stats 및 해당 결과를 간단한 방법으로 처리하면 됩니다.

  • 내 테스트에서 stat --file-system …동작은 다음과 같습니다 stat --file-system --dereference …. 이는 대상 파일이 심볼릭 링크인 경우 s stat가 있거나 없거나 --file-system(둘 다 명시적) 일관성 없는 결과를 생성할 수 있음을 의미합니다.--dereference

관련 정보