4GB SD → 16GB SDへのコピー(拡張)
Raspbianを4GBのSDカードにインストールして使っていましたが、残り50MBという瀕死の状態になってしまいましたので、新しく16GB SDを購入し、構築した環境をそのまま16GBのSDカードへ移行しました。
その時のメモです。
■拡張前
$df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 2.8G 2.6G 50M 99% /
/dev/root 2.8G 2.6G 50M 99% /
devtmpfs 215M 0 215M 0% /dev
tmpfs 44M 288K 44M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 88M 0 88M 0% /run/shm
/dev/mmcblk0p5 60M 9.6M 50M 17% /boot
/dev/mmcblk0p3 27M 397K 25M 2% /media/SETTINGS
残り50MB。悲惨。
■raspi-config は使えないのか?
当初は4GB SDの中身をパーティションごと16GB SDにコピーして
$ sudo raspi-config
のExpand Filesystemで終了!という予定でしたが、実際にやってみると
Your partition layout is not currently supported by this tool. You are probably using NOOBS, in which case your root filesystem is already expanded anyway.
などと怒られてしまい、実行できませんでした。なのでraspi-configは使えません。
(どうやらSDの特定のパーティションにrootがマウントされている時だけ使える模様)
■対策
自動が無理なら手動しかありません。fdiskを駆使してパーティションを切る方法もあるようですが、NOOBSでインストールすると拡張パーティションの中に3つほど論理パーティションを作成するらしく、大変面倒なので、GUIパーティション管理ソフトのGPartedを使ってリサイズすることにしました。
流れ
1. 4GB SDをパーティションごと16GB SDにコピー
2. 4GB SDのraspbianで起動して、GPartedで16GB SDのパーティションをリサイズ
3. 16GB SDに差し替えて起動→16GB化!ヤッター
■手順1. SDカードイメージのコピー
Linuxでやるならddコマンドを使うようですが、よくわからないのでWindowsソフトの Win32DiskImagerを使いました。
1. Winマシンに4GB SDを接続
2. 保存するイメージと同じファイル名で空のファイルを作成する
(ファイルが存在しないとWin32DiskImagerがエラーになる模様。どんだけ。)
3. Win32DiskImagerを起動し、step.2で作ったファイルを指定し、"Read"
4. 4GB SDを外して、16GB SDを接続
5. Win32DiskImagerの"Write"でイメージファイルの書き込み
これで16GB SDに4GB SDの内容がパーティションごとコピーされます。
■手順2. 16GB SD のパーティション変更
次に16GB SDのパーティションをリサイズします。
4GB SDが既にRasPiのSDスロットに接続されているので、16GB SDはUSBカードリーダを使ってRasPiにつなげましょう。
●GPartedのインストール
1. 4GB SDのRaspbianで起動する
2. $ sudo apt-get install gparted
でGPartedをインストール
※途中でphpmyadminがファイル書き込みのパスワードを聞いて来る?のですがrootのパスワードも入れても
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
とエラーが出てしまうので、後で出てくる確認画面で「無視」をしました。
3. $sudo gparted
GPartedが起動します。
●GPartedを使ってパーティションを変更
作業を始める前にパーティションの切られ方を確認しましょう。
- 4GB SDを16GB SDにコピーしたので、不足分はすべて未割り当て領域となっています。
- 水色で囲まれた部分が拡張パーティションです。その中にFAT32のパーティション・ext4のパーティションがあることがわかります。
- /dev/sdc6がルートなので、これをリサイズします。
→その前に拡張パーティションの方をリサイズする必要あり。
- 未割り当て領域と拡張パーティションの間にちっちゃいext4のパーティションがありますが、こいつは削除しない方が良さげ。
→未割り当て領域の一番後ろに移動します。
- 他はいじる必要はなさそう。
1. リサイズするパーティションがマウントされている場合はすべてアンマウントする。
・メニューの「パーティション」→「アンマウント」で可能。
・上図の場合/media/BOOT, /media/root, /media/SETTINGS_をアンマウントする。
2. /dev/sdc3を選択し「パーティション」→「リサイズ/移動」を選択。
下図のように一番右に移動する。「リサイズ/移動」で完了。
※操作を予約するだけで実際の変更は行われません。
3. 拡張パーティション /dev/sdc2 を選択して「パーティション」→「リサイズ/移動」を選択。
4. 今度はサイズを広げたいので、右側の矢印をドラッグして一番右まで広げる。
「後方の空き領域」が0になる。出来たら「リサイズ/移動」で完了。
5. 次に/dev/sdc6を選択して、上記同様に空き容量いっぱいまでリサイズする。
6. ここまででパーティションは下図のようになっていると思います。
7. ツールバーの右矢印アイコン(「保留中の全ての操作を適用する」)をクリックすると、実際にパーティションの変更が開始されます。
これで完了です。あとは16GB SDに差し替えて$df -hしてみましょう。
$ df- h
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 14G 2.6G 11G 21% /
/dev/root 14G 2.6G 11G 21% /
devtmpfs 215M 0 215M 0% /dev
tmpfs 44M 288K 44M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 88M 0 88M 0% /run/shm
/dev/mmcblk0p5 60M 9.6M 50M 17% /boot
/dev/mmcblk0p3 27M 397K 25M 2% /media/SETTINGS
これであと半年は戦える。
参考:
Raspberry Pi • View topic - partitions problem
ここのrasprussさんの回答を参考にしました。というかまんまです。