今週のお題「あまいもの」
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 2月 15 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 2月 15 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