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すげー。