Darwin内核磁盘设备通过磁盘仲裁

lun*_*man 5 kernel zfs darwin disk device

所以我将最新的ZFS移植到OSX(github/osx.zfs),然后添加了ZVOL,因为它是我想要的东西.现在纯粹的BSD内核方面似乎确实有效,但我遇到了Apple特定集成的问题.我只是错过了一块拼图.

我创建新的虚拟磁盘(ZVOLs)类似于其他Darwin内核例如,通过定义bdevswcdevsw并调用bdevsw_addcdevsw_add_with_bdev.从这里可以看出:create/dev/zfs,它是主要的ZFS节点并处理所有特定的ioctl.然后在此处创建 ZVOL虚拟磁盘节点create/dev/disk_POOL_name

(我曾尝试命名dev的节点作为disk3rdisk3它没有任何区别).

我处理了我收到的大多数ioctl newfs_msdos newfs_hfs newfs_udf,这里处理ioctl

所以,基本上,它创建了BSD/dev/entries,我可以newfs我的虚拟磁盘,我可以挂载它,使用它.从Unix POV,它似乎作为磁盘工作.

但不是在OSX中.它不会显示在"diskutil list"中,也不会显示在GUI Disk Utility中.显然,我需要在内核中做一些其他事情来考虑它.或者,这是我应该在用户地区做的事情吗?

# ./zpool.sh create -f BOOM ~/pool-image.bin 
# ./cmd.sh zfs create -V 50M -o volblocksize=4096 BOOM/vol
# ls -l /dev/*disk*
brw-r-----  1 root      operator    1,   3 Apr  9 01:48 disk0s2
brw-r-----  1 root      operator    1,   2 Apr  9 01:48 disk0s1
brw-r-----  1 root      operator    1,   0 Apr  9 01:48 disk0
crw-r-----  1 root      operator    1,   0 Apr  9 01:48 rdisk0
crw-------  1 root      operator    33,   1 May 27 08:53 rdisk_BOOM_vol
brw-------  1 root      operator    3,   1 May 27 08:53 disk_BOOM_vol
# newfs_msdos  /dev/rdisk_BOOM_vol
/dev/rdisk_BOOM_vol: 12781 sectors in 12781 FAT16 clusters (4096 bytes/cluster)
bps=4096 spc=1 res=1 nft=2 rde=512 sec=12800 mid=0xf0 spf=7 spt=32 hds=16 hid=0 drv=0x00
# mkdir /Volumes/pc
# mount_msdos /dev/disk_BOOM_vol /Volumes/pc
# df -h
/dev/disk_BOOM_vol   102248    560  101688     1%     512   0  100%   /Volumes/pc
# mkdir /Volumes/pc/HELLO
# ls -l /Volumes/pc
drwxrwxrwx  1 _unknown  _unknown  4096 May 27 08:53 HELLO
# diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *21.5 GB    disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Dev                     21.1 GB    disk0s2
# diskutil list /dev/rdisk_BOOM_vol
Could not find whole disk for disk: /dev/rdisk_BOOM_vol
Run Code Online (Sandbox Code Playgroud)

我还没有处理任何与分区有关的事情,但我觉得原始磁盘应至少显示在"磁盘工具"中,以便我可以尝试对其进行分区.