(2015-03-08)
2号機の起動用SDカードは当初4GBで構築していましたが、なんやかんやとインストールやら実験やらをしているうちに、容量が不足しがちになってきました。

そこで、現在の2倍の8GBのSDカードへの移行をしてみることにしました。

目論見

としては、SDカードを丸ごと読み出して、新しいSDカードへ丸ごと書き込んでしまえ、ということになります。
新旧のSDカードで容量が異なるため、増えた分の容量をコピー後のシステムで認識させることができるかどうかが肝ですが、幸いにして raspi-config コマンドでそれができそうな雰囲気だったので、実験もかねてやってみることにします。

使用した機材。

  • Raspberry Pi 1号機。メインの作業に使います。
    40GBのHDDをUSBハブ経由で接続。
    さらにUSBハブにはSDカードリーダー・ライターを接続しておきます。
    (管理人の経験上、Raspberry Pi本体のUSBポートへ直接つなぐとその瞬間にOSが再起動してしまうため、こういった実験のときは常にUSBハブ経由です→メモ
    また、SDカードの自動マウント等うっとおしいので、Xウィンドウは落としておきます(スーパーユーザーで init 2 でよかったかと)。
  • Windows PC。
    ターミナルソフト用。sshにて1,2号機へ接続して作業します。ディスプレイとキーボードを Raspberry Pi 本体に接続している方はこれは不要です。

作業内容

2号機での作業その1

まずは2号機を停止します。

$ su
# poweroff

2号機が停止したら、SDカードを取り出し、念のためライトプロテクトノッチをLock側にしておきます。

1号機での作業

ここからしばらくは1号機での作業になります。

1号機のSDカードリーダーのデバイス名を確認します。このあたりはsyslogを見つつ「勘」で行くしかないです。
管理人の持っているSDカードリーダーは、マルチカードリーダー、要するにいろんな種類のカードを読み書きできるものだったので、以下のようにデバイスが4つほどできてしまいますが、表示されるメッセージが何気に親切なので、SDカードのデバイス名は sdf だということがわかります。

# tail /var/log/syslog
Mar  7 16:13:30 rasp00 kernel: [260997.720244] usb 1-1.3.1: new high-speed USB device number 9 using dwc_otg
Mar  7 16:13:30 rasp00 kernel: [260997.821524] usb 1-1.3.1: New USB device found, idVendor=0cf2, idProduct=6230
Mar  7 16:13:30 rasp00 kernel: [260997.821562] usb 1-1.3.1: New USB device strings: Mfr=1, Product=2,
 SerialNumber=4
Mar  7 16:13:30 rasp00 kernel: [260997.821580] usb 1-1.3.1: Product: UB623X
Mar  7 16:13:30 rasp00 kernel: [260997.821595] usb 1-1.3.1: Manufacturer: ENE Flash
Mar  7 16:13:30 rasp00 kernel: [260997.821610] usb 1-1.3.1: SerialNumber: 606569746801
Mar  7 16:13:30 rasp00 kernel: [260997.826212] usb-storage 1-1.3.1:1.0: USB Mass Storage device detected
Mar  7 16:13:30 rasp00 kernel: [260997.827278] scsi host4: usb-storage 1-1.3.1:1.0
Mar  7 16:13:31 rasp00 kernel: [260998.821162] scsi 4:0:0:0: Direct-Access     USB2.0   CardReader CF    
 0100 PQ: 0 ANSI: 0
Mar  7 16:13:31 rasp00 kernel: [260998.824857] sd 4:0:0:0: [sdc] Attached SCSI removable disk
Mar  7 16:13:31 rasp00 kernel: [260998.825462] sd 4:0:0:0: Attached scsi generic sg2 type 0
Mar  7 16:13:31 rasp00 kernel: [260998.828504] scsi 4:0:0:1: Direct-Access     USB2.0   CardReader SM XD
 0100 PQ: 0 ANSI: 0
Mar  7 16:13:31 rasp00 kernel: [260998.833365] sd 4:0:0:1: [sdd] Attached SCSI removable disk
Mar  7 16:13:31 rasp00 kernel: [260998.835961] sd 4:0:0:1: Attached scsi generic sg3 type 0
Mar  7 16:13:31 rasp00 kernel: [260998.837261] scsi 4:0:0:2: Direct-Access     USB2.0   CardReader MS
 0100 PQ: 0 ANSI: 0
Mar  7 16:13:31 rasp00 kernel: [260998.841891] sd 4:0:0:2: [sde] Attached SCSI removable disk
Mar  7 16:13:31 rasp00 kernel: [260998.844907] sd 4:0:0:2: Attached scsi generic sg4 type 0
Mar  7 16:13:31 rasp00 kernel: [260998.846167] scsi 4:0:0:3: Direct-Access     USB2.0   CardReader SD
 0100 PQ: 0 ANSI: 0
Mar  7 16:13:31 rasp00 kernel: [260998.849643] sd 4:0:0:3: [sdf] Attached SCSI removable disk
Mar  7 16:13:31 rasp00 kernel: [260998.853186] sd 4:0:0:3: Attached scsi generic sg5 type 0

(補足:上記の出力結果は一部手動で改行を入れております)

デバイス名がわかったところで、2号機から取り出した4GBのSDカードをセットして、下記のコマンドでデータを一気にHDDへ吸い出します。
/var/exhdd/work/は、HDD上のディレクトリです。

# dd if=/dev/sdf of=sdf-data.dat bs=1024
3887104+0 レコード入力
3887104+0 レコード出力
3980394496 バイト (4.0 GB) コピーされました、 481.672 秒、 8.3 MB/秒

コピーにはおよそ8分ほどかかっています。

コピーが終わったら、次に、新しい8GBのSDカードをリーダーにセットして、下記のコマンドでデータを一気にSDカードへ書き込みます。
なお、くれぐれも、of=のデバイス名を間違えないように!!間違えて今起動しているOSのシステム領域なんかに書き込んだ日には目も当てられませんので。

# dd if=sdf-data.dat of=/dev/sdf bs=1024
3887104+0 レコード入力
3887104+0 レコード出力
3980394496 バイト (4.0 GB) コピーされました、 1734.97 秒、 2.3 MB/秒

コピーにはおよそ28分ほどかかっています。

コピーが終わったら、SDカードを取り出して、1号機での作業はこれで終了です。 ファイルシステムのマウントなどは行っていないので、そのまま引っこ抜いても大丈夫です(たぶん)。

2号機での作業その2

ここでおもむろに8GBのSDカードを2号機へセットして電源を入れてみます・・・
普通に起動します(してもらわないと困る:-)。

ただし、下記のコマンドを実行してみると、ルートファイルシステムの容量はまだ以前のままです(サイズが3.6Gと出ています)。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
rootfs           3.6G  2.3G  1.2G   67% /
/dev/root        3.6G  2.3G  1.2G   67% /
devtmpfs         214M     0  214M    0% /dev
tmpfs             44M  212K   44M    1% /run
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs             88M     0   88M    0% /run/shm
/dev/mmcblk0p1    56M   15M   42M   26% /boot

ではこれを8GBに増やしてみます。

$ su
# unset LANG
# raspi-config 

とすると、下記の画面が表示されます。

raspi-config-menu.png

ここで、上の画面の「1 Expand Filesystem」を選んでEnterキーを押すと、下記のような出力メッセージとともにファイルシステムの拡張が行われます(実はこの処理は、Raspberry Piを買ってきてすぐのSDカードにOSをインストールしたときに大抵の人は実行しているはずです)。

Command (m for help):
Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes
4 heads, 16 sectors/track, 243200 cylinders, total 15564800 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: 0x00090806

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     7774207     3825664   83  Linux

Command (m for help): Partition number (1-4):
Command (m for help): Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Partition number (1-4, default 2):
First sector (2048-15564799, default 2048):
Last sector, +sectors or +size{K,M,G} (122880-15564799, default 15564799):
Using default value 15564799

Command (m for help):
Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes
4 heads, 16 sectors/track, 243200 cylinders, total 15564800 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: 0x00090806

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    15564799     7720960   83  Linux

Command (m for help): 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.
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: default start runlevel arguments (2 3 4 5)
 do not match resize2fs_once Default-Start values (2 3 4 5 S)
update-rc.d: warning: default stop runlevel arguments (0 1 6)
 do not match resize2fs_once Default-Stop values (none)

(備考:上のメッセージを見て今気づいたのですが、fdiskコマンドを自動運転して容量拡張しているのですね。)

メッセージがずらずらと出力され、正常に処理が行われると、下記の画面に切り替わると思います。OKすると、さらにリブートしてもよいかどうか確認する画面が表示されますので、リブートします。
(リブートしないと有効にならないはずですので、ご注意ください。)

raspi-config-resized.png
raspi-config-reboot.png

再起動したら、再度下記のコマンドを実行して、ルートファイルシステムの容量を確認してみて、SDカードの最大値(実際には管理領域等で使用されるため若干少ない値)まで増えていたら、無事作業終了です。
ここでは、サイズが7.2GBまで増えたことが確認できます。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
rootfs           7.2G  2.3G  4.7G   33% /
/dev/root        7.2G  2.3G  4.7G   33% /
devtmpfs         214M     0  214M    0% /dev
tmpfs             44M  212K   44M    1% /run
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs             88M     0   88M    0% /run/shm
/dev/mmcblk0p1    56M   15M   42M   26% /boot

応用例

前述のようにSDカードの内容を丸ごと読み出し、そのままバックアップとして利用することが可能です。
すでにご存知の方も多数おられるかとは思いますが、Linux(Raspberry Piに限らず)で SDカードの読み書きができる環境を持っていれば「やりたい放題」です。
Windowsでは、こう簡単にはいかず、何らかのフリーソフト等を使わざるを得ないと思います。


添付ファイル: fileraspi-config-resized.png 52件 [詳細] fileraspi-config-menu.png 52件 [詳細] fileraspi-config-reboot.png 55件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-02 (月) 15:44:26 (233d)