OS Xで Bootcamp が不要になったので手動で削除してパーティションをマージする方法

Mac OSX に Bootcamp で ubuntu を入れてデュアルブート環境を整えましたが、ここ半年で ubuntu を起動した記憶がない。ディスク容量の無駄でもあるのでそろそろ消しても良いかなってことで、Bootcamp 領域をまるっと削除することにしました。

OSX には便利な Bootcamp アシスタントがあって、そこから Windows パーティション領域を削除すれば、Bootcamp 前のパーティションの状態に戻るはずなのですが、ゴニョゴニョと設定してインストールしたので、Linux Swap 領域やらがあるのが原因のためか、まぁ普通に削除できませんでした。

仕方がないので、Bootcamp のパーティションを手動で削除するためにディスクユーティリティを起動。ubuntu 本体がインストールしてあるパーティションは Mac OS 拡張(ジャーナリング)でフォーマットしてパーティションを削除することが出来ましたが、理由が不明なのですがどうにも Linux swap 領域のパーティションを削除することができません。

img001.png

そんな時には 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 拡張ジャーナルでフォーマットします。

img003.png

次に再度 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 担ってしまいましたが、まぁよしとします。

img009.png

10GB のパーティションにした理由は、Yosemite のインストールディスクが 5.17GB だったため。最初 5GB 程度でパーティションを作成したらインストールメディアの作成に失敗しました。

img008.png

インストールメディアを作成するには、まずは、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」に変更されます。これでネットに繋がっていない環境でも、このパーティションから起動することで再インストールができるようになりました。

img010.png

なんだか時間を無駄に使ってしまった感が強いですが、diskutilを用いて手動でパーティションを結合する方法を解説し、ついでに作業ミスで消えてしまったリカバリー領域の代替としてcreateinstallmediaを用いてインストールメディアの作成について解説しました。
おしまい。

- スポンサーリンク -