Linux でディスク容量が不足したときに使ったコマンド等

Linux でディスク容量不足に気付いて対処を実施。その際に使ったコマンドをメモしておきます。

ついでに不採用だったものの作り途中でもったいなかったのでたらればのシェルスクリプトもメモしておきます。

容量確認

df

# df -h

du

# du -sh /*

これで使用量の大きい順にソートされるので、ディレクトリを絞り込んでいくことができます。

tar

圧縮

/hoge/piyo/hogera というファイルが存在するとして。

# tar -C /hoge/piyo/ -cvzf /hoge/piyo/hogera.tar.gz hogera

解凍

/hoge/piyo/hogera というファイルがないとして。

# tar -C /hoge/piyo/ -zxvf /hoge/piyo/hogera.tar.gz

これで /hoge/piyo/hogera に解凍されます。

シェルスクリプト (未使用)

#!/bin/bash

# ログファイルの名前
declare -a array=("foo" "bar" "baz")

# ディレクトリ定義
LOGDIR="/var/log/fuga/"
TMPDIR="/hoge/piyo/"

mkdir ${TMPDIR}

for v in "${array[@]}"
do
    split -l 50000 -d -a 4 ${LOGDIR}${v} ${TMPDIR}${v}- # 50000行ごとにsplit
    find ${TMPDIR} -name "${v}-*" -print0 | tar -cvz -T - --null -f ${TMPDIR}${v}s.tar.gz # find + tar で圧縮
    rm -f "${TMPDIR}${v}-*" # 一時ディレクトリの生ログファイル削除
    rm -f "${LOGDIR}${v}"   # オリジナルのログファイル削除
done

systemctl restart fugaservice

途中どうにかシェルスクリプトで行けないか試しましたが、解凍が上手く行かなかったり (オプションの指定を間違えていた) 、圧縮時に他のファイルも巻き込んで後に処理するものほど雪だるま式に大きくなってしまったり (圧縮時の tarコマンド で -C ${TMPDIR} を指定するとそうなった) したので不採用。

手動でどうにかした後、「おそらくこうしたら行けたのではないか」という結論に達したので、そのたらればのスクリプトを置いておきます。

tar -C /hoge/piyo/ -zxvf /hoge/piyo/foo.tar.gz

解凍するときはこれで行けるはず (ディレクトリごと再現しますが)。

参考

ディスク容量不足調査

split

tar

find

find + tar

シェルスクリプト

シェバン

変数

配列

for

print0

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。