
この質問はすでにしましたが、更新されていません。この情報はこれに関連していると思いますsite
。Linux で 2 つの出力をマージする必要があります。これ:
lsblk -n -b --output KNAME,NAME,SIZE,MOUNTPOINT | grep -v "fd0" | grep -v "loop" | grep -v "sr0" | grep -v "hdc" | grep -v "cdrom"
結果として、次のようになりました:
sda sda 53687091200
sda1 └─sda1 53684994048
dm-3 └─dockerVG-rootLV 53682896896 /
sdb sdb 2147483648000
sdb1 └─sdb1 2147482599424
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd
sdc sdc 536870912000
sdc1 └─sdc1 536869863424
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd
この:
df --exclude={tmpfs,devtmpfs,squashfs,overlay} | sed -e /^Filesystem/d | awk '{print $6 " " $1 " " $3 " " $4 " " $5}'
その結果、次のようになりました。
/ /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
/dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
/dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
/var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
/
したがって、これらのポイント、、、を介して参加したいと思います。重要!別のマウント ポイントがある別の場所/var/lib/docker
でこれを確認したいと思います。また、最初の出力の構造をソートせずに保存する必要があります。/dockerhdd
/dockerssd
結果として、次のようなものを受け取ることになります。
sda sda 53687091200
sda1 └─sda1 53684994048
dm-3 └─dockerVG-rootLV 53682896896 / /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
sdb sdb 2147483648000
sdb1 └─sdb1 2147482599424
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
sdc sdc 536870912000
sdc1 └─sdc1 536869863424
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
から何人かの人がstackoverflow
経由で私を助けてくれましたAWK
が、彼の回答は役に立ちませんでした。また、私は彼のコマンドを少し変更しました。
awk '/^dm-*/ || /^sd*/ || /^xvd*/ { print $0" "arr[$5] } /^Filesystem/ { mrk=1;next } mrk==1 { arr[$6]=$0 }' <<< $(df --exclude={tmpfs,devtmpfs,squashfs,overlay};lsblk -n -b --output KNAME,NAME,SIZE,MOUNTPOINT)
しかし、結果として私は
sda sda 53687091200 fd0 fd0 4096
sda1 └─sda1 53684994048 sda sda 53687091200
dm-3 └─dockerVG-rootLV 53682896896 / sda1 └─sda1 53684994048
sdb sdb 2147483648000 dm-3 └─dockerVG-rootLV 53682896896 /
sdb1 └─sdb1 2147482599424 sdb sdb 2147483648000
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker sdb1 └─sdb1 2147482599424
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker
sdc sdc 536870912000 dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd
sdc1 └─sdc1 536869863424 sdc sdc 536870912000
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd sdc1 └─sdc1 536869863424
これを受け取りたい:
sda sda 53687091200
sda1 └─sda1 53684994048
dm-3 └─dockerVG-rootLV 53682896896 / /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
sdb sdb 2147483648000
sdb1 └─sdb1 2147482599424
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
sdc sdc 536870912000
sdc1 └─sdc1 536869863424
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
答え1
最良の選択肢は、単純なシェル スクリプトです。奇妙で理解しにくいワンライナーを作成することもできますが、理解しやすいシェル スクリプトの方が保守が容易です。
#!/bin/bash
df -h --exclude={tmpfs,devtmpfs,squashfs,overlay} | sed -e /^Filesystem/d | awk '{print $6 " " $1 " " $3 " " $4 " " $5}' > /tmp/dinges.$$
lsblk -n -b --output KNAME,NAME,SIZE,MOUNTPOINT | egrep -v "fd0|loop|sr0|hdc|cdrom" |
while read kname name size mountpoint ; do
printf '%-5s' "$kname"
printf '%-20s' "$name"
printf '%15d' "$size"
printf '%-10s' "$mountpoint"
if [ "$mountpoint" != "" ] ; then
grep "$mountpoint " /tmp/dinges.$$
else
echo
fi
done
rm /tmp/dinges.$$
これは簡単な記述であることを理解してください。このスクリプトには多くの問題 (マウントポイント名にスペースがあるなど) がありますが、何をすべきかはわかるはずです。