디렉토리만 알고 있는 경우 하나 이상의 기본 디스크를 어떻게 찾습니까?

디렉토리만 알고 있는 경우 하나 이상의 기본 디스크를 어떻게 찾습니까?

에 일부 장치가 마운트되어 있다고 가정해 보겠습니다 /backups. 시스템에서 선택한 파일을 백업으로 복사하고 있으며 장치에서 발생하는 소음을 줄이고 싶습니다. hdparm -M기기의 '자동 사운드 관리(AAM)' 설정을 조정하는 데 사용할 수 있다는 것을 알고 있습니다 . 그러나 특정 디렉터리 /dev/sdc(예: 최신 백업 위치를 계산하는 스크립트가 있는 경우 /backups/2017/12/31) 에서 장치(예:)를 어떻게 가져와야 하는지 모르겠습니다 .

내가 할 수 있는 건

echo /dev/$(lsblk -no pkname $(findmnt -nvoSOURCE -T "$DIRECTORY"))

그러나 이를 위해서는 하드코딩된 /dev/접두사가 필요하며 백업 디스크가 하나만 있다고 가정합니다. 어떻게 하면 이것을 더 안정적으로 만들 수 있나요?

이 질문은 특히 파티션이 아닌 올바른 디스크를 찾는 것에 관한 것입니다. 올바른 파티션을 찾으면 충분합니다 df.findmnt

또한 디렉터리가 장치에 마운트된 경우 상위 장치는 호환되지 않는 장치 md와 같습니다 . 이 경우 기본 디스크가 여러 개 있으므로 실제로 이 질문은 단일 파일이나 디렉터리를 하나 또는 여러 디스크에 매핑하는 것에 관한 것입니다. .md0hdparm

답변1

이 스크립트는 가장 안정적인 것으로 보입니다(단일 SATA 디스크 및 소프트웨어 RAID에서 작동).

 lsblk --list -no type,name --inverse $(findmnt -nvoSOURCE -T "$DIRECTORY") \
 | grep ^disk | awk '{ print $2 }' | sort -u \
 | while read name; do echo "Data on /dev/$name"; done

물론 echo명령을 각 디스크에서 수행하려는 실제 작업으로 바꾸십시오.

4 디스크 MD 소프트웨어 raid의 디렉토리 출력 예:

Data on /dev/sda
Data on /dev/sdb
Data on /dev/sdc
Data on /dev/sdd

디스크 1개로 구성된 일반 파티션의 디렉터리 출력 예:

Data on /dev/sdf

답변2

쉽게 알 수 있는 방법은 df폴더의 (절대) 경로를 사용하여 호출하는 것입니다.

$ df $DIRECTORY
file system    1K-blocks used     available used% mounted at
/dev/sda1      303538544 74465700 213630924   26% /root/of/variable/DIRECTORY

관련 정보