インストール - TimeShift
概要
Timeshiftは、システムレベルのバックアップに最適なオープンソースのバックアップおよび復元ソフトウェアである。
Windowsのシステムの復元やMacOSのTime Machineのような機能を提供する。
Rsyncコマンドとハードリンクを使用して、増分アプローチでスナップショットを取得する。
Timeshiftを使用することにより、例えば、何かをインストールしてシステムが破損した場合やアップデートに失敗した場合に、迅速かつ安全に以前の状態にロールバックできる。
ただし、システムファイルや設定のみをバックアップするように設計されているため、ホームディレクトリに存在するデータをバックアップする場合は、
別途、Deja Dup、Rsnapshot、Restic、Rsyncを使用する。
初期設定では、ドキュメント、ピクチャ、ミュージック等のホームディレクトリにあるファイルはバックアップから除外される。
そのため、システムを以前の状態に復元する際に、ユーザデータは変更されないことに注意する。
Timeshiftの主な機能は、以下の通りである。
- CLIおよびGUIでの動作
- BTRFSファイルシステムのサポート
- 複数のバックアップレベル(例. 毎時、毎日、毎週、毎月、ブート時)
- Cronによるスケジュールバックアップ
- オンラインおよびオフラインでの復元
- クロスディストリビューション・リストアのサポート
TimeShiftは、現在、Linux Mintプロジェクトによって管理されている。
課題追跡の未解決の項目で関連性のあるものは、新しいリポジトリに問い合わせること。
また、TimeshiftのソースコードはLinux MintのGitHubで入手できる。
旧リポジトリにはTimeShiftのオリジナルのソースコードが含まれており、重複を避けるためにアーカイブされている。
TimeShiftのインストール
SLEおよびopenSUSEの公式リポジトリにはTimeShiftが存在しないため、有志が作成しているリポジトリを利用する必要がある。
または、リポジトリを利用せずに、RPMファイルを展開して任意のディレクトリに配置することでもTimeShiftが使用できる。
リポジトリを追加してインストール
- SUSEのソフトウェアセンターにアクセスして、SLE向けを選択して、x86_64のRPMファイルをダウンロードする。
- ダウンロードしたRPMファイルをインストールする。
sudo zypper install ./timeshift-*.rpm
RPMファイルを展開して任意のディレクトリにインストール
- SUSEのソフトウェアセンターにアクセスして、SLE向けを選択して、x86_64のRPMファイルをダウンロードする。
- ダウンロードしたRPMファイルを展開する。
rpm2cpio timeshift-*.rpm | cpio -id
- 展開したファイルを、任意のディレクトリに配置する。
cp -r timeshift-* <TimeShiftのインストールディレクトリ>
ソースコードからインストール
- ビルドに必要なライブラリをインストールする。
sudo zypper install gtk3-devel vala libvala-0_54-0 libvala-0_54-devel libgee-devel vte-devel json-glib-devel libxapp-devel help2man
- TimeShiftのGithubにアクセスして、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf timeshift-master.<Linux Mintのフレーバ名>.tar.gz
cd timeshift-master.<Linux Mintのフレーバ名>
- TimeShiftをビルドおよびインストールする。
meson setup ./build -Dprefix=<TimeShiftのインストールディレクトリ>
ninja -C ./build
ninja -C ./build install
TimeShiftの実行に必要なライブラリをインストールする。
sudo zypper install libxapp1
任意のディレクトリにインストールする場合
もし、TimeShiftを任意のディレクトリにインストールした場合、設定ファイルおよびPolKitアクションファイルを手動で作成する必要がある。
まず、TimeShiftの実行スクリプトを編集する。
sudo vi /<TimeShiftのインストールディレクトリ>/bin/timeshift-launcher
# /<TimeShiftのインストールディレクトリ>/bin/timeshift-launcherファイル
# 編集前
app_command='timeshift-gtk'
# 編集後
# use -f to make the readlink path absolute
dirname="$(dirname -- "$(readlink -f -- "${0}")" )"
if [ "$dirname" = "." ]; then
dirname="$PWD/$dirname"
fi
export LANG="ja_JP.utf8"
export TEXTDOMAIN="timeshift"
export TEXTDOMAINDIR="$dirname/../share/locale"
export XDG_DATA_DIRS="$dirname/../share:$XDG_DATA_DIRS"
app_command="$dirname/timeshift-gtk"
#app_command='timeshift-gtk'
次に、TimeShiftの設定ファイルを作成する。
sudo mkdir -p /etc/timeshift/default.json sudo vi /etc/timeshift/default.json
# /etc/timeshift/default.jsonファイル
{
"backup_device_uuid" : "",
"parent_device_uuid" : "",
"do_first_run" : "true",
"btrfs_mode" : "false",
"include_btrfs_home" : "false",
"stop_cron_emails" : "true",
"schedule_monthly" : "false",
"schedule_weekly" : "false",
"schedule_daily" : "false",
"schedule_hourly" : "false",
"schedule_boot" : "false",
"count_monthly" : "2",
"count_weekly" : "3",
"count_daily" : "5",
"count_hourly" : "6",
"count_boot" : "5",
"snapshot_size" : "0",
"snapshot_count" : "0",
"exclude" : [
],
"exclude-apps" : [
]
}
次に、PolKitアクションファイルを作成する。
sudo vi /usr/share/polkit-1/actions/in.teejeetech.pkexec.timeshift.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<vendor>Tony George</vendor>
<vendor_url>https://github.com/teejee2008</vendor_url>
<action id="in.teejeetech.pkexec.timeshift-gtk">
<message gettext-domain="timeshift">Authentication is required to run Timeshift as Administrator</message>
<description>Run Timeshift as Administrator</description>
<icon_name>timeshift</icon_name>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/<TimeShiftのインストールディレクトリ>/bin/timeshift-gtk</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
<action id="in.teejeetech.pkexec.timeshift">
<message gettext-domain="timeshift">Authentication is required to run Timeshift as Administrator</message>
<description>Run Timeshift as Administrator</description>
<icon_name>timeshift</icon_name>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/<TimeShiftのインストールディレクトリ>/bin/timeshift</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
もし、TimeShiftをローカライズする場合は、moファイルを/usr/share/locale/<国名>/LC_MESSAGESディレクトリに保存する。
sudo cp /<TimeShiftのインストールディレクトリ>/share/locale/<国名>/LC_MESSAGES/timeshift.mo \ /usr/share/locale/<国名>/LC_MESSAGES
最後に、TimeShiftのデスクトップエントリファイルを作成する。
vi ~/.local/share/applications/timeshift-gtk.desktop
# ~/.local/share/applications/timeshift-gtk.desktopファイル
[Desktop Entry]
Type=Application
Name=Timeshift
GenericName=System Restore Utility
GenericName[ja]=システムの復元ユーティリティ
Comment=System Restore Utility
Comment[ja]=システムの復元ユーティリティ
Exec=/<TimeShiftのインストールディレクトリ>/bin/timeshift-launcher
Icon=/<TimeShiftのインストールディレクトリ>/share/icons/hicolor/128x128/apps/timeshift.png
Categories=System;
MimeType=
Terminal=false
X-KDE-StartupNotify=false
X-GNOME-UsesNotifications=true
任意のディレクトリにインストールしたTimeShiftのアンインストール
TimeShiftをアンインストールする場合は、以下に従う。
cd <TimeShiftのソースコードがあるディレクトリ> sudo make uninstall
残存する不要なファイルを削除する。
rm -r ~/.local/share/applications/timeshift-gtk.desktop sudo rm -r /etc/timeshift sudo rm -r /usr/share/polkit-1/actions/in.teejeetech.pkexec.timeshift.policy find /usr/share/locale -type f -name "timeshift.mo" | sudo xargs rm
TimeShiftの日本語化
- SUSEのソフトウェアセンターにアクセスして、Leap向けを選択して、x86_64のRPMファイルをダウンロードする。
TimeShiftのバージョンが異なる場合でも、ほとんどが日本語化される。 - ダウンロードしたRPMファイルを展開する。
rpm2cpio timeshift-*.rpm | cpio -id
- 展開したファイルにあるusr/share/locale/ja/LC_MESSAGES/timeshift.moファイルを、/usr/share/locale/ja/LC_MESSAGESディレクトリにコピーする。
cd timeshift-*/usr/share/locale/ja/LC_MESSAGES
sudo cp -r timeshift.mo /usr/share/locale/ja/LC_MESSAGES
- TimeShiftを起動して、日本語化されているかどうかを確認する。
TimeShiftの使用方法
バックアップ方式は以下の2通りから選択できる。
- BtrFS (B-Tree File System)
- Rsync
Rsync
rsyncコマンドにより、バックアップ先にファイルをコピーする方式である。
事前にコピー先のファイル名やタイムスタンプ等を確認して、更新があるファイルのみコピーするため、2度目以降のバックアップが特に高速である。
バックアップの世代管理には、--link-dest
オプションを使用している。
--link-destオプションを付加することにより、以下のような動作となる。
- 前回のバックアップから更新の無いファイルは、前回のバックアップファイルからのハードリンクを生成する。
- 前回のバックアップから更新のあるファイルは、バックアップ元からコピーを生成する。
ハードリンクは、ファイルの実体(inode)を共有した複数のファイルを作成するという特性を持つ。
そのため、ハードリンクによる差分バックアップは、以下の強力なメリットがある。
- ハードリンクの作成はディスク容量をほとんど消費しない。
- ハードリンクの作成は非常に高速である。
- 世代間に依存関係がないため、各世代は順不同で高速に削除できる。
- ハードリンクは基本機能であるため、不具合が発生する懸念は少ない。
rsyncコマンドはハードリンクの仕組みを利用していることから、ファイルシステム自体がハードリンクに対応している必要がある。
ほとんどの場合は問題無いが、sshfsはハードリンクに対応していないため注意すること。
BtrFS
BtrFSのスナップショット機能を使ってバックアップを取得する方式である。
BtrFSを使用するには、以下の条件が必須となる。
- バックアップ元がBtrFSを使用していることが前提である。
- その他、SubVolume構成にも条件がある。
TimeShiftの設定
Timeshiftは設定内容に応じて、/etc/cron.dディレクトリ下のファイルを編集するため、スーパユーザ権限が必要である。
したがって、GUIからの起動時には、sudoコマンドと同様にパスワードを求められる。
この制御は、Polkit(/usr/share/polkit-1/actions/in.teejeetech.pkexec.timeshift.policy)で実装されている。
Polkitとは、特権が必要な操作を非特権プロセスから実行するための仕組みであり、sudoコマンドと似たような役割を持つ。
TimeShiftのメイン画面から、[設定]メニューバーまたは[ウィザード]メニューバーを選択する。
なお、Timeshiftの設定が反映されるタイミングは、Timeshiftを終了した時となることに注意すること。