揮発性のメモ2

知識をメモ書きしておく

swapファイルの作成

今週のお題「あまいもの」
4GBバイトほどのスワップファイルを作るにあたって、スパースファイルですまそうと思ったけど そんなにあまいものではなかった。

でかいスパースファイルの作り方

その1:ddを使う
ddでシークオプションを指定すると、そこまで移動してから書いてくれる

$ sudo dd if=/dev/zero of=/sparse bs=1 count=1 seek=4294967295
1+0 レコード入力
1+0 レコード出力
1 バイト (1 B) コピーされました、 2.9777e-05 秒、 33.6 kB/秒

$ du -h /sparse 
4.0K	/sparse
$ ls -l /sparse 
-rw-r--r-- 1 root root 4294967296  215 19:59 /sparse

このやり方だと最後の1バイトは本当に書くので、完全なスパースファイルにはならない


その2:cpを使う
cpでスパースオプションを指定すると、実体が1バイトもない完全なスパースファイルが完成する

$ sudo cp --sparse=always /sparse /perfectsparse

$ du -h /perfectsparse
0	/perfectsparse
$ ls -l /perfectsparse
-rw-r--r-- 1 root root 4294967296  215 20:02 /perfectsparse


当然このファイルは穴があるどころか穴そのものなため、スワップファイルとしては使えない。

$ sudo mkswap /perfectsparse
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

$ sudo swapon /perfectsparse 
swapon: /perfectsparse: skipping - it appears to have holes.

cpコマンドで穴を埋めてからならスワップファイルとして使用可能になる。

$ sudo cp --sparse=never /perfectsparse /swapfile
$ sudo swapon /swapfile