나는 뛰고있어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
이 계층의 주요 설계 목표 중 하나는 장치가 어디로 갔는지 찾기 위해 원시 장치 노드를 검색할 필요가 없도록 하는 것입니다. 현재 접근 방식에서는 이 계층을 사용하여 제공되는 모든 장치 독립적 이점을 피할 수 있습니다 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
.