Se você está no linux você pode usar lsblk
(que faz parte de util-linux
):
lsblk -no pkname /dev/sda1
Estou procurando uma maneira portátil de obter o nome do dispositivo de bloqueio pai (por exemplo, /dev/sda
), dado o nome do dispositivo de partição (por exemplo, /dev/sda1
). Eu sei que poderia deixar o último caractere, mas isso não funcionaria em alguns casos:
/dev/mmcblk0
, enquanto suas partições têm nomes como /dev/mmcblk0p1
(observe o extra p
). Os volumes de LVM são uma chaleira de peixe totalmente diferente. Eu não preciso apoiá-los agora, mas se levá-los em conta requer pouco esforço extra, eu não me importaria.
Se um dispositivo for uma partição de outro dispositivo, /sys/class/block/$dev
conterá um arquivo chamado partition
(cujo conteúdo é o número da partição).
Se for esse o caso, você pode obter o nome do dispositivo pai com:
basename "$(readlink -f "/sys/class/block/$dev/..")"
Ou com zsh
:
echo /sys/class/block/$dev(:A:h:t)
Exemplo:
$ dev=sda1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
sda
$ dev=nbd0p1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
nbd0
Os volumes LVM são completamente diferentes, eles não são partições exceto no caso especial em que eles são um mapeamento linear
contíguo de um PV físico.
Se você estiver nesse caso, pode obter o nome desse PV com:
ls "/sys/class/block/$dev/slaves"
Onde $dev
é algo como dm-2
(que você pode obter de "$(basename "$(readlink -f /dev/VG/LV)")"
).