メニュー -> Solaris

ファイル上にファイルシステム

SolarisやLinux中に存在するファイルの中にファイルシステムを作る遊びです.
時と場合によっては非常に役立つことも.



Solarisの場合

まず,Solarisの場合は次のように空のファイルを作成しておきます.

# dd if=/dev/zero of=$PWD/10MB bs=1024k count=10

これで10MBの空ファイルができました.次にlofiadmコマンドを使って,このファイルをファイルシステムとして使うための準備をし,newfsでファイルシステムを作成します.

# lofiadm -a /home/nomo/10MB
# newfs /dev/lofi/1

最後に適当なマウントポイントを作ってマウントします.

# mkdir /tmp/mnt
# mount /dev/lofi/1 /tmp/mnt

最後に/tmp/mntの中でファイル書き込みの実験をしてみます.

# cd /tmp/mnt
# mkfile 100m 100m
100m: initialized 8437760 of 104857600 bytes: No space left on device
# du -hs
 8.1M   .

Linuxの場合

Linuxの場合は,lofiadmコマンドの代わりに直接ファイルシステムを作成することができます.

# dd if=/dev/zero of=$PWD/10MB bs=1024k count=10
# mkfs.ext3 10MB
mke2fs 1.38 (30-Jun-2005)
10MB is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2560 inodes, 10240 blocks
512 blocks (5.00%) reserved for the super user
First data block=1
2 block groups
8192 blocks per group, 8192 fragments per group
1280 inodes per group
Superblock backups stored on blocks:
        8193

Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# mkdir /tmp/mnt
# mount -o loop 10MB /tmp/mnt
# cd /tmp/mnt
# dd if=/dev/zero of=$PWD/10MB bs=1024k count=100
dd: writing `/tmp/mnt/10MB': デバイスに空き領域がありません
読み込んだブロック数は 9+0
書き込んだブロック数は 8+0
# du -hs
8.7M    .

何の役に立つのか

インターネットサーバで特定のサービスをchrootさせて特定の領域で動作させるのはセキュリティ上一般的ですが,今回の手法を用いることで,侵入者をファイルシステムではなくファイルの中に閉じこめることができます.
また,OSのシステムQuotaを使用することなく領域を確保できるのもメリットの1つです.

といっても

ファイルをファイルシステムとして使用するということで,読み書きのパフォーマンスもかなり低下します.これが難点.

20:36:16 on 10/08/05