バックアップを考える
最近、たまに画面の描画がおかしくなったりカメラが点滅したりする (2023/04/15)
突然システムやハードウェアが壊れると困る
dotfiles があるからバックアップしなくてもいいかーと思っていたけど、システムが壊れた時にすぐ元の環境に戻せないと辛い (授業や普段の作業が成り立たない) やりたいこと
ユーザデータはそのまま
paru -Syu の前にやれば良いから週 1 ~ 数回程度
短時間でさっと復旧できる方が良い
ユーザデータも欲しい
できれば毎日
容量が大きい
システムやカーネルのアップデートに不具合があり壊れた場合に備える オプションでいろいろ決められる
アプリケーションの設定ファイルの同期
最低限これだけあれば助かる
写真やドキュメント、課題ファイル、プログラム (ほぼ GitHub にある) ~/.aws は含めない
気づいていないけど何かに必要なファイルとかがあるかも?
約 260 GB の / は 1 時間 30 分くらいかかった
方針
btrfs send は特定のディレクトリを除外できないため、他の方法でファイルに送信しなければいけない (再帰的に処理されて無限ループにならない? btrfs subvolume snapshot は再帰的ではない)
1. システム (パッケージ) のアップデートで PC が起動しなくなる
2. PC 自体が燃えたり破壊されたりした時に新調した PC にシステムを復旧したい
3. 間違えてファイルを削除した時に復元したい
4. PC 自体が燃えたり破壊されたりした時に大事なデータを守りたい
頻度が週一か月一で良い (paru -Syu の前)
容量が節約できる
現段階 (2023/04/25) の結論
1 時間以内くらいで終わるが結構リソース食う
その後 paru -Syu
ブログに記事としてまとめた
追記 (2023/05/01)
どのくらいの頻度で取るか
何世代まで残すか
code:sh
thread 'main' panicked at 'Unable to create log dir "/home/hoku/.cache/starship": Os { code: 13, kind: PermissionDenied, message: "Permission denied" }!', src/logger.rs:31:35
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
sudo mount /dev/mapper/vg0-root -o subvol=/@home /home を実行してこの時 /home 以下を消し飛ばした 😢
今 (2023/05/20 17:17) 気づいたけど、これってアンマウントすれば解決しただけの話?
ファイルの誤消去
基本的に触らないファイルを突然間違えて消す
消したらすぐ気づくはず?
1 日 1 回以下で対応できる
課題やプロジェクトのファイルを触っていて間違えて消す
ファイルのライフサイクル
ファイル無し → ファイル作成 → ファイル編集 → ファイル消去
この作成と編集の間の期間は短い
編集のフェーズは短期間で繰り返す
消去した時から遡れるのが、ファイル作成前やファイル作成直後では意味がない
1 時間に 1 回あれば安心 (最悪の場合でも一時間の労力を取り返すだけ)
暫定案
頻度は 2 ~ 3 時間に一回
一週間分残っていれば良い
一日に 1 ~ 4 回取りそう (数日運用してみた感覚)
平均して 2.5 回とすると、 2.5 * 7 = 17.5
ちょい減らしても 15 世代分
ちょっと運用してみて、ストレージの点で支障があればまた考える 追記 (2023/05/21 15:42)
code:terminal
$ sudo btrfs subvolume list / -p
ID 380 gen 23982 parent 5 top level 5 path @home
ID 484 gen 23982 parent 5 top level 5 path @snapshots
ID 630 gen 23981 parent 484 top level 484 path @snapshots/root/2023-05-21_15-42-06
ID 631 gen 23982 parent 484 top level 484 path @snapshots/home/2023-05-21_15-42-09
code:bash
# take a snapshot
date=$(date "+%F_%H-%M-%S")
snapshot_dir="/snapshots/root"
snapshot_dir="/snapshots/home"
else
echo "invalid argument: first argument must be / or /home"
exit 1
fi
oldest_snapshot="$(ls -rt $snapshot_dir | tail -n1)"
btrfs subvolume delete $snapshot_dir/$oldest_snapshot
fi
echo "snapshot is already exist"
exit 1
else
btrfs subvolume snapshot -r $1 $snapshot_dir/$date
fi
使い方は sudo snapshot / や sudo snapshot /home
ルートディレクトリ / の tarball 生成に 50 分かかってファイルは約 14 GB になった