如何创建一个 csh 脚本来识别保存虚拟机的正确 USB 磁盘

如何创建一个 csh 脚本来识别保存虚拟机的正确 USB 磁盘

我在跑自由BSD 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匹配以下其中一项:r1w1e2NM13N4CZ3e4d31334e34435a。这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层的主要设计目标之一是避免必须搜索原始设备节点来尝试找到你的设备去了哪里。您当前的方法避开了使用该层提供的所有与设备无关的优势GEOM

假设您的 2T USB 驱动器有GPT分区表。如果您将唯一的(并且希望是描述性的)GPT 标签应用于该驱动器的分区 2,您将能够通过该标签挂载或引用该分区,而不是被迫找出正确的(且不断变化的)/dev/daNpM设备节点。

首先,最后一次弄清楚您的 USB 驱动器在哪里。我们假设它是/dev/da3.在这里,我们将分区 2 标记da3my-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

您可能还想看看 Matt Churchyard 的优秀vm-bhyve软件包及其 ZFS 集成。通过 ZFS 池名称或 ZFS 文件系统名称挂载文件系统还可以为您省去尝试从树中找出正确设备编号的所有麻烦/dev

相关内容