社内SEの徒然なる日記

UNIX(Solaris)のディスク容量を確認したい

■ 空き容量

UNIX(Solaris)の、とあるディレクトリのディスク容量(正確には空き容量)を確認する必要に迫られました。人力でやるのなら、TeraTermで接続してコマンド(df -hk)を打って確認すれば良いのですが、出来れば自動化したいです。

コマンドの実行結果をパイプラインで渡してゴニョゴニョとやれば出来そうですが、dfコマンドの実行結果だとちょっと複雑すぎて解析が面倒です。

・・・いや、シェルは苦手なんですよ。

※ この記事は、ディスク容量を確認するコマンドの話だけです。確認処理の自動化については書いてません。

■ duコマンド

空き容量を直接表示するようなコマンドは見当たらなかったのですが、使用量を表示するコマンドは見つかりました。

du [オプション] [ディレクトリ or ファイル]


このコマンドですが、オプションを指定せずに実行すると「ディスクのブロックサイズ」で結果が返ってきます。ディスクのブロックサイズでの計算が必要な場面って、データベースの容量計算位しか思いつかないのですが、UNIXでは一般的なんでしょうか?

オプションを付けたら「ディスクのブロックサイズ」を表示する、って方が良い気がするんですけどね。

オプションは、こんなところ。

-h  単位「K(キロバイト)、M(メガバイト)、G(ギガバイト)」を付ける
-k K(キロバイト)単位で表示する
-o サブディレクトリの容量は計算しない(直下のみ計算する)
-s 合計のみ表示

他にもあったのですが、シンボリックリンクが参照している先の容量も含めるとか、これって何に使うんだって言いたくなるようなオプションだったので除きました。

ちなみに、ディレクトリを指定しないとカレントディレクトリが対象になりました。

■ 実験(オプション)

さて、では色々と実験してみましょう。

カレントディレクトリは、/var/adm/test です。

# pwd
/var/adm/test


ここの構造は、こんな感じ。

/var/adm/test
├sqldef
├sqldata
├tmp
├makerdata
├data
└error


まずは、何もつけないで実行します。前述のとおり、ブロックサイズなのでこのままでは使えません。

# du
48 ./sqldef
6221218 ./sqldata
14320238 ./tmp
3256450 ./makerdata
338 ./data
292954 ./error
24091248 .


-h オプション で単位を追加します。表示される単位は同じものでなくサイズに合わせてKMGから選択されるようですね。目で見るなら、このオプションは良さそう。

# du -h
24K ./sqldef
3.0G ./sqldata
6.8G ./tmp
1.6G ./makerdata
169K ./data
143M ./error
11G .


-k オプション で数値をキロバイト単位で表示します。単位がK(キロバイト)で統一されるので、機械的に何かをする時には便利そうです。

# du -k
24 ./sqldef
3110609 ./sqldata
7160119 ./tmp
1628225 ./makerdata
169 ./data
146477 ./error
12045624 .


-s オプション で合計のみ表示します。これはシンプルで良いですね。

# du -s
24091248 .



さて、-o オプションの実験前に環境を用意します。sqldataの下に、testとディレクトリを追加して、適当にファイルを突っ込みます。

/var/adm/test
├sqldef
├sqldata
└test
├tmp
├makerdata
├data
└error


まずは、オプション無し。追加した「./sqldata/test」が追加表示されました。てっきり、「./sqldata」の表示サイズが変わるだけと思ってたのですが、階層がある場合は、こうやって表示されるわけですか。

# du
48 ./sqldef
124274 ./sqldata/test
6345492 ./sqldata

14320238 ./tmp
3256450 ./makerdata
338 ./kuwadata
292954 ./error
24215522 .


続けて、-o オプションを付けてサブディレクトリの容量を除いてみます。

# du -o
48 ./sqldef
124274 ./sqldata/test
6221218 ./sqldata
14320238 ./tmp
3256450 ./makerdata
338 ./kuwadata
292954 ./error
2 .


・・・何というか、面白いですね。

まず、サブディレクトリ「./sqldata/test」は表示されたままです。しかし、親の「/sqldata」のサイズからサブディレクトリのサイズが減算されています。そして、最後に表示されいてる総容量から配下のディレクトリの容量が全て減算されています。

減算と書きましたが、正しくは「計算されていない」なんでしょうね。

sqldataに移動して実行してみました。

# pwd
/var/adm/test/sqldata
#
# du
124274 ./test
6345492 .
#
# du -o
124274 ./test
6221218 .


こっちの方が、違いが分かりやすいですね。

■ 実験(ディレクトリ)

今度は、ディレクトリを指定します。

# du /var/adm/test
48 /var/adm/test/sqldef
6221218 /var/adm/test/sqldata
14320238 /var/adm/test/tmp
3256450 /var/adm/test/makerdata
338 /var/adm/test/data
292954 /var/adm/test/error
24091248 /var/adm/test


当初の予想では何も変わらないと思っていたのですが、実際には . が /var/adm/test に変わりました。

■ 結果

色々試したわけですが、結局はこうしました。

# du -k -s /var/adm/test
12045624 /var/adm/test


安定したサイズ取得をしたいので -k オプションで単位をK(キロバイト)に固定、-s オプションを付けて合計だけ表示、場所の指定を確実なものにしたかったのでディレクトリを指定。

うむ、ここまで単純になれば機械的に加工することが出来そうです。

■ 後書き

調べたいのは空き容量なのですが、duコマンドだけだと使用量しか分かりません。しかし、調べたいのは特定のサーバの、さらに特定の場所(スライス)という限定された用途なので、別に問題ありません。

全体容量を固定値で持っておいて、取得した使用量を減算すれば空き容量が出ますからね。

そもそも、本格的な監視をしたいのであれば自作コマンドでガリガリ作りこむよりも、監視用とソフトを入れるのが正道かと思います。

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する