Szukam przenośnego sposobu na uzyskanie nazwy nadrzędnego urządzenia blokowego (np. /dev/sda
) Biorąc pod uwagę nazwę urządzenia partycji (np /dev/sda1
.). Wiem, że mogłem po prostu upuścić ostatnią postać, ale w niektórych przypadkach to nie zadziała:
- Czytniki kart MMC zwykle mają nazwy takie jak
/dev/mmcblk0
, podczas gdy ich partycje mają nazwy takie jak/dev/mmcblk0p1
(zauważ dodatkowep
). - opcjonalnie: niektóre urządzenia blokowe nie mają żadnej tabeli partycji i są sformatowane jako pojedyncza partycja. W takim przypadku urządzenie partycji i urządzenie nadrzędnego bloku są takie same.
Objętości LVM to zupełnie inny czajnik ryb. Nie muszę ich teraz wspierać, ale jeśli uwzględnienie ich wymaga niewielkiego dodatkowego wysiłku, nie miałbym nic przeciwko.
shell-script
partition
block-device
Dmitrij Grigoriew
źródło
źródło
/dev/sd0a
ale nie ma/dev/sd0
urządzenia (jest/dev/sd0c
...)/dev/sda1
i/dev/mmcblk0p1
są specyficzne dla Linuksa.lsblk
jest stosunkowo nowy.lsblk
używa również numerów węzłów urządzenia, aby znaleźć właściwy, zamiast po prostu używać nazwy. Wydaje się, że najprostsze rozwiązanie dla Linuksa i util-linux prawdopodobnie i tak będzie zawsze dostępne.lsblk -dpno pkname $devname
przeszedł wszystkie moje testy! Być może powinieneś dodać odpowiedź./dev/sd0c
w takim przypadku. Czy poniższe odpowiedzi działają dla Ciebie?Odpowiedzi:
Jeśli korzystasz z systemu Linux, możesz użyć
lsblk
(który jest częściąutil-linux
):źródło
lsblk
(util-linux
: 2.20.1, Ubuntu 14.04)pkname
po prostu nie ma kolumnykname
.$ lsblk -no pkname /dev/nvme0n1p3
zwraca 7 wierszy w moim systemie. Tak, ta partycja jest zaszyfrowana i zawiera LVM, nie jest to trywialna sytuacja. Nie wiem, jak rzetelnie pobrać właściwą linię ze skryptu.Jeśli urządzenie jest partycją innego urządzenia, wówczas
/sys/class/block/$dev
będzie zawierać plik o nazwiepartition
(którego zawartość jest numerem partycji).W takim przypadku możesz uzyskać nazwę urządzenia nadrzędnego za pomocą:
Lub z
zsh
:Przykład:
Objętości LVM są całkowicie różne, nie są partycjami, z wyjątkiem specjalnego przypadku, w którym są one jednym ciągłym
linear
odwzorowaniem fizycznego PV.W takim przypadku możesz uzyskać nazwę tego teledysku za pomocą:
Gdzie
$dev
jest coś takiegodm-2
(z czego można uzyskać"$(basename "$(readlink -f /dev/VG/LV)")"
).źródło
lsblk
składa, a składnia jest krótka, ale potwierdzam, że twoja odpowiedź jest bardziej ogólna i przenośna. Dzięki!