6:42
VMのシンプロビジョニングの謎 sparse file
KVMなどを触っているとシンプロビジョニングを行えるqcow2等のフォーマットのファイルによく出くわします。lsをしてみると、40Gのファイルが出来ていたりするのですが、実際には4Gくらいしか使っていません。今までどういう仕組なのかわからなかったのですが、これはsparse fileという名前で実際に書きこまれていない領域は確保しないという仕組みのようです。作り方は簡単で、Rubyで書くと次のようになります。
open('a.txt', 'w') do |f| f.seek 10000000 f.puts 'a' endつまり、実際に書き込まずseekすれば良いということですね。ちなみにこういうファイルをコピーするときにはちゃんと気をつけてコピーしてあげなければいけません。cpコマンドは良きに計らってくれるようですが、rsyncについて自分で指定してあげないといけないのだとか。
rsync --sparsetarでもまとめるときにも余分な部分を削除して通常ファイルを作ってくれます。
tar --sparseこれでVMのシンプロビジョニングも怖く有りません。