私は走っている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}'
答え2
これは実際の目的が何であるか両方の回答者にとって不明瞭になりましたが、GEOM
この層の主な設計目標の1つは、デバイスがどこに行ったかを見つけるためにrawデバイスノードを検索する必要がないことです。現在のアプローチでは、この層を使用して提供されるすべてのデバイスに依存しない利点を回避できますGEOM
。
2T USBドライブにGPT
パーティションテーブルがあるとします。一意の(そして説明を含む)GPTラベルをそのドライブのパーティション2に適用すると、正しい(継続的に変更される)デバイスを特定するように強制されるのではなく、そのラベルを介してその/dev/daNpM
パーティションをマウントまたは参照できます。節。
まず、最後にUSBドライブがどこにあるかを調べます。/dev/da3
ここでは、パーティション2に次のようにda3
ラベルを付けますmy-vm-partition
。
# gpart modify -l my-vm-partition -i 2 /dev/da3
これで、次のことができます。
# mount /dev/gpt/my-vm-partition /mnt
基本デバイスについて何も知る必要はありません/dev/daN
。
または、Bhyveコマンドラインが実際に最終目標である場合は、次のようになります。
# mkdir /my-vm-partition
# mount /dev/gpt/my-vm-partition /my-vm-partition
# bhyve -S -c sockets=2,cores=2,threads=2 -m 8G -w -H -A \
-s 0,hostbridge \
-s 2,virtio-blk,/my-vm-partition/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
vm-bhyve
Matt Churchyardの優れたパッケージとZFSの統合を確認することもできます。さらに、ZFSプール名またはZFSファイルシステム名でファイルシステムをマウントすると、ツリー内の正しいデバイス番号を見つけようとするすべての労力を減らすことができます/dev
。