2014年4月24日木曜日

SDカードのUbuntuルートファイルシステムパーティションを拡張

Linuxは比較的非力な環境に入れることが多いためか、Ubuntuをしばらく使っているとパッケージのインストールやカーネル、ソースコードのダウンロードが積もり積もってディスク容量が手狭になってしまうことがよくあります。PCではWindowsと別パーティションのデュアルブートで使うこともあると思いますが、一応はHDDの増設で対応できます。VM環境でもHDD上のイメージサイズを拡張してGparted等でパーティションを動かせば割りと楽に容量確保できたりします。

これがSDカードブートのARMシングルボードコンピュータなんかだと、ちょっと厄介かも知れません。昔のBeagleBoardだと、よくfdiskを使って手作業でSDカードのパーティションを切り、ブートローダとルートファイルシステムを入れるなんてことをしました。面倒ですがパーティションサイズを任意に設定できるので、大きいSDカードを使えばそれに合わせて広いルートファイルシステムのパーティションを確保できます。これが最近のRaspberry Piになると、SDカードイメージが丸ごと配布されているので、いちいちfdiskをする必要がなくてかなり楽なんですが、SDカードサイズにかかわらずイメージとして決め打ちされたパーティションサイズになってしまいます。Raspbianはインストール時のコンフィギュレーションでパーティション拡張ができますが、他のOSやボード向けのイメージで同様の機能がサポートされることはほとんどないと思います。

そこで、既にSDカードに書き込まれたパーティションを手作業で拡張することになるわけです。今回、UDOO向けUbuntuのルートファイルシステムパーティションを拡張したので、作業手順をメモっておきます。

SDカードは16GB、UDOO公式で配布のQuad向けUbuntu 12.04 LTSを焼いてあります。最初にdfしてみると、ルートファイルシステムは6GB程度のパーティションになっていました。
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       6.4G  2.4G  3.7G  40% /
devtmpfs        438M  4.0K  438M   1% /dev
none             88M  2.6M   85M   3% /run
none            5.0M     0  5.0M   0% /run/lock
none            438M  100K  438M   1% /run/shm
では、fdiskで作業開始。
$ sudo fdisk /dev/mmcblk0
まずpで現在の構成を確認。Startセクタはあとで入力しなおす必要があるので、 飛ばさないように。
Command (m for help): p

Disk /dev/mmcblk0: 15.7 GB, 15720251392 bytes
255 heads, 63 sectors/track, 1911 cylinders, total 30703616 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c356e

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1           16065    13623119     6803527+  83  Linux
つぎに現在のd1と入力して現在のパーティションを削除。
Command (m for help): d
Selected partition 1
続いてnで新たにパーティションを作成。パーティションタイプはpでプライマリを選択します。パーティションナンバーはデフォルトのまま。ファーストセクタで先ほど表示させたStartの数字を入力します。ラストセクタは最大まで確保します。
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-30703615, default 2048): 16065
Last sector, +sectors or +size{K,M,G} (16065-30703615, default 30703615):
Using default value 30703615
新たなパーティションはこんな感じ。
Command (m for help): p

Disk /dev/mmcblk0: 15.7 GB, 15720251392 bytes
255 heads, 63 sectors/track, 1911 cylinders, total 30703616 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c356e

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1           16065    30703615    15343775+  83  Linux
では、wで書き込みます。
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
ここで再起動。
$ sudo reboot
最後に、既存のファイルシステムを拡張されたパーティションいっぱいまで広げるため、resize2fsコマンドを実行します。
$ sudo resize2fs /dev/mmcblk0p1
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/mmcblk0p1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mmcblk0p1 to 3835943 (4k) blocks.
The filesystem on /dev/mmcblk0p1 is now 3835943 blocks long.
dfで確認してみます。15GBまで拡大されました。
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.4G   12G  18% /
devtmpfs        438M  4.0K  438M   1% /dev
none             88M  2.6M   85M   3% /run
none            5.0M     0  5.0M   0% /run/lock
none            438M  100K  438M   1% /run/shm
まぁ手順としちゃHDDの場合と変わりませんやね。

参考
How can I resize my / (root) partition? - Stack Exchange

0 件のコメント:

コメントを投稿