Mac信者のHackintosh修行

惑星で一番美しいOSが1台でも多くのマシンで動くことを目指します。

APFSに対応したFusion Driveを作る

f:id:siroanko:20171008193447p:plain

macOSでは、高速なSSDと大容量のHDDを組み合わせてFusion Driveを構成することができます。実際のMacintoshと全く同じく、Hackintoshでも、ターミナル上でdiskutilコマンドを使ってFusion Driveを作れます。今でしたら、ビット単価の安い240GB程度のm.2のNVMe SSDと、3TB~4TB程度の3.5インチHDDを組み合わせることで、高速で大容量のドライブを作ることができます。本家のMacintoshでは、市販のm.2 SSDや大容量3.5インチHDDは内蔵できませんので、Hackintoshのメリットを生かせる機能と言えます。

Fusion Driveは従来はcoreStorageという枠組みを使って構成していました。ところが、APFSになって導入されたAPFS Containerを用いることで、APFS対応のFusion Driveが作れるようです。そこで今回は、APFS ContainerによるFusion Driveを作ってみました。

APFS Container

ターミナルから、diskutilとだけタイプすると簡単なコマンドリストが出てきます。(詳細はman diskutilででます)コマンドリストの最後に、

  • appleRAID
  • coreStorage
  • apfs

の3つのサブコマンドがあります。appleRAIDはソフトウェアRAIDを作る機能で、ミラーリング、ストライピング、単純な合算の3通りのRAIDを作ってくれます。coreStorageというのは、Macintoshでサポートされている論理ディスクの仕組みです。coreStorageには、性能の異なるディスクをまとめ上げた場合、性能の良い方を優先して使う機能があります。こうして作られていたのが従来型のFusion Driveです。coreStorageはAPFSに対応していません。

最後のapfsは、新しく追加されたAPFSに関する機能を使うコマンドです。diskutil apfsとタイプすると、apfsサブコマンドで実行できる内容が一覧表示されます。このうちAPFS Containerに関するコマンドには、

  • createContainer (新しい空のAPFS Containerを作る)
  • deleteContainer (APFS Containerを消して構成ディスクをHFSでフォーマット)
  • resizeContainer (APFS Containerのサイズを変更)
  • addVolume (APFS VolumeをAPFS Containerに追加する)
  • deleteVolume (APFS ContainerからAPFS Volumeを削除する)

 があります。ここでdiskutil apfs createContainerとタイプするとヘルプが表示されます。

$ diskutil apfs createContainer

Usage:  diskutil apfs createContainer <disk> [<disk>]

        diskutil apfs createContainer -main <disk> [-secondary <disk>]

        where <disk> = MountPoint|DiskIdentifier|DeviceNode


Create an empty APFS Container. You can then add APFS Volumes with the 
diskutil apfs addVolume verb. If you specify two disks, then a "Fusion" Container is created, with the performance roles assigned automatically unless you use the -main and -secondary options, in which case, the secondary disk is assumed to be on "slower" hardware which is preferably not solid solid state, usually larger, and often used to store associated "auxiliary" data such as the Windows partition(s) for Boot Camp Assistant. Ownership of any affected disks is required.


Example:  diskutil apfs createContainer disk0s2

ここに書いてあるように、createContainerコマンドで、2つのディスクを指定すると、Fusion方式のAPFS Containerが生成されます。2つのディスクのうち、高速なディスクの方が、自動的にメインのディスク(高速な方のディスク。HDDとSSDを組み合わせた場合のSSD側)になります。-mainと-secondaryオプションでメインのディスクをマニュアルで指定することもできます。

Fusion Driveを組んでみる

実際にAPFSでFusion Driveを構成してみます。まずはマシンにsadとhdd(手元にあった古い64GBと160GBのものを使いました)を接続して、番号をdiskutil listで調べておきます。ここではHDDが/dev/disk0に、SSDが/dev/disk3に割り当てられました。

