가상 머신을 저장할 올바른 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}'

답변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-bhyveMatt Churchyard의 우수한 패키지와 ZFS 통합을 확인해 볼 수도 있습니다 . 또한 ZFS 풀 이름이나 ZFS 파일 시스템 이름으로 파일 시스템을 마운트하면 트리에서 올바른 장치 번호를 찾으려고 애쓰는 모든 수고를 덜 수 있습니다 /dev.

관련 정보