First Creation : 2005/10/10

Last Update: 2010/08/13

Top > Menu - VD > ZAURUS カスタマイズ 第 7回

SDカード

先日注文した SDカード ( 1GB ) が届いた。512MB から 1GB へグレードアップである。

バックアップ

私の所有する Zaurus SL-C860 にはバックアップ機能がない。正確には、本体メモリのバックアップ機能はあるが、SDカードのバックアップ機能がない。従って、今まで使っていた SDカードのファイルを新しい SDカードに移行させるには、以下の手順を踏むことになる。

  1. SDカード のファイルを PC(母艦)にコピー
  2. SDカードを入れ替え、新しい SDカードのフォーマット
  3. 母艦から新しい SDカードにファイルをコピー

要は母艦を経由させてファイルのバックアップを行うだけなのだが、注意するべき点として、Windows を経由させたときに所有者の情報が失われないようにしなければならない、ということが挙げられる。

Linux に明るくない人のために、Linux のファイル情報について補足しておくとしよう。「オマエもだろ」という声は、心を鬼にして無視することにする。

Linux ファイル・システム

例えば、Linux に readme.txt というファイルがあったとしよう。readme.txt には次のような情報が保存されている。

ファイル名 パーミッション 所有者 グループ サイズ タイムスタンプ
readme.txt 744 zaurus qpe 500 2005/10/10 21:10

Samba 経由で母艦にファイルをコピーしたとき、ファイル名やサイズは当然同じだが、パーミッションと所有者・グループが失われる可能性がある。SDカードに保存されているのが、音楽ファイルとか htmlファイルだけなら、パーミッションや所有者の情報が失われてもなんてことはない。しかし、cgi 等のファイルからパーミッションや所有者情報が失われると、掲示板が機能しなくなってしまう。

こういった問題を回避するため、一端ファイル群を書庫にして母艦にコピー、その後 SDカードに移して解凍することにした。

バックアップ開始

1. 書庫の作成
# cd /usr/mnt.rom/card
# tar cf Documents.tar Documents/
# tar cf QtPalmtop.tar QtPalmtop/
# tar cf htdocs.tar htdocs/

本当は、SDカードに移動してから、「# tar -cf sdroot.tar ./」とかやって一気にコピーをとればいいのだが、不要なディレクトリもあったので、必要なディレクトリだけ選択して書庫化した。その後、書庫ファイルを Samba で共有しているフォルダに移動させた。

# mv *.tar /Documents
2. 母艦へコピー

Zaurus で LANカードを接続して Samba を起動する。母艦から Zaurus の IPアドレスを入力(正確には \\192.168.0.10 等)して、書庫ファイルを母艦へ持ってくる。

3. SDカードのパテーションを作成

SDカードを Windows のファイルシステムである FAT16 や FAT32 でフォーマットすると、ファイルに所有者情報が持たせられない。だからといって Linux のファイルシステムである ext2 にすると、SDカードへのファイル・アクセスが遅くなってしまうという問題がある。そこで、SDカードを二つの領域に区切り、ext2 と fat16 でフォーマットすることにした。

ファイルシステム デバイス 使用目的 容量 SDカード合計
ext2 /dev/mmcda1 システムとhtml / php / cgi 等 200MB 1GB
fat16 /dev/mmcda2 辞書、音楽ファイル等 800MB

SDカードを入れなおしても認識しなかったので、再起動したところ、ちゃんと SDカードが認識されていた。

# umount /dev/mmcda1     ; SDカードをアンマウント
# fdisk /dev/mmcda1     ; SDカードの領域を区切る

ここから FDISK モードへ移行。m でヘルプが表示される。

Command: p     ; パテーション一覧表示
(略:何故か何個もあった)


Command: d
Partition number (1-4): 1     ; パテーションの 1個目を削除
Command: d
Partition number (1-4): 2     ; パテーションの 2個目を削除
Command: d
Partition number (1-4): 3     ; パテーションの 3個目を削除
Command: d
Partition number (1-4): 4     ; パテーションの 4個目を削除


Command: p     ; パテーション一覧表示
(略:パテーションの 1 が 3つあった)