APFS Containerはボリュームが出来ていないと構成できないようです。そこで、シンプルにジャーナル付HFS+でフォーマットしました。APFSでフォーマットすると自動的にAPFS Containerが作られてしまうので、この後のステップでcreateContainerコマンドを実行するときに邪魔になるようです。ディスクユーティリティ.appでフォーマットしても良かったと思いますが、コマンドラインでやってみました。

$ diskutil eraseDisk JHFS+ HDD160GB disk0

$ diskutil eraseDisk JHFS+ SSD64GB disk3

それぞれの名前をHDD160GBとSSD64GBとしました。$ diskutil listで見てみると:

/dev/disk0 (internal, physical):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   GUID_partition_scheme                     *160.0 GB   disk0

   1:                     EFI EFI                  209.7 MB   disk0s1

   2:               Apple_HFS HDD160GB             159.7 GB   disk0s2

/dev/disk3 (internal, physical):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   GUID_partition_scheme                     *64.0 GB    disk3

   1:                     EFI EFI                  209.7 MB   disk3s1

   2:               Apple_HFS SSD64GB              63.7 GB    disk3s2

 

となっていました。ここで

$ diskutil apfs createContainer disk0s2 disk3s2

とすると、APFS Containerが作られます。フォーマットも自動的にAPFSに変更されます。再び$ diskutil listで見ると:

 

$ diskutil list

/dev/disk0 (internal, physical):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   GUID_partition_scheme                     *160.0 GB   disk0

   1:                     EFI EFI                  209.7 MB   disk0s1

   2:              Apple_APFS Container disk7      159.8 GB   disk0s2

 

 

/dev/disk3 (internal, physical):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   GUID_partition_scheme                     *64.0 GB    disk3

   1:                     EFI EFI                  209.7 MB   disk3s1

   2:              Apple_APFS Container disk7      63.8 GB    disk3s2

 

/dev/disk7 (synthesized):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   APFS Container Scheme -                   +223.6 GB   disk7

                              Physical Stores disk0s2, disk3s2


/dev/disk7というドライブが出来上がっていました(disk4,5,6は実ドライブが搭載されていたので7番になりました)。この状態では、入れ物ができた段階で、まだフォーマットされていません。そこで、例えば

$ diskutil apfs addVolume disk7 APFS Fusion

としてフォーマットします。APFSはファイルフォーマットの指定です。でもAPFS以外は指定できないようです。最後のオプションはボリュームの名前です。わかりやすいようにFusionにしてみました。

Fusion Driveを使ってみる

こうして作成したFusion Driveを使ってみました。まずはdiskutil listしてみると、

/dev/disk7 (synthesized):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   APFS Container Scheme -                   +223.6 GB   disk7

                                 Physical Stores disk0s2, disk3s2

   1:             APFS Volume Fusion               880.6 KB   disk7s1


というようにFusionドライブができていることがわかります。ボリュームサイズが880KBと、とても小さいのですが、これは動的に拡張されていくようです。実際に3GB以上のサイズのファイルを入れてみたら、それに合わせてサイズが増えていました。addVolumeコマンドの-reserveオプションで最低サイズを指定したり、-quotaオプションで最大サイズを指定することもできるようです。

/dev/disk7 (synthesized):

   #:                    TYPE NAME                SIZE     IDENTIFIER

   0:   APFS Container Scheme -                  +223.6 GB   disk7

                                 Physical Stores disk2s2, disk3s2

   1:             APFS Volume Fusion              3.1 GB     disk7s1

 

この段階で、Fusionという名前のボリュームが自動的にマウントされています。ここでのサイズ表示はSSDとHDDの合計になっています。Blackmagicで読み書き速度を測ってみたら、SSDの速度とほぼ同じでした。ほとんど空の状態なのでSSDだけが仕事をしていたのだと思います。

f:id:siroanko:20171008223318p:plain

このドライブにHigh Sierraをインストールしてみようとしたところ、APFSを止めてHFS+にするよう指示が出てしまいました。APFS ContainerのFusion Driveであっても、今のHigh SierraではAPFS未対応のようです。

f:id:siroanko:20171009133734p:plain