📥

zpaqで始めるお手軽バックアップ

2021/03/22に公開

バックアップとってますか?

皆さん、バックアップ取ってますか?
日頃のメモや業務日誌などをhowmmemoで書いていると思います。
これ、何かの事故で消えたりすると被害甚大ですよね。
で、バックアップを取りましょう!
こんな方法もあるよっていう記事です。

zpaqって?

公式サイトはこちらです。
うたい文句は「zpaq is a free and open source incremental, journaling command-line archiver for Windows, Linux and Mac OS/X. 」です。
しかも、大量のテキスト系ファイルの圧縮率が最強[1]です。

普通の使い方

圧縮は下記のように-mオプションで圧縮率(0-5)を指定して、addで圧縮ファイル名と対象を指定します。
アーカイバなのでディレクトリとか指定できます。
今回はWindowsでやってみました。

PS C:\tmp\zpaq検証> dir

    ディレクトリ: C:\tmp\zpaq検証

Mode                 LastWriteTime         Length Name
d-----        2021/03/18      1:02                参考

PS C:\tmp\zpaq検証> dir .\参考\

    ディレクトリ: C:\tmp\zpaq検証\参考

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/03/18      1:02             51 1st.txt
-a----        2021/03/18      1:01             76 2nd.txt
-a----        2021/03/18      1:01             76 3rd.txt

PS C:\tmp\zpaq検証> zpaq -m4 add test.zpaq .\参考\*txt
zpaq v7.15 journaling archiver, compiled Aug 17 2016
Creating test.zpaq at offset 0 + 0
Adding 0.000203 MB in 3 files -method 46 -threads 2 at 2021-03-21 16:18:38.
+ ./参考/1st.txt 51
+ ./参考/2nd.txt 76
+ ./参考/3rd.txt 76 -> 0
[1..2] 143 -method 46,127,0
3 +added, 0 -removed.

0.000000 + (0.000203 -> 0.000127 -> 0.000959) = 0.000959 MB
0.031 seconds (all OK)
PS C:\tmp\zpaq検証> dir

    ディレクトリ: C:\tmp\zpaq検証

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2021/03/18      1:02                参考
-a----        2021/03/22      1:18            959 test.zpaq

PS C:\tmp\zpaq検証>

中身の確認はlistです。

PS C:\tmp\zpaq検証> zpaq list .\test.zpaq
zpaq v7.15 journaling archiver, compiled Aug 17 2016
./test.zpaq: 1 versions, 3 files, 2 fragments, 0.000959 MB

- 2021-03-17 16:02:30           51 A     ./参考/1st.txt
- 2021-03-17 16:01:19           76 A     ./参考/2nd.txt
- 2021-03-17 16:01:19           76 A     ./参考/3rd.txt

  -> 0.000959 MB compressed.
0.015 seconds (all OK)

展開はextractで出来ます。

PS C:\tmp\zpaq展開> zpaq extract ..\zpaq検証\test.zpaq
zpaq v7.15 journaling archiver, compiled Aug 17 2016
../zpaq検証/test.zpaq: 1 versions, 3 files, 2 fragments, 0.000959 MB
Extracting 0.000203 MB in 3 files -threads 2
[1..2] -> 143
> ./参考/1st.txt
> ./参考/2nd.txt
> ./参考/3rd.txt
0.016 seconds (all OK)
PS C:\tmp\zpaq展開> dir

    ディレクトリ: C:\tmp\zpaq展開

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2021/03/22      1:30                参考

PS C:\tmp\zpaq展開>

zpaqっぽい使い方

普通の使い方は普通のzipとかと大して変わりません。
zpaqがincremental, journalingであることを発揮するのは、バックアップ対象が更新された場合です。
上記の例でいうと参考/1st.txtを更新してから再度コマンドを実行してみます。

PS C:\tmp\zpaq検証> dir .\参考\

    ディレクトリ: C:\tmp\zpaq検証\参考

Mode                 LastWriteTime         Length Name
-a----        2021/03/22      1:35            920 1st.txt
-a----        2021/03/18      1:01             76 2nd.txt
-a----        2021/03/18      1:01             76 3rd.txt

