![파티션 장치 이름에서 블록 장치 이름을 얻는 방법은 무엇입니까?](https://linux55.com/image/94108/%ED%8C%8C%ED%8B%B0%EC%85%98%20%EC%9E%A5%EC%B9%98%20%EC%9D%B4%EB%A6%84%EC%97%90%EC%84%9C%20%EB%B8%94%EB%A1%9D%20%EC%9E%A5%EC%B9%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
/dev/sda
주어진 파티션 장치 이름(예: )의 상위 블록 장치 이름(예: )을 가져오는 이식 가능한 방법을 찾고 있습니다 /dev/sda1
. 마지막 문자를 제거할 수 있다는 것을 알고 있지만 어떤 경우에는 이것이 작동하지 않습니다.
- MMC 리더는 일반적으로 비슷한 이름을 가지며
/dev/mmcblk0
해당 파티션의 이름도 비슷합니다/dev/mmcblk0p1
(추가 사항 참고p
). - 선택 사항: 일부 블록 장치에는 파티션 테이블이 전혀 없으며 단일 파티션으로 포맷됩니다. 이 경우 파티션 장치와 상위 블록 장치는 동일합니다.
LVM 볼륨은 완전히 다른 이야기입니다. 지금은 지원할 필요가 없지만 추가 노력이 필요하지 않다고 생각하면 괜찮습니다.
답변1
Linux를 사용하는 경우 다음을 사용할 수 있습니다 lsblk
(이는 Linux의 일부입니다 util-linux
).
lsblk -no pkname /dev/sda1
답변2
한 장치가 다른 장치의 파티션인 경우 이름이 지정된 파일(그 내용은 파티션 번호임) /sys/class/block/$dev
이 포함됩니다 .partition
이 경우 다음을 통해 상위 장치의 이름을 얻을 수 있습니다.
basename "$(readlink -f "/sys/class/block/$dev/..")"
또는 다음을 사용하여 zsh
:
echo /sys/class/block/$dev(:A:h:t)
예:
$ dev=sda1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
sda
$ dev=nbd0p1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
nbd0
LVM 볼륨은 완전히 다릅니다.분할linear
특별한 경우를 제외하고는 물리적 PV의 연속 매핑 입니다 .
이러한 상황이 발생하면 다음을 통해 PV 이름을 얻을 수 있습니다.
ls "/sys/class/block/$dev/slaves"
$dev
비슷한 것이 어디에 있습니까 dm-2
? (에서 얻을 수 있습니다 "$(basename "$(readlink -f /dev/VG/LV)")"
).