APFSに対応したFusion Driveを作る

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  []
        diskutil apfs createContainer -main  [-secondary ]
        where  = 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だけが仕事をしていたのだと思います。

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

11件のコメント

  1. コメント失礼します
    FusionDriveをしたのですが、OSがhigh Sierraを使っているためうまく作動せずFusionDriveを解除したいです。
    そこで質問なのですが、ターミナルでどのように打てばFusionDriveが解除されるでしょうか。

  2. deleteContainerもしくはeraseDiskコマンドで消去することになると思います。Diskutilityで消去しても良いかと思います。

  3. こんばんは
    M.2でfusionを作成いたしました。別のboot diskでOSを立ち上げ、Fusion driveを作成し、速度を測定したところ、read3300、write2500とほぼカタログスペック通りでした。そこでこのFusion driveにos14.5(作成時と同じOS)を入れて起動させたところ、なぜかreadが2500程度になってしまいました。writeは変わらず2500のままです。原因の可能性について何か考えられるものがあればご教授お願いいたします。システムを見たところ、きちんとGen3x4で動いているのは確認できています。

  4. M.2の容量と、Fusion driveが使用している使用量はどの程度でしょうか?Fusion driveは、高速のドライブが一杯になったら、低速のドライブに書き込みます。なのでM.2ドライブ容量を使い切ったので低速側ドライブを使用しているのかもしれません。またOSは起動中に多数のプロセスが陰で起動していてドライブに頻繁にデータアクセスします。OSをインストールして起動したことでFusion driveへの見えないアクセスが増えて、ベンチマーク測定に影響を与えている可能性も高いと思います。アクティビティモニタ.appを起動するとディスクへのアクセスの様子がわかります。

  5. ご連絡ありがとうございます。
    容量の件についてはM.2は512gbを使っているので、OS入れる前はもちろんのこと、OSを入れた直後もいっぱいにはなっていないですね。OSインストールの段階で、なにか制御がかかるのでしょうか?参考までに、実は最初、256のM.2でFUSIONdriveを作ったのですが、なんとなく512のほうがいいかなと思い、現在512でFUSIONを構成しております。どちらのM.2でやった場合も、boot diskでないときは、ほぼ既定値R3500、W2500になるのですが、OSを入れて起動するとR,Wともに2500になってしまいます。M.2はどちらもADATA 8200Pro です。十分速度は出ているので問題ないのですが、原因が気になるところです。

    1. Fusion driveは、高速側のドライブ(この場合はM.2 SSD) の容量上限に達するまでは、高速側ドライブの速度が維持されるので、OSが稼働していることのオーバーヘッドが生じているのだと思います。Fusion driveを解除してSSD単体で測定しても、同様の結果になるのではないかと思います。

  6. ありがとうございます。大変丁寧なご回答感謝いたします。理解いたしました!

  7. 今日は。

    FusionDriveは上手く出来て、さてさてとOlarila Catalinaをインストールしようとした所、CloverでのBootloader install時にEFIのセクターと言うかfolderが見つからず、HDDの中にあった、EFIfolderに入れてみたら再起動時OSが無いと蹴られてしまいました。
    どうやれば、単なるAFPSへの導入の様になるのでしょうか。
    解らん?!

    ご教示宜しくお願い致します。

    1. macOSそのものが含まれているイメージは正規ルート以外からダウンロードしたり使用しない方が良いですよ。

    1. 多分こちらで、MaLd0nさんが配布してるイメージを使って起動を試みられてるのではと思います。

      New Olarila Images
      https://olarila.com/forum/viewtopic.php?f=51&t=10412
      **The image is clean, without any mod with Clover bootloader, essentials kexts and patches inside EFI/Clover folder**

      ↓ここに書いてあることから
      Olarila Catalina for Intel and AMD Pcs
      https://olarila.com/forum/viewtopic.php?t=13514
      インテル系とAMD系をクローバーの起動時にOキーを押してPlistの選択ができる構成のイメージになってるっぽいですね。AMD系を使ってる方とかは比較的楽に動かせる可能性がる?のかなと思います。。。

匿名 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です