惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Y
Y Combinator Blog
T
Tailwind CSS Blog
D
Docker
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
腾讯CDC
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
U
Unit 42
The Cloudflare Blog
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
爱范儿
爱范儿
Recent Announcements
Recent Announcements
博客园 - 聂微东
博客园 - 叶小钗
H
Help Net Security
MyScale Blog
MyScale Blog

东东's Blog

Memos: MacOS 下编译安装 Aseprite 脚本 日本关西系列|Day 2 京都的半日闲逛 美国Apple官网购买礼品卡订阅 ChatGPT Plus 北京・中关村森林公园(2026) 日本关西系列|Day 1 抵达临空城与大阪首日 Memos: 查询 Apple ID 注册时间 Memos: Ghostty 开箱即用配置 代码考古:用 gitcharts 挖掘 Git 仓库的演变轨迹 烹饪日记:香煎罗非鱼 Memos: 新时代程序员的顶级焦虑 Memos: 博客新增图文布局和轮播图效果支持 Memos: 最适合空气炸锅烤着吃的红薯品类 Memos: 记录「95分」好吃的‘小帅香菇面’ 妻子爷爷的‘朝鲜军功奖章’ Memos: 博客切换为 Shiki 代码高亮方案 Memos: 博客新增划线、重点及荧光笔效果支持 记录博客字体分包与字体子集化 Memos: 邻座吃饭的一家三口 人在囧途之哈囧 哈尔滨・乡村的冬季 查看香烟生产日期 哈尔滨・东北虎林园 Memos: 来自日本的 ndjp 提供免费的三级子域名 Memos: 刚听说 autojump, 真的好用 Memos: 体验 OpenCode + Superpowers + GPT 5.2 开发需求 Memos: 杰我睿爆雷 GoReleaser 自动发布 Go 镜像到 DockerHub & GitHub Release 初识 Volta & Corepack 前端版本管理工具 部署 Beszel 把 “小鸡们” 归拢起来 Memos: Claude Code in Action 中文版教程
Resticで重要なデータをバックアップする
2025-04-03 · via 东东's Blog

以前はかなり長い間、Cryptomatorを使ってコンテンツを管理していました。Cryptomatorの利点は、ローカルデータにアクセスするにもパスワードが必要なことです。暗号化されたコンテンツはNutstore、Dropboxなどの同期ドライブに置いておけば、ファイルを追加または変更するたびにリアルタイムでクラウドにアップロードできます。

保存するコンテンツが編集する必要のない増分ファイルで、主に追加・置換するだけなら、私はCryptomatorを試すことを強くお勧めします。電子スキャン、画像、スプレッドシートなどのリソースを保存するのに適しています。

しかし、macOSでObsidianなどのソフトウェアを使って知識ベースを管理し、頻繁に編集する必要がある場合、Cryptomatorで復号化した後のテキストファイルの編集は非常に不便です。問題を避けるために、プレーンテキストファイルを編集するときは、コピーして編集した後、元のファイルを置き換える必要がありました。これはかなり面倒です。

偶然、Resticについて知りました。ObsidianなどのノートソフトウェアのVaultを暗号化してバックアップし、クラウドドライブやS3などのクラウドプラットフォームにアップロードしたい場合、Resticが最適です。

クイックスタート

Resticのインストール

macOS

$ brew install restic

主要なオペレーティングシステムをサポートしています。詳細は:https://restic.readthedocs.io/en/latest/020_installation.html

ローカルリポジトリの初期化

リポジトリは簡単に言えば、暗号化されたファイルを保存するためのフォルダです。初期化プロセスでは、いくつかのメタデータが生成されます。

$ restic init --repo ~/Documents/NoteE2EE
enter password for new repository:
enter password again:
created restic repository 0a40262533 at /Users/xxxxx/Documents/NoteE2EE

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

パスワードを覚えておいてください。一度忘れると、暗号化されたデータを復号化する方法はなくなります。

データのバックアップ

コマンドを実行して、~/Noteフォルダを~/Documents/NoteE2EEリポジトリにバックアップします。

$ restic -r ~/Documents/NoteE2EE backup ~/Documents/Note

初回実行時には、バックアップされたファイルとディレクトリの数が表示され、「スナップショット」IDがエコーされます。

コマンドは複数回実行できます(実行するたびに新しいスナップショットが作成されます)。

増分バックアップなので、スナップショットが大量のスペースを占めることを心配する必要はありません。

以下のコマンドを使用して、リポジトリ内のスナップショットリストを表示できます。

$ restic -r ~/Documents/NoteE2EE snapshots

