FreeBSD VirtIO

virtio 참고 : https://wiki.libvirt.org/page/Virtio

So-called “full virtualization” is a nice feature because it allows you to run any operating system virtualized. However, it’s slow because the hypervisor has to emulate actual physical devices such as RTL8139 network cards . This emulation is both complicated and inefficient.

Virtio is a virtualization standard for network and disk device drivers where just the guest’s device driver “knows” it is running in a virtual environment, and cooperates with the hypervisor. This enables guests to get high performance network and disk operations, and gives most of the performance benefits of paravirtualization.

Note that virtio is different, but architecturally similar to, Xen paravirtualized device drivers (such as the ones that you can install in a Windows guest to make it go faster under Xen). Also similar is VMWare’s Guest Tools.

This page describes how to configure libvirt to use virtio with KVM guests.

kvm 사용시 virtio Driver 를 사용할 일이 종종 있습니다.

과거에는 virtio-kmod 를 ports 에서 설치 하고  /boot/loader.conf 에 virtio_load 등을 추가 하였지만

 

BSD 11 에서는 바로 Disk 를 추가 하여 사용 할수 있습니다.

 

VirtIO Driver load

Driver load 확인을 위한것임으로 별도로 확인할 필요는 없습니다.

 

root@bsd11:~ # kldload virtio
kldload: can't load virtio: module already loaded or in kernel
root@bsd11:~ #

이미 kernel 에서 load 되어 있다고 나옵니다.

 

차후 make world 도 해봐야 겠네요. 🙂

root@bsd11:~ # cat /usr/src/sys/amd64/conf/GENERIC | grep vir
device          virtio                  # Generic VirtIO bus (required)
device          virtio_pci              # VirtIO PCI device
device          virtio_blk              # VirtIO Block device
device          virtio_scsi             # VirtIO SCSI device
device          virtio_balloon          # VirtIO Memory Balloon device
root@bsd11:~ #

 

 

VirtIO Device 확인

Disk name 은 vtbdX 형식으로 추가 됩니다.

root@bsd11:~ # ls -al /dev/vtb*
crw-r-----  1 root  operator  0x48 Mar 11 21:49 /dev/vtbd0
root@bsd11:~ #

 

VirtIO Disk Test

root@bsd11:~ # gpart create -s GPT vtbd0
vtbd0 created
root@bsd11:~ # gpart add -t freebsd-ufs vtbd0
vtbd0p1 added
root@bsd11:~ # newfs -U /dev/vtbd0p1
/dev/vtbd0p1: 10240.0MB (20971440 sectors) block size 32768, fragment size 4096
        using 17 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
        with soft updates
