たとえば、パーティションが/dev/sda1
であることがわかっている場合、そのパーティションを含むディスク名(この場合は/dev/sda
)を取得するにはどうすればよいですか?
/dev/sda
など)のみである必要があります。特定のパーティション名のブロックデバイスを/sys
で確認できます。たとえば、/ dev/sda1です。
$ ls -l /sys/class/block/sda1
lrwxrwxrwx 1 root root /sys/class/block/sda1 -> \
../../devices/pci0000:00/.../ata1/Host0/target0:0:0/0:0:0:0/block/sda/sda1
Arg /dev/sda1
を取得して/dev/sda
を出力するスクリプトは次のとおりです。
part=$1
part=${part#/dev/}
disk=$(readlink /sys/class/block/$part)
disk=${disk%/*}
disk=/dev/${disk##*/}
echo $disk
試用するlvmなどはありませんが、おそらく同じようなパスがいくつかあります。
lsblk
もあります:
$ lsblk -as /dev/sde1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sde1 8:65 1 7.4G 0 part
`-sde 8:64 1 7.4G 0 disk
そして@don_crisstiが言ったように、あなたは直接親を得ることができます:
lsblk -no pkname /dev/sda1
UTF-8ロケールでのみ機能します。 lvm、zfs、raidはテスト済みです。
parent_tree_disk() {
lsblk | awk '/^[A-Za-z]/{d0=$1; print d0};/^[└─├─]/{d1=$1; print d0, d1};/^ [└─├─]/{d2=$1; print d0, d1, d2}' | sed 's/[├─└─]//g'
}
alias pd='parent_tree_disk'
シェルコマンド:# pd
名前
sda
sda sda1
sda sda2
sda sda2 cl-root
sda sda2 cl-swap
シェルコマンド:# pd | awk '/ sda2/{print $ 1}'
sda
そして、あなたはソート、一意のようなpdリスト出力で他のフィルターを使うことができます...
おそらく美しくないでしょう:
for d in `fdisk -l 2>/dev/null | grep "^Disk " | cut -d":" -f1 | cut -f2`
do
if [ `fdisk -l $d 2>/dev/null | grep -c "/dev/sda1"` -gt 0 ]
then
echo On disk $d
fi
done
LVMではなく、「実際の」ディスクに対してのみ機能します。