============================================================================== VFAT フォーマットの SD カード上に、ext2 領域を作成してマウント たなかとしひさ(tosihisa@netfort.gr.jp) 最終更新:$Id: zaurus_loopback.txt,v 1.1 2003/01/27 02:56:57 tosihisa Exp $ ============================================================================== SL-B500 上でセルフコンパイルをしていて、なおかつコンパイルしているディレ クトリが SD カードである場合、以下の問題に突き当たる時があります。 (A) Makefile 等がシンボリックリンクされるが、SD カードは vfat でマウント されているためシンボリックリングが張れない。 (B) パーミッションが適切に設定出来ない。 これら全ては、 SD カードを VFAT 形式でマウントしているための制限です。 この制限を回避するためには、SD カードを、Linux で通常使用される ext2 形式によりパーティションを切り直し、ext2 形式でマウントする方法もあり ますが、個人的には Windows とのやりとりを考えると SD カードを ext2 に してしまうのは避けたい所です。 幸いな事に、Linux には、loopback デバイス機能があり、それを使うことで、 /dev 以下にある様な、デバイスファイルでは無い、普通のファイルを、 あたかも ext2 で初期化された領域としてマウント出来る様になります。 この機能は、SL-B500 においても使う事が出来ます。 これを使えば、VFAT パーティションしかない SD カード上で、ext2 と同等の 作業を行う事が可能になります。 ここでは、普通に出回っている、VFAT 形式しか存在しない SD カード上に、 'sd_local'と言う名前のファイルを作成し、それを /home/userdata/local に ext2 形式でマウントする方法について説明します。 この文書は*無保証*です。あくまで、私自身が試した事について書いています。 この文書に書かれている事を実行する事により、お使いの Zaurus 環境に何か 支障が発生しても、責務を負う事は出来ません。 ============================================================================== ***以下の作業は、全て LinuxZaurus 上で行ないます*** (1) ターミナルを起動し、su で root になってから、 /mnt/card(SDカード) に cd します。 bash-2.05# cd /mnt/card/ (2) SDカード上で、サイズが 16MB で中身が全部 0 のファイル 'sd_local' を 作成します。サイズは、SD カードの容量を越えない範囲で、適宜設定して ください。私は、16MB のサイズを割り当てる事にしました。 bash-2.05# dd if=/dev/zero of=sd_local bs=1k count=16384 16384+0 records in 16384+0 records out (3) sd_local を、ext2 フォーマットします。mke2fs は、対象デバイスが ブロックデバイスで無い場合、確認の問い合わせを行ないますので、'y' を 押してフォーマットを進めさせます。 もちろん、ここは、'sd_local' ファイルの「中身」だけが、ext2 形式で初期 化され、他のファイルやディレクトリ、パーティション構成には何ら影響を 与えません。 bash-2.05# /sbin/mke2fs sd_local ← sd_local「ファイル」を ext2 形式で初期化します。 mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 sd_local is not a block special device. Proceed anyway? (y,n) y ← 'y' を押す Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 4096 inodes, 16384 blocks 819 blocks (5.00%) reserved for the super user First data block=1 2 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193 Writing inode tables: done Writing superblocks and filesystem accounting information: done (4) 'sd_local' に対するマウントポイントとなるディレクトリを作成します。 bash-2.05# mkdir /home/userdata/local (5) 'sd_local' を、/home/userdata/local にマウントします。この時、 -o loop オプションをつけて、ループバックマウントさせます。 bash-2.05# mount -o loop -t ext2 sd_local /home/userdata/local 正しくマウントできれば、ls で見てみましょう。 bash-2.05# ls -al /home/userdata/local/ drwxr-xr-x 3 root root 1024 Jan 18 06:54 . drwxr-xr-x 4 root root 0 Jan 18 06:53 .. drwxr-xr-x 2 root root 12288 Jan 18 06:51 lost+found mke2fs により、sd_local 内部に、lost+found ディレクトリが作成されて います。これで、正常に ext2 形式でマウントできていますので、 /home/userdata/local 以下は、シンボリックリンクが張れたり、パーミッ ションの変更が可能になります。 ============================================================================== loopback デバイスは、パーティションとは関係ありませんので、非常に 手軽です。 ただし、loopback デバイスは、簡単に全ての領域を消す事が出来ます。 例えば、今回のケースなら、'sd_local' ファイルを rm するだけで、sd_local に入れていたものが全て消えてしまうので、注意する必要があります。 また、loopback でマウントしても、元々は VFAT 上に置かれた通常のファイル ですので、ファイルシステムの「強度」としては、つまる所は VFAT と同等です。 (単に ext2 で使える機能(シンボリックリンク、パーミッション)と同程度の機 能が使えるだけです) ==============================================================================