我在跑自由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
匹配以下其中一项: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
层的主要设计目标之一是避免必须搜索原始设备节点来尝试找到你的设备去了哪里。您当前的方法避开了使用该层提供的所有与设备无关的优势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
您可能还想看看 Matt Churchyard 的优秀vm-bhyve
软件包及其 ZFS 集成。通过 ZFS 池名称或 ZFS 文件系统名称挂载文件系统还可以为您省去尝试从树中找出正确设备编号的所有麻烦/dev
。