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
- 【 split 】コマンド――ファイルを分割する:Linux基本コマンドTips(162) – @IT
- 【split】Linuxでファイルの分割と結合方法 | server-memo.net
- Linux/UNIXでCUIからファイルの分割(+圧縮)保存を行う | 俺的備忘録 ?なんかいろいろ?
tar
- ファイルのアーカイブと圧縮を行う | 初心者のためのLinux
- [Linux]ファイルの圧縮、解凍方法 – Qiita
- 【tar】Linuxでファイルの圧縮・解凍をするコマンド | UX MILK
- tarで「`/’ を取り除きます」と言われた時の対処方法 – Qiita
find
find + tar
- findの検索結果から圧縮ファイル(.tar.gz)を作るLinuxコマンド | 金融エンジニア
- findの結果をtarでアーカイブしたい – 浦安市在住+デジカメ
- findの結果をtarファイルに纏める。xargsは使わないよ。 – 戯言
- find で探したファイルを tar に – Qiita