Kernel 达尔文内核磁盘设备通过磁盘仲裁
所以我将最新的ZFS移植到OSX(Kernel 达尔文内核磁盘设备通过磁盘仲裁,kernel,device,disk,darwin,zfs,Kernel,Device,Disk,Darwin,Zfs,所以我将最新的ZFS移植到OSX(github/OSX.ZFS),然后添加了ZVOL,因为这是我想要的。现在,纯BSD内核方面的事情看起来确实可行,但我在苹果特定的集成方面遇到了问题。我只是少了一块拼图 通过定义bdevsw和cdevsw并调用bdevsw\u add和cdevsw\u add\u,我创建了与其他达尔文内核示例类似的新虚拟磁盘(ZVOLs)。从这里可以看到:,它是主ZFS节点,处理所有特定的ioctl。然后在这里创建ZVOL虚拟磁盘节点 (我曾尝试将dev节点命名为disk3和r
github/OSX.ZFS
),然后添加了ZVOL,因为这是我想要的。现在,纯BSD内核方面的事情看起来确实可行,但我在苹果特定的集成方面遇到了问题。我只是少了一块拼图
通过定义bdevsw
和cdevsw
并调用bdevsw\u add
和cdevsw\u add\u,我创建了与其他达尔文内核示例类似的新虚拟磁盘(ZVOLs)。从这里可以看到:,它是主ZFS节点,处理所有特定的ioctl。然后在这里创建ZVOL虚拟磁盘节点
(我曾尝试将dev节点命名为disk3
和rdisk3
,但没有任何区别)
我使用newfs\u msdos
newfs\u hfs
newfs\u udf
处理我收到的大部分ioctl
因此,基本上,它创建了BSD/dev/entries,我可以在虚拟磁盘上创建新的fs,我可以挂载它,使用它。在Unix POV中,它似乎可以作为磁盘工作
但不是在OSX中。它不显示在“diskutil列表”中,也不显示在GUI磁盘实用程序中。显然,我需要在内核中做一些其他的事情来考虑它。
或者,这是我应该在userland做的事吗
# ./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
我还没有处理分区的任何事情,但是我觉得原始磁盘至少应该显示在磁盘实用程序中,这样我就可以尝试分区它。< /P>为ZFS/MACOSX端口提供的KUDOS。如果有人想讨论或有其他建议,这个问题的票在OK,我会用IOKit和C++来代替它。基于Halvorsen的内核书中的示例,它“刚好有效”。显然,苹果希望您使用IOKit,而BSD节点主要用于非块设备。