(2015-03-08)
2号機の起動用SDカードは当初4GBで構築していましたが、なんやかんやとインストールやら実験やらをしているうちに、容量が不足しがちになってきました。
そこで、現在の2倍の8GBのSDカードへの移行をしてみることにしました。
としては、SDカードを丸ごと読み出して、新しいSDカードへ丸ごと書き込んでしまえ、ということになります。
新旧のSDカードで容量が異なるため、増えた分の容量をコピー後のシステムで認識させることができるかどうかが肝ですが、幸いにして raspi-config コマンドでそれができそうな雰囲気だったので、実験もかねてやってみることにします。
まずは2号機を停止します。
$ su # poweroff
2号機が停止したら、SDカードを取り出し、念のためライトプロテクトノッチをLock側にしておきます。
ここからしばらくは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号機での作業はこれで終了です。 ファイルシステムのマウントなどは行っていないので、そのまま引っこ抜いても大丈夫です(たぶん)。
ここでおもむろに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
とすると、下記の画面が表示されます。
ここで、上の画面の「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すると、さらにリブートしてもよいかどうか確認する画面が表示されますので、リブートします。
(リブートしないと有効にならないはずですので、ご注意ください。)
再起動したら、再度下記のコマンドを実行して、ルートファイルシステムの容量を確認してみて、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では、こう簡単にはいかず、何らかのフリーソフト等を使わざるを得ないと思います。