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を作ってみます。
Table of Contents
ディスクユーティリティで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機能を活用してはどうでしょう。
SSD搭載がデフォになった現在、TimeMacineと被るRAID1よりもストライピング構成にして速度を上げる方が効果的かもしれませんです。Hacintoshの場合BIOSからRAIDを組めますが、こちらはOSが対応(Windowsですとドライバあり)していないと認識すらされませんのでmacOSから構成するしかないという感じ。
確かに、BIOSのRAID設定はOS (Windows) と連携することを前提の機能のようなので、macOSでは使えないですね。マザーボードだけで動いてくれれば良いと思うのですが。
TimeMachineは履歴を遡れること、RAID 1はシステムダウンなく復旧できることがメリットだと思うので、目的は多少違うかと思います。クリティカルな仕事に使っている人(hackintoshではあまりいないかなw)はRAID 1が必要かもしれないです。高速なM.2をストライピングしてさらなる高速化を目指すのは、面白そうですね。