はじめに
MacにWindowsとUbuntuを入れてトリプルブートにしていたのだが、
そこまで快適ではなかったのでWindowsとUbuntuを削除したところ、
色々いじっているうちに(free space)と表示されて困ってしまった。
対処法を見つけたので共有したい。(パーティションの位置によっては解決法とは言えないかもしれない。たとえばdisk0s2、disk0s3があったとして、disk0s2の後に空のパーティションを設定しようとすると失敗する。私は一度disk0s3を削除してから結合する方法しか知らない。また、APFSの場合はコマンドや流れが少し異なるので注意)
注意事項
$ diskutil mergePartitions
でパーティションを結合した際に、ファイルが消えてしまうので、バックアップしてから操作することを推奨する。
余談だが、私の場合は大したファイルを入れていなかったので助かった。
最初の状態と概要
(私のターミナルは背景が緑、色が赤で表示するように設定しているためこの表記だ)
概要を説明すると、まずdiskutilのaddPartitionでTYPEを((free space)となっている)を別のTYPEにし、さらにそれをmergePartitionsで結合する流れとなる。
細かい文法などは、
$ diskutil
で詳細を調べてほしい。
原因
(free space)となる原因は、
$ diskutil eraseVolume free free (IDENTIFIERのdisk識別子)
で特定のパーティションをeraseVolumeしたことによる。
eraseVolumeしたのは、ディスクユーティリティでそのパーティションをうまく消して、結合できなかったからだ。
余談だが、ファイルシステム(FS)がAPFSの場合は、
$ diskutil apfs deleteContainer (IDENTIFIERのdisk識別子)
とすると、(free space)となる。
まずdiskutil addPartitionでパーティションを追加した。
$ diskutil addPartition (IDENTIFIERのdisk識別子) %(FILE SYSTEM)% %noformat% size
とすると、ディスクユーティリティで認識されるようになる。
(FILE SYSTEM)のところは、各自で適切なものを調べてほしい(実験したところ、MacならApple_APFSとなる。半角スペースがあるFSならば、""が必要なことに注意)。
diskutil margePartitionsでパーティションを結合した。
まずは
$ diskutil list
でパーティションを確認する。
今回は、disk0s5にdisk0s4を追加したかったのでこの順番となる。ExFATはファイルシステム、ASSETSはパーティションの名前となる。
そして、
$ diskutil mergePartitions (ファイルシステム) (パーティションの名前) (パーティション1) (パーティション2)
パーティション1にパーティション2を結合するにはこの順番であるようだ。
繰り返しになるが、この操作の際にパーティションのファイルが消えてしまうので注意してほしい。
終わりに
この機会にAPFSの場合なども実験してみたが、パーティション操作はリスクが伴うため、バックアップなどして慎重に操作することをお勧めする。