5

そこで、最新の ZFS を OSX に移植 ( github/osx.zfs) し、ZVOL が欲しかったので追加しました。現在、純粋な BSD カーネル側は機能しているように見えますが、Apple 固有の統合に問題があります。パズルのピースが欠けているだけです。

bdevswと を定義して とcdevswを呼び出すことにより、他の Darwin カーネルの例bdevsw_addと同様に、新しい仮想ディスク (ZVOL) を作成しますcdevsw_add_with_bdev。ここでわかるように、メインの ZFS ノードであり、すべての特定の ioctl を処理する /dev/zfs を作成します。次に、ZVOL 仮想ディスク ノードがここに作成されます。 create /dev/disk_POOL_name

(開発ノードに と という名前を付けてみましたがdisk3rdisk3違いはありませんでした)。

私は受け取ったほとんどの ioctl を を使用して処理しますnewfs_msdos newfs_hfs newfs_udf。ここでは ioctl を処理します

したがって、基本的には、BSD /dev/ エントリが作成され、仮想ディスクを newfs し、マウントして使用することができます。Unix POV からは、ディスクとして動作するように見えます。

しかし、OSXではありません。「diskutil リスト」にも、GUI ディスク ユーティリティにも表示されません。明らかに、それを考慮に入れるためにカーネルで何か他のことをする必要があります。それとも、ユーザーランドでやるべきことですか?

# ./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

パーティションに関してはまだ何も処理していませんが、パーティションを作成できるようにするには、少なくともディスク ユーティリティに raw ディスクを表示する必要があると思います。

4

0 に答える 0