OS Xで Bootcamp が不要になったので手動で削除してパーティションをマージする方法
Mac OSX に Bootcamp で ubuntu を入れてデュアルブート環境を整えましたが、ここ半年で ubuntu を起動した記憶がない。ディスク容量の無駄でもあるのでそろそろ消しても良いかなってことで、Bootcamp 領域をまるっと削除することにしました。
OSX には便利な Bootcamp アシスタントがあって、そこから Windows パーティション領域を削除すれば、Bootcamp 前のパーティションの状態に戻るはずなのですが、ゴニョゴニョと設定してインストールしたので、Linux Swap 領域やらがあるのが原因のためか、まぁ普通に削除できませんでした。
仕方がないので、Bootcamp のパーティションを手動で削除するためにディスクユーティリティを起動。ubuntu 本体がインストールしてあるパーティションは Mac OS 拡張(ジャーナリング)でフォーマットしてパーティションを削除することが出来ましたが、理由が不明なのですがどうにも Linux swap 領域のパーティションを削除することができません。
そんな時には diskutil というコマンドを使うことで手動でパーティションを結合することができます。
diskutil コマンドを使って OSX のパーティションをマージ結合する方法
おそらくは GUI のディスクユーティリティの裏側で動いているコマンドも diskutil だと想像するのですが、ディスクユーティリティ相当のディスク操作を手動で実行することが可能です。とりあえずターミナルを開いて、diskutil と入力してみると使い方がわかります。
bash-3.2# diskutil Disk Utility Tool Utility to manage local disks and volumes Most options require root access to the device Usage: diskutil [quiet], where is as follows: list (List the partitions of a disk) info[rmation] (Get information on a specific disk or partition) listFilesystems (List file systems available for formatting) activity (Continuous log of system-wide disk arbitration) u[n]mount (Unmount a single volume) unmountDisk (Unmount an entire disk (all volumes)) eject (Eject a disk) mount (Mount a single volume) mountDisk (Mount an entire disk (all mountable volumes)) enableJournal (Enable HFS+ journaling on a mounted HFS+ volume) disableJournal (Disable HFS+ journaling on a mounted HFS+ volume) moveJournal (Move the HFS+ journal onto another volume) enableOwnership (Treat as exact User/Group IDs for a mounted volume) disableOwnership (Ignore on-disk User/Group IDs for a mounted volume) rename[Volume] (Rename a volume) verifyVolume (Verify the file system data structures of a volume) repairVolume (Repair the file system data structures of a volume) verifyDisk (Verify the components of a partition map of a disk) repairDisk (Repair the components of a partition map of a disk) verifyPermissions (Verify the permissions of a Mac OS X volume) repairPermissions (Repair the permissions of a Mac OS X volume) eraseDisk (Erase an existing disk, removing all volumes) eraseVolume (Erase an existing volume) reformat (Erase an existing volume with same name and type) eraseOptical (Erase optical media (CD/RW, DVD/RW, etc.)) zeroDisk (Erase a disk, writing zeros to the media) randomDisk (Erase a disk, writing random data to the media) secureErase (Securely erase a disk or freespace on a volume) partitionDisk ((re)Partition a disk, removing all volumes) resizeVolume (Resize a volume, increasing or decreasing its size) splitPartition (Split an existing partition into two or more) mergePartitions (Combine two or more existing partitions into one) appleRAID (Perform additional verbs related to AppleRAID) coreStorage (Perform additional verbs related to CoreStorage) diskutil with no options will provide help on that verb
1. まずは現状のディスクのパーティション状況を調査します。
ターミナルから diskutl list と入力をします。USB メモリや SD カードなどが刺さっていると、その情報も取得されてしまって目障りなので抜いておいたほうが良いです。
あれこれ試行錯誤した残骸が残っていて、OSX 本体の disk0s2 とリカバリ領域の disk0s3 の他に、 disk0s4, disk0s5, disk0s6 という状態ができあがっちゃってます。
bash-3.2# diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 370.6 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 4: Apple_HFS Recovery HD 650.0 MB disk0s4 5: Apple_HFS Recovery HD 2 123.7 GB disk0s5 6: Linux Swap 4.2 GB disk0s6 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: Apple_partition_scheme *16.0 MB disk1 1: Apple_partition_map 32.3 KB disk1s1 2: Apple_HFS Flash Player 16.0 MB disk1s2 /dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: Apple_partition_scheme *16.0 MB disk2 1: Apple_partition_map 32.3 KB disk2s1 2: Apple_HFS Flash Player 16.0 MB disk2s2
2. mergePartitions でパーティションの結合を手動で行う(ちょっと失敗した)
diskutil mergePartitions JHFS+ new 内容を残したいパーティション 消したいパーティション
と入力することでパーティションを結合することができます。new の部分は名前を指定するのですがマニュアルを読んでも正直よくわかりません。JHFS+ の部分はフォーマットの種類によって変更します。今回は Mac OS拡張ジャーナルなので Journaled HFS+ を意味する JHFS+ を入力します。パーティションの指定は逆にすると残したいデータが消えるので注意が必要です。
Apple 開発者サイトのマニュアルによると使用方法は下記のとおりです。
mergePartitions [force] format name fromDevice toDevice Merge two or more partitions on a disk. All data on merged partitions other than the first will be lost. Data on the first partition will be lost as well if the force argument is given. If force is not given, and the first partition has a resizable file system (e.g. JHFS+), the file system will be preserved and grown in a data-preserving manner; your format and name parameters are ignored in this case. If force is not given, and the first partition is not resizable, you are prompted if you want to format. You will also be prompted to format if the first partition has an (HFS) Allocation Block Size which is too small to support the required growth of the first partition; see the -b option for newfs_hfs (8). If force is given, the final resulting partition is always (re)formatted. You should do this if you wish to (re)format to a new file system type. You will be prompted to confirm. Format and name must always be given, but they have an effect only when force is given. Merged partitions are required to be ordered sequentially on disk (see diskutil list for the actual on-disk ordering). All partitions in the range, except for the first one, must be unmountable. Ownership of the affected disk is required.
まず disk0s5 と disk0s6 を結合してみます。Linux swap を Mac OS 拡張ジャーナルでフォーマットしていない時には結合エラーが発生します。
bash-3.2# diskutil mergePartitions JHFS+ new disk0s5 disk0s6 The chosen disk does not support resizing. Do you wish to format instead? (y/N) y Merging partitions into a new partition Start partition: disk0s5 Recovery HD 2 Finish partition: disk0s6 Merging partitions encountered error "Couldn't read partition map (-69876)". The erase will not occur.
ディスクユーティリティから Linux swap 領域を Mac OS 拡張ジャーナルでフォーマットします。
次に再度 diskutil mergePartitions を実行します。今度は無事にパーティションが結合されました。
bash-3.2# diskutil mergePartitions JHFS+ new disk0s5 disk0s6 Merging partitions into a new partition Start partition: disk0s5 Recovery HD 2 Finish partition: disk0s6 06 diskutil mergePartitions JHFS+ new disk0s5 disk0s6 Started partitioning on disk0 Merging partitions Waiting for the disks to reappear Growing disk Finished partitioning on disk0 /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 370.6 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 4: Apple_HFS Recovery HD 650.0 MB disk0s4 5: Apple_HFS Recovery HD 2 127.9 GB disk0s5
続いて ubuntu 本体が入っていた disk0s5 と誤って作成した disk0s4 も結合します。こちらも無事に成功です。
bash-3.2# diskutil mergePartitions JHFS+ new disk0s4 disk0s5 Merging partitions into a new partition Start partition: disk0s4 Recovery HD Finish partition: disk0s5 Recovery HD 2 Started partitioning on disk0 Merging partitions Waiting for the disks to reappear Growing disk Finished partitioning on disk0 /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 370.6 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 4: Apple_HFS Recovery HD 128.5 GB disk0s4
disk0s3 には Moutain Lion のリカバリ領域になっているので残したいと考え、OSX 本体の disk0s2 に対して不要となったパーティション disk0s4 を結合しようと考えました。
コマンド的には間違っていないと思ってたのですが、パーティション disk0s3 も消えちゃいました。そんな仕様はマニュアルからは読み取れませんでしたが、パーティションの概念的には順当なところでしょうか。最初から Parted Magic を使ってパーティションを操作すればよかったと軽く後悔。
bash-3.2# diskutil mergePartitions JHFS+ new disk0s2 disk0s4 Merging partitions into a new partition Start partition: disk0s2 Macintosh HD Finish partition: disk0s4 Recovery HD Started partitioning on disk0 Merging partitions Waiting for the disks to reappear Growing disk Finished partitioning on disk0 /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 499.8 GB disk0s2
3. パーティションを作成してYosemiteのインストールメディアを作成する
まぁ消えちゃったものは仕方がない。リカバリー領域がなくてもインターネットに接続できる環境さえあれば再インストールが可能です。でもネットに接続できていない状態からはリカバリーできないので、10GB 程度のパーティションを作成して、Yosemite のインストールディスクをぶち込んでおくことにしました。10GB でパーティションを切ったはずなのに、何故か 13.87 GB 担ってしまいましたが、まぁよしとします。
10GB のパーティションにした理由は、Yosemite のインストールディスクが 5.17GB だったため。最初 5GB 程度でパーティションを作成したらインストールメディアの作成に失敗しました。
インストールメディアを作成するには、まずは、Mac App Store で Yosemite インストーラをダウンロードします。
https://itunes.apple.com/jp/app/os-x-yosemite/id915041082?mt=12
インストーラーが自動的に起動しますが、Command + Q で終了させます。
終了させた後、ターミナルから下記のコマンドを入力して実行します。パーティション名は自分の環境に合わせます。
sudo "/Applications/Install OS X Yosemite.app/Contents/Resources/createinstallmedia" --volume "/Volumes/パーティション名" --applicationpath "/Applications/Install OS X Yosemite.app" --nointeraction
念の為に、/Volumes/ 配下を確認しておきます。
bash-3.2# ls -la /Volumes/ total 8 drwxrwxrwt@ 5 root admin 170 Dec 12 15:17 . drwxr-xr-x 40 root wheel 1428 Oct 31 12:13 .. lrwxr-xr-x 1 root admin 1 Dec 12 15:13 Macintosh HD -> / drwxrwxr-t 3 nttrtech staff 170 Aug 5 2011 Recovery Disk Assistant drwxrwxr-x 10 nttrtech staff 408 Dec 12 15:19 Recovery HD
今回の対象は「Recovery HD」であることを確認。コマンドを実行します。
bash-3.2# "/Applications/Install OS X Yosemite.app/Contents/Resources/createinstallmedia" --volume "/Volumes/Recovery HD" --applicationpath "/Applications/Install OS X Yosemite.app" --nointeraction Erasing Disk: 0%... 10%... 20%... 30%...100%... Copying installer files to disk... Copy complete. Making disk bootable... Copying boot files... Copy complete. Done.
十数分待ってインストールメディアとして構築が完了しました。成功すると自動的にパーティション名が「 Install OS X Yosemite」に変更されます。これでネットに繋がっていない環境でも、このパーティションから起動することで再インストールができるようになりました。
なんだか時間を無駄に使ってしまった感が強いですが、diskutilを用いて手動でパーティションを結合する方法を解説し、ついでに作業ミスで消えてしまったリカバリー領域の代替としてcreateinstallmediaを用いてインストールメディアの作成について解説しました。
おしまい。
コメントやシェアをお願いします!