BLOGTIMES
2020/03/08

prunef でバックアップファイルを間引く

  cli  centos7 
このエントリーをはてなブックマークに追加

prunef というファイルを間引くためのプログラムが便利そうだったのでメモ。

例えばデータベースのバックアップや、ファイルシステムのスナップショット日次で行っていると、当然のことながら毎日1つずつファイルやスナップショットが増えていきます。ただ、実際の復旧となると、直近のファイルやスナップショット以外が必要になることはそれほど多くありません。そんなわけで、過去1ヶ月分は週次、それ以上前の分は月次のように、適度にバックアップを間引いて容量を節約したいと思うことがあります。

そんな時に使えそうなのがこの prunef というプログラムです。

~apreiml/prunef - sourcehut git

Takes an unsorted list of backup names and returns a list of backups for deletion. The backup rotation rules are given via command line args. The backup names need to contain the time and a date(1) like format specifier is required to parse those.

インストール

言語は Go なので、CentOS の場合は golang と scdoc のパッケージをインストールしておきます。
あとはリポジトリを clone して make install するだけで簡単にインストールできます。

sudo yum install -y golang scdoc git clone https://git.sr.ht/~apreiml/ cd prunef make && make install

実際の使い方の例

実際の使い方のイメージがわかりやすいように、YYYY-MM-DD.txt というファイルを1日ごとに作るスクリプトを書いてみました。
これを実行すると今日の分から、1000日分のファイルができます。

mkdir logs seq 0 1000 | while read N ; do touch -d "`date -d "-$N day"`" "./logs/`date -d "-$N day" +%Y-%m-%d`.txt" done

実際にファイルを間引くスクリプトはこんな感じになるでしょうか。

find tmp -name '*.txt' | prunef --keep-daily 7 --keep-weekly 4 --keep-monthly 6 "tmp/%Y-%m-%d.txt" | xargs --no-run-if-empty rm

実行後にフォルダを確認するとこのような感じでファイルが間引かれている(日次が7つ、週次が4つ、月次が6つ)になっていることが分かります。

$ ls -l tmp/ -rw-rw-r-- 1 user user 0 Sep 1 2019 2019-09-01.txt -rw-rw-r-- 1 user user 0 Oct 1 20:23 2019-10-01.txt -rw-rw-r-- 1 user user 0 Nov 1 20:23 2019-11-01.txt -rw-rw-r-- 1 user user 0 Dec 1 20:23 2019-12-01.txt -rw-rw-r-- 1 user user 0 Jan 1 20:23 2020-01-01.txt -rw-rw-r-- 1 user user 0 Feb 1 20:23 2020-02-01.txt -rw-rw-r-- 1 user user 0 Feb 9 20:23 2020-02-09.txt -rw-rw-r-- 1 user user 0 Feb 16 20:23 2020-02-16.txt -rw-rw-r-- 1 user user 0 Feb 23 20:23 2020-02-23.txt -rw-rw-r-- 1 user user 0 Mar 1 20:23 2020-03-01.txt -rw-rw-r-- 1 user user 0 Mar 2 20:23 2020-03-02.txt -rw-rw-r-- 1 user user 0 Mar 3 20:23 2020-03-03.txt -rw-rw-r-- 1 user user 0 Mar 4 20:23 2020-03-04.txt -rw-rw-r-- 1 user user 0 Mar 5 20:23 2020-03-05.txt -rw-rw-r-- 1 user user 0 Mar 6 20:23 2020-03-06.txt -rw-rw-r-- 1 user user 0 Mar 7 20:23 2020-03-07.txt -rw-rw-r-- 1 user user 0 Mar 8 20:23 2020-03-08.txt

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11590
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン