rootfsのバックアップとリストア

CAT709, CAT760, CAT760A, CAT760B において rootfsの中身をバックアップ/リストア/再構築する手順について説明します。

本事例では CAT760 として説明しますが、 CAT709, CAT760A, CAT760B でも同じ手順です。違う箇所についてはつど注意記述します。

rootfsを再構築することによって、デバイスにたまったフラグメンテーションを解決しきれいな状態にすることができます。また CAT760 の フラッシュROM パーテーションサイズを変更した場合は、この手順で jffs2 イメージを作り直しておく必要があります。

環境構築が終わった CAT760 のファイル群を吸い出したいとします。ブートローダ catboot で

>> admin
password:
#> cp rom:rootfs cf0:rootfs.bin

と実行すれば rootfs のイメージを吸い出すことができますがこれは jffs2 形式ですので直接PCで開くことはできません。またファイルサイズは rom:roofs (/dev/mtdblock2)のパーテーションサイズになります。そのため、rom:rootfs (/dev/mtdblock2) のパーテーションサイズを変更したい場合は単純に rootfs.bin をコピーするだけではうまくできません。

CAT760から全てのファイルの吸出し方法

いろいろな方法が考えられますが一番安全なのは CAT760 が動いている状態( Linuxが起動している状態)で次のようにタイプします。

CAT760での作業

FATフォーマットされた CFカードを CN3 に挿入しておきます。

CAT760で
# cd /
# ls
bin    dev  home  mnt   root  sweet  tmp  var
cdrom  etc  lib   proc  sbin  sys    usr  var.rom

このうち、 cdrom mnt proc sys tmp var は マウントポイントであったり中身が空なので、それ以外のディレクトリを tar で固めます。

CAT760で
# mount /dev/hda1 /mnt/ -t vfat       (デバイスファイルが /dev/hda1 だと仮定)
# tar cf /mnt/rootfs.tar /bin /dev /etc /home /lib /root /sbin /sweet /usr /var.rom/
# sync
# umount /mnt

これで CFカードの中に rootfs.tar ができました。

開発用PCでの作業

CFに保存した rootfs.tar を 開発用PCにコピーし、適当な作業ディレクトリで展開します。

開発用PCのLinux環境 rootユーザで
# mkdir target
# cd target
# tar xf ../rootfs.tar
# mkdir cdrom mnt proc sys tmp var         (中身が空のディレクトリを作る)
# chmod 1777 tmp
# cd ..

これで 開発PCの target ディレクトリに、CAT760 のファイルが全てコピーされました。

再度 JFFS2 イメージとして構築する

開発用PCにコピーした target ディレクトリを再び JFFS2 形式で固めます。

開発PCでの作業
# mkfs.jffs2 -p -o rootfs.bin             -r target/
# mkfs.jffs2 -p -o rootfs_128k.bin -e 128 -r target/

-o 出力ファイル名
-p 使っていないところを 0xFF で埋める
-e イレースサイズ(キロバイト単位)  デフォルトは 64kバイト
-r ルートファイル群

rootfs.bin は 64K セクター用
rootfs_128k.bin は 128K セクター用です。

CAT76064Kセクター
CAT760A128Kセクター
CAT760B128Kセクター

この手順によって rootfs.bin はフラグメンテーションの無いきれいな状態になります。

またファイルサイズも必要ファイル領域分だけに小さくなります。CAT760出荷時の状況だとおよそ7Mバイトです。

関連