ファイルシステムが格納されたファイルを作ってみた

2010/02/02PC::Linux/BSD

mkswapコマンドで、スワップ領域として利用する元としてファイルが指定できる。
50MBのスワップとして利用できるファイルを作成し、利用する一連の動作を実際にやってみた。

スワップ領域として利用するファイルの作成

# dd if=/dev/zero of=/tmp/swp bs=1M count=50
50+0 記録始め
50+0 記録終わり
52428800 バイト (52 MB) コピー終了, 0.109074 s, 481 MB/s

ファイルをスワップ領域として利用できるようにする

# mkswap /tmp/swp
スワップ空間バージョン 1 を設定します、サイズ = 51196 KiB
no label, UUID=b1e1f86f-1d8b-4fbf-9015-3b7543cb6730

/tmp/swpをスワップ領域として利用する

# swapon /tmp/swp

現在のスワップ領域に関する情報を表示

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda5                               partition       4200956 0       -1
/tmp/swp                                file            51192   0       -2

で、本題

スワップファイルだけではなく、同じようにファイルシステムもファイルの中に作れるのではないか?(仮想ディスクとして扱うことができるのではないか?)

やってみた

先ほどと同様にファイルシステムを作成するための空ファイルを作成します。

# dd if=/dev/zero of=/tmp/virtualdisk bs=1M count=100
100+0 記録始め                                                           
100+0 記録終わり                                                         
104857600 バイト (105 MB) コピー終了, 0.199313 s, 526 MB/s  

ext3ファイルシステムを作成します。

# mkfs.ext3 -b 4096 -c -m 0 /tmp/virtualdisk 
mke2fs 1.41.4 (27-Jan-2009)                                      
/tmp/virtualdisk is not a block special device.                  
Proceed anyway? (y,n) y                                          
Filesystem label=                                                
OS type: Linux                                                   
Block size=4096 (log=2)                                          
Fragment size=4096 (log=2)                                       
25600 inodes, 25600 blocks                                       
0 blocks (0.00%) reserved for the super user                     
First data block=0                                               
Maximum filesystem blocks=29360128                               
1 block group                                                    
32768 blocks per group, 32768 fragments per group                
25600 inodes per group                                           

Checking for bad blocks (read-only test): done                                
Writing inode tables: done                                                    
Creating journal (1024 blocks): done                                          
Writing superblocks and filesystem accounting information: done               

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

途中でブロックスペシャルデバイスではないと言われていますが、作成することはできました。


マウントポイントを作り、マウントしてみます。

# mkdir /tmp/vdisk
# mount -t ext3 -o defaults,loop /tmp/virtualdisk /tmp/vdisk/

何事もなくマウントできました。すげー。

mountコマンドと、dfコマンドで現在のマウント状況を表示してみます。

# mount
中略
/dev/loop0 on /tmp/vdisk type ext3 (rw)
# df -h
ファイルシステム            サイズ  使用  残り 使用% マウント位置
中略
/dev/loop0             97M  4.1M   93M   5% /tmp/vdisk

この後実際に書き込んだりしてみましたが、問題なくファイルの作成とかもできてしまいました。Linuxすげー。