Command: d
Partition number (1-4): 1     ; パテーションの 1個目を削除


Command: p     ; パテーション一覧表示
Disk /dev/mmcda1: 32heads, 63 sectors, 992 cylinders
Units = cylinders of 2016 * 512 bytes

        Device Boot    Start    End    Blocks    Id    System
(パテーション情報がなくなった)


Command: n     ; パテーション作成(1個目)
        e    extended
        p    primary partition (1-4)
p     ; プライマリパテーション
Partition number (1-4): 1     ; ( 1個目)
First cylinder (1-992, default 1): 1     ; そのまま Enter でも可
Last cylinder or +size or +sizeM or +sizeK (1-992, default 992): +200M     ; 200MB を指定


Command: n     ; パテーション作成(2個目。なお、プライマリパテーションは 4個まで作れる)
        e    extended
        p    primary partition (1-4)
p     ; プライマリパテーション
Partition number (1-4): 2     ; ( 2個目)
First cylinder (205-992, default 205): 205     ; そのまま Enter でも可
Last cylinder or +size or +sizeM or +sizeK (205-992, default 992): 992     ; そのまま Enter でも可


Command: p     ; パテーション一覧表示
Disk /dev/mmcda1: 32heads, 63 sectors, 992 cylinders
Units = cylinders of 2016 * 512 bytes

        Device Boot    Start    End    Blocks      Id    System
        /dev/mmcda1p1    1      204    205600+     83    Linux
        /dev/mmcda1p2    205    992    794304      83    Linux


Command: w     ; 書き込み後、終了
The Partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: if you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
4. フォーマット

作成したパテーションを、ext2 と fat16 でフォーマットする。

# mkfs.ext2 /dev/mmcda1     ; 1個目の領域を ext2 でフォーマット
# mkfs.msdos /dev/mmcda2     ; 2個目の領域を fat16 でフォーマット
mkfs.msdos 2.8 (28 Feb 2001)
mkfs.msdos: Attempting to create a too large file system

ここで問題発生。fat16 でフォーマットしようとしたら、サイズが大きすぎると怒られた。mkfs.vfat でも同じエラーで怒られる。どうしたものか・・・

もう一度 FDISK を実行してみることにした。すると、パテーション1 のファイルシステムが 83 であることに気づいた。

# fdisk /dev/mmcda1
Command: p     ; パテーション一覧表示
Disk /dev/mmcda1: 32heads, 63 sectors, 992 cylinders
Units = cylinders of 2016 * 512 bytes

        Device Boot    Start    End    Blocks      Id    System
        /dev/mmcda1p1    1      204    205600+     83    Linux
        /dev/mmcda1p2    205    992    794304      83    Linux

これではだめだ。両方とも Linux のファイルシステムである。パテーション2 の方は fat16 の 6 である必要があるのだ。変更することにした。

Command: t     ; ファイルシステム変更
Partition number (1-4): 2
Hex code (type L to list codes): 6     ; 6 は fat16 のファイルシステム
Changed system type of partition 2 to 6 (FAT16)


Command: w     ; 書き込み後、終了
The Partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: if you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

もう一回フォーマット・・・しようとしてできない。そういえば、SDカードは /dev/mmcda だったな。/dev/mmcda1 にしてしまうと、SDカードの第一パテーションという意味になってしまう。それだとおかしいので、 fdisk /dev/mmcda にしないといけない。

# fdisk /dev/mmcda1     ; FDISK で領域を全部消して、書き込み後、終了する
# fdisk /dev/mmcda     ; ext2 と fat16 で区切る(今までやってきたことと同じ要領)
# mkfs.ext2 /dev/mmcda1     ; 成功・・・
# mkfs.msdos /dev/mmcda2     ; 成功!
5. マウント

いよいよ二つのパテーションをマウントする。

# mkdir /mnt/data     ; fat16 用のディレクトリ作成
# mount /dev/mmcda1 /mnt/card     ; ext2区画をマウント
# mount /dev/mmcda2 /mnt/data     ;  fat16区画をマウント
6. 母艦からファイルを持ってくる

