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
つぎに現在の
d→
1と入力して現在のパーティションを削除。
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