1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Linux/ハウスキープ】沢山のファイルを一括で移動できない時点で草

Last updated at Posted at 2023-08-12

みなさん、お部屋の掃除していますか

システムエンジニアになると「ハウスキープ」って用語が良く出てきます

新しいシステム開発をする場合、マスタやトランザクションの初期件数と増加傾向見込みから
必要とされるリソースの見積をすることが多かったりしますよね。

まずはシステムは動かすのが最優先、ひとまず何かしら動けばいいとか思っていませんか。
それは駄目。

世の中スピード命。そう。時間と戦いましょう。最後の日まで残り時間はあと少しです。

時間の経過とともに成長して太る(表現

マスタデータやトランザクションはDBやらs3やらに格納することは多いと思います。
日に日にデータ量が増加すると売り上げ拡大に繋がることが実感して嬉しいものの
画面の描画がやけに遅くなったりして不平不満が増える時期かも。

postgreSQLなら顕著に問題が出るので vacuum full とか実行したくなったり
pg_repack とか実行したくなったりしますよね。

Oracle なら想定外の性能劣化を避けたいので統計情報固定化したくなったり
統計情報によらず性能維持したいからヒント句を書いたりしたいかも

mySQL はあまり何もしないかと思ったら、やっぱり Oracle みたいなヒント句だらけ。

とはいえ。 DB は他に譲るとして今日はデータファイル自体が一杯になったお話です。
某システムのディスク容量が突然 90%を超過。夜中に電話でたたき起こされる罠。

ディスクの空き具合とは。

ひとまず端末に接続はできたので容量を確認。

yamada% df -u
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdf       250G  225G   25G  91% /data

うむむ。残り10%を切ってはいるけど25GBもあるなら 急がなくていいんじゃね。
たぶん監視レベル間違い。アラートの前に警告とかないのか、とか気になりつつ。

ひとまず容量を占有するホルダを探すことに。適当に awk とか。

yamada% du -h | awk '{if($1 ~ /G/){print $0}}' | sort -n -r | head -n 5
180G    /data/path/to/campaigns
20G     /data/path/to/work
6.8G    /data/path/to/logs
1.3G    /data/path/to/customers
1.2G    /data/path/to/shell

どうしたキャンペーンホルダ。何故 180G。何をキャンペーンしている。

yamada% cd /data/path/to/campaigns
yamada% ls -lt | wc -l
bash: /bin/ls: Argument list too long

yamada% find . -name '*' -type f -ls | wc -l
bash: /bin/find: Argument list too long

ひとまず数を調べようとしたらエラー吐いて落ちるw
too long ってなんだ。

yamada% ls -lt | tail -5
-rw-rw-rw- 1 root root 10485763 Apr  9  2017 テストプロモーションキャンペーン(第一弾).log.1
drwxr-xr-x 2 root root        6 Mar 31  2017 log
-rw-rw-rw- 1 root root     1515 Mar 31  2017 テストプロモーションキャンペーン(第二弾).log
-rw-rw-rw- 1 root root     3933 Mar 29  2017 suzuki.zip
-rw-rw-rw- 1 root root     5548 Mar 28  2017 22898.stack

それはそれとして 2017年から古いファイルが沢山残っていること確認。
ていうかファイル名が日本語。なんだこれ。
ファイル名にかっことかつけた奴でてこい。
鈴木さん zip とかいらないし。自分の名前でなくてよかった。
もしや(略

ハウスキープのコツは「そのファイルを手につかんで、ときめくか」。
ときめかない(断言)

ひとまず日付を指定して圧縮。
「削除していいかどうか分からない」と鈴木さんがあなたの心に語り掛ける。

# 件数の確認
yamada% find . -name '*' -newermt '2017/01/01' ! -newermt '2018/01/01' -type f | wc -l
1212

# 圧縮を実行
yamada% find . -name '*' -newermt '2017/01/01' ! -newermt '2018/01/01' -type f | xargs gzip
gzip: ./鈴木-1948-01-31: No such file or directory
gzip: プロモーション.txt: No such file or directory
 ;
(大量に同件が発生)

むむ。エラーが出た。ファイルを探してみると

yamada% ls -lt 鈴木-1948-01-31*
total 1515
-rw-rw-rw- 1 root root     1515 Mar 31  2017 鈴木-1948-01-31 プロモーション.txt

何故ファイル名に空白をいれるのだ、鈴木さん。
find の結果が2個のファイルと勘違いされた模様。

ただし諦めない。
こんな対策をすれば解決。

# ファイル名に特殊記号を含む場合は -print0 を指定。xargs には -0 を指定。
yamada% find . -name '*' -newermt '2017/01/01' ! -newermt '2018/01/01' -type f -print0 | xargs -0 gzip

# 同じホルダにまとめて移動したい場合は mv に -t を指定
yamada% find . '*.gz' -type f -print0 | xargs -0 mv -t /data/work/backup/

いつも心に太陽を。
夏休みなのにハウスキープをして少し大人になったからOK。

※ただし二度と電話してくるなw

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?