仮想マシンを保存する正しいUSBディスクを識別するcshスクリプトを作成する方法

仮想マシンを保存する正しいUSBディスクを識別するcshスクリプトを作成する方法

私は走っているFreeBSD 13R私が使うシェルでは掘削。 「」という単語が存在するように見えるスクリプトを作成したいと思います。r1w1e2「または」NM13N4CZ「または」3e4d31334e34435a「私が命令を出す時」ジオメトリディスクリスト「与える」最大3つ「出力へ。マッピングのため、このスクリプトが必要です。USBディスクは頻繁に交換されます。しかし、私が作成したすべての*.img(仮想マシン)ファイルをどのディスクに保存しているかを確認する必要があります。たとえば、今この時点で次のコマンドを実行します。

geom disk list :

Geom name: da3
Providers:
1. Name: da3
   Mediasize: 2000398933504 (1.8T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r1w1e2
   descr: Seagate M3 Portable
   lunname: NM13N4CZ
   lunid: 3e4d31334e34435a
   ident: NM13N4CZ
   rotationrate: unknown
   fwsectors: 63
   fwheads: 255

確認してみると正しいディスク最大3つ。その後、私が望む仮想マシンを起動できます。ビビこのように:

bhyve -S -c sockets=2,cores=2,threads=2 -m 8G -w -H -A \
-s 0,hostbridge \
-s 2,virtio-blk,/mnt/$disk$p2/bhyve/os/Linux/photon.img \
-s 3:0,passthru,1/0/0 \
-s 9,virtio-net,tap0 \
-s 10,virtio-9p,sharename=/ \
-s 29,fbuf,tcp=0.0.0.0:5900,w=1440,h=900 \
-s 30,xhci,tablet \
-s 31,lpc \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_BHF_CODE.fd \
-l com1,stdio \
vm0

良い$ディスク$はい最大3つそしてp2は決して変わらないでしょう。本当にありがとうございました。

解決策:

解決策:

set vmdisk=`geom disk list | awk '/^Geom name: /{d=$NF} /^ *lunname: (r1w1e2|NM13N4CZ|3e4d31334e34435a)/ && d{print d}'`

echo $vmdisk
da2

-s 2,virtio-blk,/mnt/$vmdisk'p2'/bhyve/os/Linux/photon.img \

ベストアンサー1

Geom nameあなたの質問を理解している場合は、次のことを知りたいです。そしてただ lunname次のいずれかと一致します。r1w1e2、、NM13N4CZまたは3e4d31334e34435a。これはうまくsedいきます(テストできませんbsd sed)。

your_cmd | sed -n 's/^Geom name: \(.*\)$/\1/;ta;/^ *lunname: \(r1w1e2\|NM13N4CZ\|3e4d31334e34435a\)$/{g;p};d;:a h'

私はこのawkがうまくいくと確信しています。

your_cmd | awk '/^Geom name: /{d=$NF} /^ *lunname: (r1w1e2|NM13N4CZ|3e4d31334e34435a)$/ && d{print d}'

おすすめ記事