サイトアイコン Boot macOS

macOSでRAIDを組む

macOSには、ミラーリング、ストライピング、単純な合算の3通りのRAIDを作る機能が備わっています。RAIDはもともと、安価なディスク(Inexpensive Disks)をたくさん使って冗長なディスクアレイ(Redundant Array)を作って信頼性をあげようという目的で考えられました。なので、ミラーリングを行うRAID 1が本来の姿です。本家のMacintoshで複数のHDDを内蔵できる機種は一部のMac miniだけです(それもSSDを搭載しようとすると、HDDは1台です)。一方でHackintoshなら、大容量のHDDを何台でも内蔵することが可能です。Fusion Driveもそうでしたが、RAIDも、Hackintoshならではのメリットを生かせる機能と言えます。

RAIDはディスクユーティリティ.appからGUI操作で作成することができます。El Capitanの時にRAID作成機能がディスクユーティリティ.appから削除されたことがあります。しかしGUI機能はSierraから復活して、High Sierraでも使うことができます。ディスクユーティリティ.appは、diskutilコマンドを呼び出しているだけですので、GUIで作れなくてもdiskutilコマンドで作ることにできます。

ここでは、ディスクユーティリティ.appを使ってRAID 1を作ってみます。

ディスクユーティリティでRAIDを作る

まずは手元にある古いHDDを2台、Hackintoshに接続しました。そこでディスクユーティリティを起動します。

ファイルメニューからRAIDアシスタントを起動します。ここでRAID 1を選択します。

次のダイアログで、RAIDにするHDDを選択し、次に名前をつけます。RaidOneという名前にしてみました。

これで完成です。

ファインダには、通常のHDDのようにマウントされています。

diskutil listコマンドで確認してみると、/dev/disk1と/dev/disk6に実際のハードディスクがマウントされていて、RAIDのドライブは/dev/disk7にマウントされています。

$ diskutil list
/dev/disk1 (internal, physical):
   #:                    TYPE NAME                SIZE     IDENTIFIER
   0:   GUID_partition_scheme                     *80.0 GB    disk1
   1:                     EFI EFI                  209.7 MB   disk1s1
   2:              Apple_RAID                      79.7 GB    disk1s2
   3:              Apple_Boot Boot OS X            134.2 MB   disk1s3


/dev/disk6 (internal, physical):
   #:                    TYPE NAME                SIZE     IDENTIFIER
   0:   GUID_partition_scheme                     *80.0 GB    disk6
   1:                     EFI EFI                  209.7 MB   disk6s1
   2:              Apple_RAID                      79.7 GB    disk6s2
   3:              Apple_Boot Boot OS X            134.2 MB   disk6s3

/dev/disk7 (internal, virtual):
   #:                    TYPE NAME                SIZE     IDENTIFIER
   0:               Apple_HFS RaidOne             +79.7 GB    disk7

RAIDのドライブはHFS+でフォーマット済みです。これはAPFSでフォーマットし直すことも可能です。APFSでフォーマットすると、/dev/disk7にはAPFS Containerができて、実際の中身は/dev/disk8にマウントされました。

/dev/disk7 (internal, virtual):
   #:                    TYPE NAME                SIZE     IDENTIFIER
   0:              Apple_APFS                     +79.7 GB    disk7
/dev/disk8 (synthesized):
   #:                    TYPE NAME                SIZE     IDENTIFIER
   0:   APFS Container Scheme -                   +79.7 GB    disk8
                                 Physical Store disk7
   1:             APFS Volume RaidOne              938.0 KB   disk8s1

RAIDを使ってみる

今回使用した2台のHDDは同じもので、Blackmagic Disk Speed Testで計測するとReadが42GB/sでWriteが44GB/sでした。RAIDを構成した場合は、Readは変わらず42GB/sでWriteが56GB/sでした。ほとんど変わらないばかりか、むしろWriteは高速化されていました。RAIDにすることでの速度低下は無いと言えます。

ディスクユーティリティでRAIDの状態を知ることができます。同じことは、diskutil appleRAID listコマンドでも行えます。(ディスクユーティリティの応答が悪かったりする場合があり、diskutilコマンドの方が確実でした。なので以下でも対応するdiskutilコマンドも書いていきます)

HDDが壊れた状況を作り出す

ミラーリングなので、どちらかが故障した時にどう対処できるか試してみました。そこで、電源が入ったまま片方のHDDを引き抜いてみました。

抜いた方のディスクが「見つからない/破損」の表示になりました。diskutil appleRAID listでは、Missing/Damagedと表示されます。

壊れたHDDをRAIDから除外する

壊れた(抜いたのですが)HDDをRAIDから切り離してみます。これには、対象のドライブを選択して、マイナスボタンを押します。

ターミナルからは、

diskutil appleRAID remove XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX disk7

というコマンドを打ちます。HDDを指定するにはいろいろな方法が提供されています。
diskutil appleRAID removeとだけタイプすると説明が出ます。ここでは、listコマンドで出てきたUUIDを使って指定してみました(XXXXの部分が壊れたHDDに相当するUUDIです。またdisk7はRAIDのマウント位置です)。

こんな感じでRAID 1の片方が解除されました。

交換のHDDを取り付ける

次に別のHDDを差し込んで、これをRAIDに追加しました。上の画面の「+」ボタンを押して、「メンバーを追加…」を選び、HDDを選択します。

もしくは、ターミナルから、

diskutil ar add member disk2 /Volumes/RaidOne

をタイプします。これは交換のHDDが/dev/disk2としてマウントされた場合の例です。この後、rebuild(再構成)が開始されて、1時間後くらいに2台のミラーリングとして復帰しました。再構成の進捗はdiskutil appleRAID listコマンドで確認できます。

ミラーリングの利点

ミラーリングによりHDDの一台が故障してもデータを失わないで済みます。ということで、バックアップできることはメリットなのですが、バックアップだけが目的ならTimemachineでも良いです。むしろ過去に状況に戻ることで、操作ミスによるデータ損出まで復帰できるので、Timemachineの方が優れています。

ミラーリングのメリットは、バックアップ機能そのものよりも、システムを停止しないでバックアップからの復帰ができることだと思います。HDDをいきなり引っこ抜いて故障状況を作り出して、新しいHDDと交換する作業を上記に示しましたが、この復旧作業中にもかかわらず、RAIDディスクにはずっとアクセス可能でした。rebuildには時間がかかりますが、その間もアクセス可能です。

ということで、ミラーリングとTimemachineを組み合わせたら、最強のバックアップになると思います。HDDをたくさん組み込めるマシンを作ったら、HackintoshでしかできないmacOSのRAID機能を活用してはどうでしょう。

モバイルバージョンを終了