必要に応じて、母艦にコピーした書庫を /mnt/card に持ってきたり、/mnt/data に書庫を持ってくる。 今回は軽かったので、全て /mnt/card に持ってきた。

/mnt/data に直接ファイルを送り込むには、Samba の設定ファイルをいじらなければならないので面倒だから、というのもある。

コピーしようとしたら、書き込み権限がなくて怒られた。しょうがないので、test というやる気のないディレクトリを作って、パーミッションを 777 に変更することにした。無論、test ディレクトリは書庫を解凍し終わったら削除するのである。

# cd /mnt/card
# mkdir test
# chmod 777 test/

これで母艦から Zaurus を見たときに test フォルダが表示されるようになった。そこに書庫を放り込んでしまう。

7. 書庫の解凍

v オプションはつけなくてもいいが、私は展開している様子が見えるのが好きなので、つける。

# cd /mnt/card/test
# mv *.tar ../     ; 書庫を /mnt/card に移動
# cd ../     ; /mnt/card に移動して作業開始
# tar xvf Documents.tar
# tar xvf QtPalmtop.tar
# tar xvf htdocs.tar

以上でバックアップは終了である。

Samba 設定ファイルの変更

ついでに smb.conf を書き換えた。主な修正箇所は以下の通り。

smb.conf

;[home]
;    comment = for User Data
;    path = /home/samba
;    short preserve case = no
;    read only = no
;    guest ok = no
;    force user = hogehoge
;    force group = qpe
;    create mode = 0775
;    directory mode = 0775

[card]
    comment = Ext2 Format
    path = /mnt/card
    short preserve case = no
    read only = no 
    guest ok = no
    force user = hogehoge    #(Windows でログインするときのユーザ名)
    create mode = 0775
    directory mode = 0775

[data]
    comment = FAT16 Format
    path = /mnt/data

    read only = no
    writable = yes

これで終わりと思ったら、FAT16 の区画の方にまったく書き込みできない。ext2 の方は問題ないというのに。

ためしに以下のことを確認した。

  1. umount /dev/mmcda2 でアンマウント
  2. chmod 777 /mnt/data で誰でも書き込み可能に
  3. 母艦から書き込みできることを確認

smb.conf の問題ではないようだ。FAT16 区画をマウントした共有ディレクトリに対する書き込みができない。ためしに mount -o rw /dev/mmcda2 とかやってもNG。さらに、パテーションの区切り方を、第一区画 FAT16、第二区画 ext2 としても NG。

ぐぐるうちに、こんな考えをするようになった。

  1. FAT16 は ext2 よりも読み書きが速いらしい
  2. しかし、FAT16 のパテーションは音楽ファイル置き場になるので、大して速度は必要としない
  3. スワップファイルは ext2 におかなければシステムが不安定になるので、やはり FAT16 は必要としない
  4. SDカードにインストールされるアプリケーションもあるが、これは /mnt/card の方にインストールされるのであって、 /mnt/data にインストールするには、面倒な作業が必要になる
  5. 一方の領域が足りなくなったときに、ファイルを移動するのが面倒
  6. 要するに、SDカードはそんなに速度を必要としない使い道になるはずなので、FAT16 は必要ないのではないか

というわけで、SDカードの分割はせず、全ての領域を ext2 でフォーマットしなおし、smb.conf も元にもどした。ついでに文字コードの設定変更をした。赤い文字のところがそうだ。

smb.conf

[global]
# workgroup is either a domain name or a workgroup name
    netbios name = zaurus
    workgroup = hogehoge
    log file = /dev/null
    hosts allow = 192.168.0.1, 192.168.0.2


# encrypt passwords is required for Win98, NT and Windows 2000


    encrypt passwords = yes


    dos charset = CP932
    unix charset = utf8
    display charset = utf8


    ;coding system = utf8
    ;client code page = 932


    strict sync = yes
    sync always = yes


    interfaces = eth0
    bind interfaces only=yes


#    wins support = yes


[card]
    comment = Ext2 Format
    path = /mnt/card
    short preserve case = no
    read only = no
    guest ok = no
    force user = hoge
    create mode = 0775
    directory mode = 0775

戻る上へ通行止め