このリポジトリフォルダ「NoteE2EE」は暗号化されたコンテンツです。3-2-1原則に従って、ローカルディスク、外部ディスク、クラウドドライブに安全に保存でき、データ漏洩を心配する必要はありません。

バックアップコマンドパラメータの最適化

$ restic -r ~/Documents/NoteE2EE backup ~/Documents/Note \
    --pack-size 32 \
    --exclude="*.tmp" \
    --iexclude="*.LOG" \
    --limit-upload 1024 \
    --json

--pack-sizeパラメータを上手く使用すると、ターゲットファイルの数を効果的に制御でき、大きなファイルが多くの小さなファイルに分割されるのを防ぎます。履歴ファイルは影響を受けず、現在の増分バックアップにのみ影響します。

--limit-uploadに対応して、ダウンロード速度を制限するための--limit-downloadパラメータもあります。

Resticをベースに小さなツールを開発する場合は、--jsonパラメータが非常に重要です。

{"message_type":"status","percent_done":0,"total_files":29,"total_bytes":204482794}
{"message_type":"status","percent_done":0,"total_files":41,"total_bytes":333776710}
{"message_type":"status","percent_done":0,"total_files":41,"total_bytes":333776710}
{"message_type":"status","percent_done":0,"total_files":41,"total_bytes":333776710}
{"message_type":"status","percent_done":0,"total_files":41,"total_bytes":333776710}
{"message_type":"status","percent_done":0,"total_files":41,"total_bytes":333776710}
{"message_type":"status","percent_done":0,"total_files":41,"total_bytes":333776710}
{"message_type":"status","percent_done":0.2808864315308279,"total_files":41,"files_done":13,"total_bytes":333776710,"bytes_done":93753349}
{"message_type":"status","percent_done":1,"total_files":41,"files_done":41,"total_bytes":333776710,"bytes_done":333776710}
{"message_type":"summary","files_new":0,"files_changed":0,"files_unmodified":41,"dirs_new":0,"dirs_changed":2,"dirs_unmodified":8,"data_blobs":0,"tree_blobs":2,"data_added":756,"data_added_packed":608,"total_files_processed":41,"total_bytes_processed":333776710,"total_duration":5.552792709,"backup_start":"2025-04-02T18:30:04.949151+08:00","backup_end":"2025-04-02T18:30:10.501995+08:00","snapshot_id":"74e465ed71f7fb5b7abb562d4cb9d067f20d89a1a9f3ed4ed32a0bc73e8abab1"}

このデータに基づいて、進捗バーを作成したり、バックアップファイルのデータ量を表示したりできます。

その他のバックエンドストレージタイプ

restic init --repo ~/Documents/NoteE2EEコマンドを使用して、ローカルリポジトリを作成しました。

以下はS3互換ストレージの例です。

# 環境変数の設定
$ export AWS_ACCESS_KEY_ID=id7O9M0H****tXJ2romrN
$ export AWS_SECRET_ACCESS_KEY=bFA0dL0u********ndnxVcrwPh31u
$ export AWS_DEFAULT_REGION=cn-east-1

# リポジトリの初期化とバックアップ
$ restic -r s3:https://s3.bitiful.net/note-e2ee init
$ restic -r s3:https://s3.bitiful.net/note-e2ee --verbose backup ~/Documents/NoteE2EE

注意:AWS_DEFAULT_REGION環境変数が設定されていない場合、デフォルトとしてus-east-1が使用されます。

Amazon S3、Backblaze B2、Google Cloudなどの他のプラットフォームとストレージについては、以下のドキュメントを参照してください:https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html

スナップショット管理

最近のスナップショットを保持する

定期的にbackupを実行してバックアップすることがありますが、バックアップが多すぎると煩わしくなります。以下のコマンドを実行すると、最新の7つのスナップショットのみを保持できます。

$ restic -r [リポジトリパス] forget --keep-last 7 --prune

スナップショットのタグ

バックアップ時に複数のタグを指定できます(--tag "v1.0" --tag "daily")。

$ restic -r ~/Documents/NoteE2EE backup --tag "v1.0" ~/Documents/Note

既存のスナップショットのタグを変更することもできます。

# タグを追加
$ restic -r ~/Documents/NoteE2EE tag --add "important" 8c5c9d50

# タグを削除
$ restic -r ~/Documents/NoteE2EE tag --remove "important" 43547193

# 複数のタグを設定
$ restic -r ~/Documents/NoteE2EE tag --set "important,project2" a1ff1a78

注目すべきは、変更するたびにスナップショットIDが変わることです。

バックアップの整合性チェック

