ヴォルフロッシュ

Blog

Published on

RSS

swapファイル総量の表示 on Geektool

最近我が愛機MacBookが重たい。もう3年半近く使っているので確かにそろそろ変え時ではあるのだが、今のところまだ使えるので使っている(さすがに次に新しいMacBook Proが出たら買い替えたい)

で、私は外付けHDだクラウドだに自分のデータを分散させることを好まないので、何でもかんでもこの1機にデータを入れている。一応内臓HDDは250GBなのだがもう瀕死だ。しかも私は基本一度Macを立ち上げたら、OSのアップデートか飛行機乗るかカーネルパニックを起こすかでもしないかぎり立ち上げっぱなしにしてる。そうすると何が起こるかというと、Macがswapファイルを作りまくってくれるのだ。前述のようにもうそれなりに古いのもあるが、気付いたらswapファイル10個越え、計10GB以上とかになってる。こわい。

実際そういうレベルになるとMacももたつき、作業に支障が出る。ので最近はあんまりひどいとクリアするために再起動させてる。

ところで私は最近Geektoolの愛用者でデスクトップに色々表示させて便利に使っているのだが、ここに現在のswapファイルの総量もあったら便利だなーと思いつく(Geektoolを使ったデスクトップのカスタマイズそのものについてもそのうち書きたいと思ってる。ひとまず最近のDesktop画像はプロフィールで公開中)

書きました

最初は単純にswapファイルのあるディレクトリの容量を表示させればいいだけだと思ったのだが、どうやらswapファイルのある/var/vm/ディレクトリにはswapファイルの他にsleepimageたるなんか大きいファイルが鎮座している。見ると4GBもある。なんだこりゃと思ってぐぐると、どうやらスリープ時のバックアップ用のデータらしい。設定で生成をオフにもできるっぽいけどそんな大事な機能はオフにはしたくない。私スリープ状態でガンガン持ち歩くし。なので表示させたい値としては、/var/vm/全体の容量からsleepimageの容量を引いた差分となる。なんか思ったよりめんどくさそうだけどまぁやればできそう。

ってことで、Geektoolでswapファイルの総量を表示させるスクリプトを書いたのでここに載せておく。そんな環境依存がある特殊なことはしてないはずなので同じMacなら動くはずである。

(du -ks /var/vm/; du -k /var/vm/sleepimage) |
awk 'NR==1{dir=$1} NR==2{sleepimage=$1}
END {swap = dir - sleepimage;
    hum[1024**2]="G";hum[1024]="M"; hum[1]="K";
    for (x=1024**2; x>=1; x/=1024) {
        if (swap >= x) {
            printf "%d%s\n", swap/x, hum[x];
            break
        }
    }
}'
Geektoolの容量関係表示部分

簡単に書くと、duコマンドで/var/vm/ディレクトリとsleepimageファイルの容量を表示させ、それをパイプでawkに渡して差分を計算、かつ人間が読める出力フォーマットにして表示させている。

sleepimageを引きたい関係上どうしてもawkで計算をする必要が出てくるので、泣く泣くduではキロバイト単位で表示させて、awkで単位計算をやっている。もう少しスマートな方法があればいいのだがあんまり見当たらなかった。後半の単位計算の部分のコードはとあるLinux系フォーラムにあったコードが参考になった。というか一部改変して使ってるけどほぼパク。

ってことでコレをコピペしてGeektoolに突っ込めば多分動くので同じことしたい人がいたらどうぞ。

私は大まかな値さえ把握できればいいので整数値を使っているが、小数点まで出したいなら最後のprintfのとこを弄れば良い。

Comment

この記事へのコメント受付は終了しました。