super-block backups (for fsck_ffs -b #) at:
 192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632, 8975872, 10258112,
 11540352, 12822592, 14104832, 15387072, 16669312, 17951552, 19233792, 20516032
root@bsd11:~ # mkdir /data
root@bsd11:~ # mount /dev/vtbd0p1 /data/
root@bsd11:~ # df -h | grep -i data
/dev/vtbd0p1            9.7G    8.0K    8.9G     0%    /data
root@bsd11:~ #

 

FreeBSD Adding Disk

official site : https://www.freebsd.org/doc/handbook/disks-adding.html

자세한 내용은 FreeBSD handbook site 를 참고해 주세요.

BSD 7~8 Version 에서 자주 사용하였던 sysinstall 은 BSD 11 Version 에서는 더이상 사용하지 않습니다.

root@bsd11:~ # sysinstall
sysinstall: Command not found.
root@bsd11:~ #

 

BSD11 에서는 bsdinstall 을 사용합니다. 

root@BSD11:~ # bsdinstall

(Disk 추가 부분이 bsdinstall 에서 되는지 확인해보지 못하였습니다.)

 

gpart 명령어로 Disk 를 확인 합니다.

기존 디스크는 gpart show 로 확인 합니다.

root@bsd11:~ # ls -al /dev/ad*
crw-r-----  1 root  operator  0x5b Mar 11 20:57 /dev/ada0
crw-r-----  1 root  operator  0x5c Mar 11 20:57 /dev/ada0p1
crw-r-----  1 root  operator  0x5d Mar 11 20:57 /dev/ada0p2
crw-r-----  1 root  operator  0x5e Mar 11 20:57 /dev/ada0p3
crw-r-----  1 root  operator  0x5f Mar 11 20:57 /dev/ada1

기존 디스크 확인 
root@bsd11:~ # gpart show
=>      40  83886000  ada0  GPT  (40G)
        40      1024     1  freebsd-boot  (512K)
      1064       984        - free -  (492K)
      2048   4194304     2  freebsd-swap  (2.0G)
   4196352  79687680     3  freebsd-zfs  (38G)
  83884032      2008        - free -  (1.0M)

root@bsd11:~ #

 

ada1 Device 를 gpt 파티션 테이블로 설정 합니다.

gpart 명령어로 ada1 Device 의 용량을 확인 합니다.

root@bsd11:~ # gpart create -s GPT ada1
ada1 created
root@bsd11:~ #
root@bsd11:~ # gpart show ada1
=>      40  20971440  ada1  GPT  (10G)
        40  20971440        - free -  (10G)

root@bsd11:~ #

 

ada1 Device 의 모든 용량을 지정하여 freebsd-ufs Filesystem 으로 지정 합니다.

용량지정시 gpart add -t freebsd-ufs -s 1G ada1 으로 지정 하시면 됩니다.

root@bsd11:~ # gpart add -t freebsd-ufs  ada1
ada1p1 added
root@bsd11:~ # gpart show ada1
=>      40  20971440  ada1  GPT  (10G)
        40  20971440     1  freebsd-ufs  (10G)

root@bsd11:~ #

 

File System 포멧

root@bsd11:~ # newfs -U /dev/ada1p1
/dev/ada1p1: 10240.0MB (20971440 sectors) block size 32768, fragment size 4096
        using 17 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
        with soft updates
super-block backups (for fsck_ffs -b #) at:
 192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632, 8975872, 10258112, 11540352, 12822592, 14104832, 15387072, 16669312, 17951552, 19233792, 20516032
root@bsd11:~ #

 

마운트 포인트 생성 및 /etc/fstab 등록

root@bsd11:~ # mkdir /data
root@bsd11:~ # vi /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ada0p2             none    swap    sw              0       0
/dev/ada1p1             /data   ufs     rw              0       0

 

마운트 확인

root@bsd11:~ # mount -a
root@bsd11:~ # df -h |grep data
/dev/ada1p1             9.7G    8.0K    8.9G     0%    /data
root@bsd11:~ #

 

파티션 삭제

/etc/fstab 의 /data 라인을 삭제 하고 Disk 를 umount 합니다.

추가한 /data 라인을 삭제 합니다. 
root@bsd11:~ # vi /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ada0p2             none    swap    sw              0       0
/dev/ada1p1             /data   ufs     rw              0       0

root@bsd11:~ # umount /data
root@bsd11:~ # df -h |grep data
root@bsd11:~ #

 

gpart /data 슬라이스 삭제 및 GPT Disk 삭제

gpart 명령어로 Disk 정보를 확인 합니다. 
root@bsd11:~ # gpart show
=>      40  83886000  ada0  GPT  (40G)
        40      1024     1  freebsd-boot  (512K)
      1064       984        - free -  (492K)
      2048   4194304     2  freebsd-swap  (2.0G)
   4196352  79687680     3  freebsd-zfs  (38G)
  83884032      2008        - free -  (1.0M)

=>      40  20971440  ada1  GPT  (10G)
        40  20971440     1  freebsd-ufs  (10G)


ada1 Device 의 1번 슬라이스를 삭제 합니다. 
root@bsd11:~ # gpart delete -i1 ada1
ada1p1 deleted

ada1 Device 가 GPT 테이블로 남아 있습니다. 
root@bsd11:~ # gpart show ada1
=>      40  20971440  ada1  GPT  (10G)
        40  20971440        - free -  (10G)

GPT 테이블 완전 삭제시 gpart destory 명령어를 사용합니다. 
root@bsd11:~ # gpart destroy -F ada1
ada1 destroyed
root@bsd11:~ #

 

ex) zfs volume 으로 사용할 slice 생성

root@bsd11:~ # gpart show
=>      63  41942977  ada0  MBR  (20G)
        63         1        - free -  (512B)
        64  41942975     1  freebsd  [active]  (20G)
  41943039         1        - free -  (512B)

=>       0  41942975  ada0s1  BSD  (20G)
         0  39845888       1  freebsd-ufs  (19G)
  39845888   2097086       2  freebsd-swap  (1.0G)
  41942974         1          - free -  (512B)

=>      40  20971440  vtbd0  GPT  (10G)
        40   2097152      1  freebsd-zfs  (1.0G)
   2097192  18874288         - free -  (9.0G)

root@bsd11:~ #

root@bsd11:~ # gpart add -t freebsd-zfs -s 1G vtbd0
vtbd0p2 added
root@bsd11:~ # gpart add -t freebsd-zfs -s 1G vtbd0
vtbd0p3 added
root@bsd11:~ # gpart add -t freebsd-zfs -s 1G vtbd0
vtbd0p4 added
root@bsd11:~ # gpart add -t freebsd-zfs -s 1G vtbd0
vtbd0p5 added
root@bsd11:~ # gpart add -t freebsd-zfs -s 1G vtbd0
vtbd0p6 added
root@bsd11:~ #



 

생성한 slice 확인

root@bsd11:~ # gpart show
=>      63  41942977  ada0  MBR  (20G)
        63         1        - free -  (512B)
        64  41942975     1  freebsd  [active]  (20G)
  41943039         1        - free -  (512B)

=>       0  41942975  ada0s1  BSD  (20G)
         0  39845888       1  freebsd-ufs  (19G)
  39845888   2097086       2  freebsd-swap  (1.0G)
  41942974         1          - free -  (512B)

=>      40  20971440  vtbd0  GPT  (10G)
        40   2097152      1  freebsd-zfs  (1.0G)
   2097192   2097152      2  freebsd-zfs  (1.0G)
   4194344   2097152      3  freebsd-zfs  (1.0G)
   6291496   2097152      4  freebsd-zfs  (1.0G)
   8388648   2097152      5  freebsd-zfs  (1.0G)
  10485800   2097152      6  freebsd-zfs  (1.0G)
  12582952   8388528         - free -  (4.0G)

root@bsd11:~ #

 

 

삭제시

root@bsd11:~ # gpart delete -i 1 vtbd0
vtbd0p1 deleted