PS C:\tmp\zpaq検証> zpaq -m4 add test.zpaq .\参考\*txt
zpaq v7.15 journaling archiver, compiled Aug 17 2016
test.zpaq: 1 versions, 3 files, 2 fragments, 0.000959 MB
Updating test.zpaq at offset 959 + 0
Adding 0.000920 MB in 1 files -method 46 -threads 2 at 2021-03-21 16:36:35.
# ./参考/1st.txt 920
[3..3] 932 -method 46,205,0
1 +added, 0 -removed.

0.000959 + (0.000920 -> 0.000920 -> 0.000907) = 0.001866 MB
0.031 seconds (all OK)
PS C:\tmp\zpaq検証>

なんと更新されたファイルだけを圧縮しているではないですか!
中身がどうなっているか確認します。-allオプションを指定します。

PS C:\tmp\zpaq検証> zpaq -all list .\test.zpaq
zpaq v7.15 journaling archiver, compiled Aug 17 2016
./test.zpaq: 2 versions, 4 files, 3 fragments, 0.001866 MB

- 2021-03-21 16:18:38          203       0001/ +3 -0 -> 959
- 2021-03-17 16:02:30           51 A     0001/./参考/1st.txt
- 2021-03-17 16:01:19           76 A     0001/./参考/2nd.txt
- 2021-03-17 16:01:19           76 A     0001/./参考/3rd.txt
- 2021-03-21 16:36:35          920       0002/ +1 -0 -> 907
- 2021-03-21 16:35:39          920 A     0002/./参考/1st.txt

0.001123 MB of 0.001123 MB (6 files) shown
  -> 0.001047 MB (4 refs to 3 of 3 frags) after dedupe
  -> 0.001866 MB compressed.
0.031 seconds (all OK)
PS C:\tmp\zpaq検証>

なんと0001とか0002とか勝手について、区別できるんです。
このファイルをそのまま展開すると最新版が展開されます。つまり上記の表現でいうと下記ファイルが展開されます。

  • 0001/./参考/2nd.txt
  • 0001/./参考/3rd.txt
  • 0002/./参考/1st.txt

メモは更新することもあると思います。更新後、やっぱり過去のメモが見たくなった場合zpaqは力を発揮します。
-allオプションを付けてextractすればいいんです。

PS C:\tmp\zpaq展開> zpaq -all extract ..\zpaq検証\test.zpaq
zpaq v7.15 journaling archiver, compiled Aug 17 2016
../zpaq検証/test.zpaq: 2 versions, 4 files, 3 fragments, 0.001866 MB
Extracting 0.001123 MB in 4 files -threads 2
[1..2] -> 143
[3..3] -> 932
> 0001/./参考/1st.txt
> 0001/./参考/2nd.txt
> 0001/./参考/3rd.txt
> 0002/./参考/1st.txt
0.015 seconds (all OK)

展開後はこんなツリー構造です。

PS C:\tmp\zpaq展開> tree /a /f
フォルダー パスの一覧:  ボリューム Windows
ボリューム シリアル番号は 243D-0FDD です
C:.
+---0001
|   \---参考
|           1st.txt
|           2nd.txt
|           3rd.txt
|
\---0002
    \---参考
            1st.txt

あとは時刻起動でバックアップ

いかがでしたか?
今回はファイルサイズが小さく圧縮率のすごさは全く分からないと思いますが、zpaqの使い方は判ったかと思います。
あとはzpaqファイル自体を本体外へ定期的にバックアップすることを忘れないでください。

なんでこんなこと書いたか

メモを上書きして暫くたってから、あ、上書き前のファイルみたい!と思ったんですが、バックアップのzipは既に上書き後[2]だったんです…。
バックアップを取ってるのに無力!と感じて色々考えたり探したりしました。
で、辿り着いたのがzpaqです。
もちろんバックアップファイルの世代管理とかやりようは、いくらでもありますがzpaqは何も考えずいつも同じバックアップコマンドを実行すればいいというのが手軽でいいです。

脚注
  1. 個人的な感想ですが、時間はかなりかかりますがびっくりするくらい小さくなります。他の圧縮形式と比較しましたがテキストファイルを対象とした場合最強でした。 ↩︎

  2. 5日、15日、25日というように世代管理していたので1か月たったら上書きでつぶされました…。まあ、そんな過去の要らないでしょって思った過去の俺殴りたい。 ↩︎

Discussion