파일 시스템 레이블이 알려진 경우 파티션 장치 이름과 마운트 지점을 얻는 방법은 무엇입니까?
여러 가지 가능성이 있습니다:
리눅스
장치 이름에 대한 파일 시스템 레이블
장치 이름은 다음을 통해 얻을 수 있습니다 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
선호되는 방법이라고 생각하지 않습니다 .
다른 대학
장치 이름에 대한 파일 시스템 레이블
blkid
Linux에서는 잘 작동하지만 Solaris나 FreeBSD에서는 사용할 수 없습니다(적어도 설치될 것이라고 기대할 수는 없습니다). 마찬가지이다
findfs
.
Linux, Solaris 및 FreeBSD에서 장치 이름을 이식 가능하게 얻는 방법은 무엇입니까?
마운트 지점의 장치 이름
다행스럽게도 df -P
이는 테스트된 모든 시스템에서 매우 유사한 결과를 생성합니다. 문제는 내 추악한 스크립트가 이식성이 없는 것 같다는 것입니다 (Sun을 awk
사용하여 Solaris 및 FreeBSD에서 awk
테스트 ). 선호되는 방법은 무엇입니까?gawk
awk
관련 질문
uuid를 사용하여 플래시 드라이브의 마운트 지점을 얻는 방법은 무엇입니까?
문제: /proc/mounts
Linux에서도 구문 분석은 이식성이 없고 번거롭습니다. 구문 분석이 mount
더 나쁜 것 같습니다. Perl은 일반적으로 사용할 수 없습니다.
디스크 마운트 위치를 확인하는 명령어가 있나요?
문제: 구문 분석에 /proc/mounts
버그가 있는 스크립트를 사용합니다 . awk
이러한 솔루션은 이식성이 없습니다.
일반화하다
파일 시스템 레이블이 이식 가능한 방식으로 제공되는 경우(POSIX 셸을 가정) 장치 이름과 마운트 지점을 가져오고 싶습니다. 디스크 레이블에는 공백이나 기타 비ASCII 문자가 포함될 수 있으며, 이는 문제를 더욱 복잡하게 만듭니다.
Label-To-Device Device-To-Mount-Point
--------------- ---------------------
Linux ✓ ✓ (ugly)
Solaris . .
FreeBSD . .
답변1
다음 단계를 수행할 수 있습니다.
devname
사용을 시작하다blkid_dev_devname(...)
- 다음을 사용하여
prob
이 파티션을 가져옵니다.blkid_new_probe_from_filename(...)
setmntent(...)
,getmntent(...)
, &를 사용 하여 마운트 지점을 복사endmntent(...)
하세요 !mnt->mnt_fsname
devname
mnt->mnt_dir
자세한 내용은 다음 참고 자료를 참조하세요.
- http://linux.die.net/man/3/getmntent
- https://www.kernel.org/pub/linux/utils/util-linux/v2.21/libblkid-docs/api-index-full.html
콘텐츠 데이터 구조
struct mntent {
char *mnt_fsname; /* name of mounted file system */
char *mnt_dir; /* file system path prefix */
...
};