파티션 레이블이 알려진 경우 장치 이름과 마운트 지점을 가져옵니다.

파티션 레이블이 알려진 경우 장치 이름과 마운트 지점을 가져옵니다.

파일 시스템 레이블이 알려진 경우 파티션 장치 이름과 마운트 지점을 얻는 방법은 무엇입니까?

여러 가지 가능성이 있습니다:

리눅스

장치 이름에 대한 파일 시스템 레이블

장치 이름은 다음을 통해 얻을 수 있습니다 blkid.

blkid -l -o device -t LABEL="$label" -c /dev/null

마운트 지점의 장치 이름

을 사용하여 마운트 지점을 얻으려고 했지만 blkid실패했습니다. -s 라벨이 제공되면 스위치를 사용하여 다른 모든 필드를 쿼리할 수 있습니다.

blkid -l -t LABEL="$label" -o value -s LABEL      # yields label
blkid -l -t LABEL="$label" -o value -s TYPE       # yields partition type
blkid -l -t LABEL="$label" -o value -s UUID       # yields UUID
blkid -l -t LABEL="$label" -o value -s MOUNTPOINT # yields nothing

마운트 지점을 얻는 것은 -o list옵션이 제공될 때 나열되지만 구문 분석하기 쉬운 방식은 아니지만 분명히 지원되지 않습니다.

blkid -o list -c /dev/null <device>

다음 시도는 df -P장치가 변수에 저장되어 있다고 가정하여 내가 생각해낸 것입니다 device.

export device
mountpoint=$(df -P |
  awk --assign dev="$device" \
    '{if ($1==dev)             \
      {for (i=1; i<=NF-5; i++) \
        $i=$(i+5);             \
        NF-=5;                 \
        print                  \
      }                        \
    }')

이 코드는 작동합니다. 그러나 그 추악함을 고려하면 구문 분석이 df선호되는 방법이라고 생각하지 않습니다 .

다른 대학

장치 이름에 대한 파일 시스템 레이블

blkidLinux에서는 잘 작동하지만 Solaris나 FreeBSD에서는 사용할 수 없습니다(적어도 설치될 것이라고 기대할 수는 없습니다). 마찬가지이다 findfs.

Linux, Solaris 및 FreeBSD에서 장치 이름을 이식 가능하게 얻는 방법은 무엇입니까?

마운트 지점의 장치 이름

다행스럽게도 df -P이는 테스트된 모든 시스템에서 매우 유사한 결과를 생성합니다. 문제는 내 추악한 스크립트가 이식성이 없는 것 같다는 것입니다 (Sun을 awk사용하여 Solaris 및 FreeBSD에서 awk테스트 ). 선호되는 방법은 무엇입니까?gawkawk

관련 질문

uuid를 사용하여 플래시 드라이브의 마운트 지점을 얻는 방법은 무엇입니까? 문제: /proc/mountsLinux에서도 구문 분석은 이식성이 없고 번거롭습니다. 구문 분석이 mount더 나쁜 것 같습니다. Perl은 일반적으로 사용할 수 없습니다.

디스크 마운트 위치를 확인하는 명령어가 있나요? 문제: 구문 분석에 /proc/mounts버그가 있는 스크립트를 사용합니다 . awk이러한 솔루션은 이식성이 없습니다.

일반화하다

파일 시스템 레이블이 이식 가능한 방식으로 제공되는 경우(POSIX 셸을 가정) 장치 이름과 마운트 지점을 가져오고 싶습니다. 디스크 레이블에는 공백이나 기타 비ASCII 문자가 포함될 수 있으며, 이는 문제를 더욱 복잡하게 만듭니다.

         Label-To-Device    Device-To-Mount-Point
         ---------------    ---------------------
Linux           ✓                    ✓ (ugly)
Solaris         .                    .
FreeBSD         .                    .

답변1

다음 단계를 수행할 수 있습니다.

  1. devname사용을 시작하다blkid_dev_devname(...)
  2. 다음을 사용하여 prob이 파티션을 가져옵니다.blkid_new_probe_from_filename(...)
  3. setmntent(...), getmntent(...), &를 사용 하여 마운트 지점을 복사 endmntent(...)하세요 !mnt->mnt_fsnamedevnamemnt->mnt_dir

자세한 내용은 다음 참고 자료를 참조하세요.

콘텐츠 데이터 구조

struct mntent {    
    char *mnt_fsname;   /* name of mounted file system */    
    char *mnt_dir;      /* file system path prefix */      
    ...
}; 

관련 정보