파티션 장치 이름에서 블록 장치 이름을 얻는 방법은 무엇입니까?

파티션 장치 이름에서 블록 장치 이름을 얻는 방법은 무엇입니까?

/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)")").

관련 정보