폴더가 어떤 물리적 장치에 있는지 확인하는 방법은 무엇입니까?

폴더가 어떤 물리적 장치에 있는지 확인하는 방법은 무엇입니까?

구체적으로는 다음과 같습니다. sudo mkdir /work실제로 내 하드 드라이브에 있고 다른 드라이브에 매핑되지 않았는지 확인하고 싶었습니다.

이 폴더의 물리적 위치를 어떻게 확인할 수 있나요?

답변1

df(1)명령은 파일이나 디렉터리가 어느 장치에 있는지 알려줍니다.

df /work

첫 번째 필드에는 파일이나 디렉터리가 있는 장치가 포함됩니다.

예를 들어

$ df /root
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1043289    194300    795977  20% /

장치가 논리 볼륨인 경우 논리 볼륨이 어느 블록 장치에 있는지 확인해야 합니다. 이렇게 하려면 다음 lvs(8)명령을 사용할 수 있습니다.

# df /usr
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/orthanc-usr
                       8256952   4578000   3259524  59% /usr
# lvs -o +devices /dev/mapper/orthanc-usr
  LV   VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert Devices     
  usr  orthanc -wi-ao 8.00g                                       /dev/sda3(0)

usr마지막 열은 장치에 있는 orthanc볼륨 그룹()의 논리 볼륨을 알려줍니다 . 볼륨 그룹은 여러 물리적 볼륨에 걸쳐 있을 수 있으므로 여러 장치가 나열될 수 있습니다./dev/mapper/orthanc-usr/dev/sda3

또 다른 유형의 논리 블록 장치는 md(이전에는 메타디스크라고 알려진 다중 장치) 장치입니다. 예를 들어 /dev/md2md 장치의 구성 요소를 보려면 다음을 사용하거나 mdadm --detail볼 수 있습니다./proc/mdstat

# df /srv
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md2             956626436 199340344 757286092  21% /srv
# mdadm --detail /dev/md2
...details elided...
    Number   Major   Minor   RaidDevice State
       0       8        3        0      active sync   /dev/sda3
       1       8       19        1      active sync   /dev/sdb3

및 장치에서 볼 수 있습니다 /dev/md2./dev/sda3/dev/sdb3

기본 블록 장치를 결정하는 고유한 방법이 있는 블록 장치를 중첩하는 다른 방법(회로, 루프백 파일 시스템)이 있으며 여러 수준을 중첩할 수도 있으므로 아래로 작업해야 합니다. 모든 경우를 받아들여야 합니다.

답변2

스크립트의 경우 다음을 사용할 수 있습니다.

$ df -P <pathname> | awk 'END{print $1}'

이는 POSIX와 호환됩니다.

답변3

최신 Ubuntu 배포판에는 파일/디렉터리와 장치 사이에 추가 계층(장치 매퍼)이 있습니다. /dev/mapper실제 특수 장치에 대한 심볼릭 링크가 포함되어 있습니다. 예를 들어 현재 디렉터리를 사용해 보세요.

$ df . | grep '^/' | cut -d' ' -f1
/dev/mapper/kubuntu--vg-root

$ ls -l /dev/mapper/kubuntu--vg-root
lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1

따라서 프로그래밍 방식으로 장치의 전체 경로를 얻으려면 다음을 사용할 수 있습니다.

$ realpath $(df . | grep '^/' | cut -d' ' -f1)

이것은 내 사례 인쇄입니다.

/dev/dm-1

realpathGNU coreutils의 일부입니다.

답변4

$ findmnt -no source -T /      # mountpoint
/dev/nvme0n1p2
$ findmnt -no source -T /usr   # directory under mountpoint
/dev/nvme0n1p2
$ COLUMNS=70 man findmnt | sed -E '/^ {7}-[noT]/,/^$/!d;s/^ {7}//'           
-n, --noheadings
    Do not print a header line.

-o, --output list
    Define output columns. See the --help output to get a
    list of the currently supported columns. The TARGET
    column contains tree formatting if the --list or --raw
    options are not specified.

-T, --target path
    Define the mount target. If path is not a mountpoint file
    or directory, then findmnt checks the path elements in
    reverse order to get the mountpoint (this feature is
    supported only when searching in kernel files and
    unsupported for --fstab). It’s recommended to use the
    option --mountpoint when checks of path elements are
    unwanted and path is a strictly specified mountpoint.

관련 정보