クラウドに保存されたバックアップは、ファイルが100%失われないことや損傷しないことを保証できません。checkコマンドを使用して検証できます。

$ restic -r ~/Documents/NoteE2EE check

04.jpg

ここで「損傷」をシミュレートしてみましょう。例えば、NoteE2EEディレクトリ内のdataディレクトリにあるファイルを見つけ、ファイル名を変更して、先頭にアンダースコアを追加し、ファイルの損傷/損失をシミュレートします。

checkコマンドを再度実行すると、リポジトリが異常であり、修復が必要であることが表示されます。これは予想通りです。

06.jpg

スナップショットを特定のディレクトリに復元する

既存のスナップショットを表示:

$ restic -r ~/Documents/NoteE2EE snapshots

特定のスナップショットをエクスポート:

$ restic -r ~/Documents/NoteE2EE restore 5fcd966f --target ~/Downloads/NoteRestore/

5fcd966fはスナップショットIDで、snapshotsコマンドで確認できます。また、NoteRestoreディレクトリが存在しない場合は自動的に作成されます。

リポジトリが大きく、特定のファイルやディレクトリのみをエクスポートしたい場合は、次のコマンドを使用します。

$ restic -r ~/Documents/NoteE2EE restore 5fcd966f --target ~/Downloads/NoteRestore/ --include Epub电子书

ここでの「--include Epub电子书」は、リポジトリのルートディレクトリにあるフォルダを指します。

「copy」を使用して「backup」の代わりに

暗号化されたリポジトリが1つしかない場合は、毎回backupを使用すれば問題ありません。しかし、3-2-1原則に従ってバックアップし、複数の暗号化リポジトリがある場合、異なるリポジトリに対して複数回backupを実行するのは効率的ではありません。

この場合、copyを使用する必要があります。これにより、データの厳密な一貫性が保証され、パフォーマンスも優れています。

$ restic init --repo ~/Documents/NoteE2EE-copy

$ restic -r ~/Documents/NoteE2EE-copy copy --from-repo ~/Documents/NoteE2EE

AIからの要約(私は良いと思います):

複数のResticリポジトリ間でデータを同期する必要がある場合、copyは常に最適な選択です—それはリポジトリ間のプロフェッショナルな「データ移動者」のように機能し、backupは元のデータの「コレクター」のようなものです。

Restic Browserを試してみる

コマンドライン操作が好きでない場合は、このオープンソースツールを試してみることができます:emuell/restic-browser

07.jpg

Rust + TypeScriptで開発され、サイズは数メガバイトしかなく、読み取り専用機能しかありません。「Browser」という名前が示すように、暗号化されたリポジトリを閲覧でき、スナップショット内のファイルを探すのに便利です。

Autoresticも必要かもしれません

ドキュメント:Autorestic クイックスタート

Autorestic is a wrapper around the amazing restic. While being amazing the restic cli can be a bit overwhelming and difficult to manage if you have many different location that you want to backup to multiple locations. This utility is aimed at making this easier 🙂

Autoresticは、優れたresticツールを基に開発されたラッパーです。resticコマンドラインツール自体は素晴らしいですが、複数の異なる場所からのバックアップデータを複数のストレージターゲットに同期する必要がある場合、その操作は複雑で管理が難しくなる可能性があります。このツールは、このプロセスを簡素化し、マルチターゲットバックアップ管理をより簡単で便利にすることを目的としています。

インストール

$ brew install autorestic

設定ファイル

以下の内容で設定ファイルを作成します:

version: 2
backends:
  note_primary:
    type: local
    path: "~/Documents/NoteE2EE"
    env:
      RESTIC_PASSWORD: "your-restic-vault-passowrd"
  note_backup:
    type: local
    path: "~/Documents/NoteE2EE-copy"
    env:
      RESTIC_PASSWORD: "your-restic-vault-passowrd"

locations:
  notes:
    from: "~/Documents/Note"
    to:
      - note_primary
      - note_backup
    options:
      forget:
        keep-last: 7

設定ファイルのパーミッションを変更(推奨):

$ chmod 600 ~/.autorestic.yml

LocationとBackend

Autoresticでは、Locationはバックアップのコンテンツとターゲット(from / to)を記述し、Backendはバックアップの宛先を定義します。

設定の検証

$ autorestic check

Everything is fine.

手動バックアップの実行

完全バックアップ:

$ autorestic backup -a

特定のLocationバックアップ:

$ autorestic backup -l notes

出力:

現在、このソリューションは私のニーズに完全に合っており、使いやすいです。しばらく使用した後、追加情報があれば更新します。

参考