Relayium

Relayium CLI と SSH で自分のサーバーにファイルをバックアップする

最終更新: 2026-09-01

VPS、自宅サーバー、NAS、ワークステーションなど、すでに ssh でアクセスできるマシンがあれば、同期サービスやアカウントを用意しなくても Relayium CLI でそこへファイルをバックアップできます。転送は既存の SSH 接続の上で行われるため、バイトは直接自分のサーバーへ向かい、Relayium を通ることはありません。

本ガイドではディレクトリの push と pull、整合性チェックが何を保証し何を保証しないか、なぜ push は同じ宛先へ二度目を拒否するのか、そして cron でスケジュール実行する方法を扱います。

始める前に

以下はすべて relayium CLI なので、未インストールならまず入れてください。macOS または Linux では、1つのコマンドでビルド済みバイナリが PATH に入ります:

curl -fsSL https://relayium.com/install.sh | sh
  • 自分でファイルを選びたい、または Windows の場合は、リリースページからバイナリを取得してください——relayium.com/cli にすべてのインストール方法があります(Go があれば go build ./cmd/relayium も可)。
  • relayium --version でインストールを確認できます。これをしないと以下のコマンドは「command not found」と出るだけです。

ディレクトリをサーバーへ push する

必要なもの

  • すでに使っている SSH アクセス。ssh user@your-server true が黙って戻ることが条件です。push はまさにその接続を再利用し、独自の設定は何も持ちません。
  • サーバー側の書き込み可能な宛先。宛先パスの親ディレクトリが存在し、その SSH ユーザーが書き込めることが必要です。
  • 任意で、サーバー側の relayium。送信前の衝突チェックとファイル単位の SHA-256 はこれで得られます。なくても push は素の tar ストリームで動きますが、そちらは何も検証しません。
  • Relayium アカウントも、どちらの端のデーモンも不要です。ここでは Relayium のサーバーと通信するものは何もありません。

push は1つ以上のソースと scp 形式の宛先を受け取ります。Relayium はいつも使っている鍵と設定を使って SSH 経由で接続し、ファイルを宛先ディレクトリへストリーミングします:

  1. push が再利用する SSH アクセスを確認します。黙って戻れば、鍵もホストエイリアスもポートもすでに正しいということです。

    ssh user@your-server true
  2. どちらのプロトコルになるかを調べます。パスが表示されればネイティブプロトコル(送信前の衝突チェックとファイル単位の SHA-256)、何も出なければ tar ストリームの方で、こちらはファイル単位では何も検証しません。

    ssh user@your-server command -v relayium
  3. ディレクトリを push します。宛先は scp 形式で、末尾のスラッシュは「このディレクトリの中へ」を意味します。

    relayium push ./photos user@your-server:backups/
  4. ssh の設定にそのホストがまだ無い場合は、このコマンドに限って鍵やポートを指定します。

    relayium push -i ~/.ssh/id_ed25519 -p 2222 ./photos user@your-server:backups/
  5. 何が届いたかを確認します。push ./photos は宛先の下に photos/ を再現するので、フォルダー名もそのまま付いてきます。

    ssh user@your-server ls backups/photos

成功したときの表示

ネイティブプロトコルなら、push は完了したファイルごとに1行を表示して終了コード 0 で終わります。素のサーバー相手なら要約が1行出るだけで、それが tar フォールバックであり、これも成功です。

relayium push ./photos user@your-server:backups/
  photos/IMG_0413.jpg (2314518 bytes)
  photos/IMG_0414.jpg (1998233 bytes)

# against a server with no relayium installed, one summary line instead:
sent 2 file(s) (zero-dependency mode)
  • 既存の ~/.ssh/config を再利用するので、すでに設定済みのホストエイリアス、鍵、ポートがそのまま使えます。
  • サーバーに relayium がインストールされていれば、ネイティブプロトコルを使います。送信前にバッチ全体の衝突チェックを行い、転送する各ファイルを SHA-256 で検証してから設置します。
  • インストールされていない場合は、tar ストリームをリモートへパイプする方式にフォールバックするので、relayium のない素のサーバーでも動作します。

ファイルを pull で戻す

復元は同じコマンドを逆にするだけです。リモートのソースとローカルの宛先ディレクトリを指定します。これがバックアップを復元したり、サーバーの出力をノート PC に同期したりする方法です:

relayium pull user@your-server:backups/ ./restore
  • push と異なり、pull は常にリモートに relayium がすでにインストールされている必要があります。tar フォールバックがないため、なければ先にそちらへインストールしてください。

整合性は標準で備わっている——再開は備わっていない

relayium が両端にあれば、push が転送する各ファイルは SHA-256 ハッシュでエンドツーエンドに検証され、暫定領域に置かれてから設置されます。サーバーに届くものは送ったものとバイト単位で同一です。ここまでは本当で、宛先に relayium を入れる理由もそこにあります。

push がしないのは再開です。ファイルは通過した順に1つずつ設置されるため、途中で接続が切れると、すでに届いたファイルはそのまま残ります。そしてそれらが存在するせいで、同じ push をやり直しても衝突チェックに拒否されます。足りないパスを個別に push するか、すでに一致するものを飛ばし、半端なファイルを次回の実行で続けてくれる relayium sync を使ってください。

--no-resume は push と pull でも受け付けられますが、そこでは何もしません。実際に効くのは sync を受ける serve の待ち受け側です——半端なファイルが存在しうるのは、そもそもそこだけだからです。

  • push も pull も、どちらのプロトコルでも再開しません。中断されうるディレクトリには sync を使ってください。tar フォールバックは再開もせず、ファイル単位の検証もしません。
  • SHA-256 チェックは自動的に実行され、不一致があれば報告され、そのファイルは失敗としてフラグが立てられます。

cron でスケジュール実行する

cron に入れるのは push ではなく sync です。push は既存の宛先を拒否するので、同じディレクトリへ毎晩 push すると初回だけ成功し、以降は毎回拒否されます。sync は繰り返し実行のために作られたモードで、サイズと更新時刻が変わっていないファイルを飛ばし、変わった分だけを送り、中断された実行が残した半端なファイルを続けます。SSH 鍵を使う単一の非対話型コマンドなので、そのまま cron に入ります。パスフレーズなしの鍵(または agent)を指定し、出力をログに残して失敗を確認できるようにしましょう:

# 毎晩2時にバックアップ(crontab -e で crontab に追加)
0 2 * * * relayium sync -i ~/.ssh/backup_key ~/documents user@your-server:backups/ >> ~/relayium-backup.log 2>&1
  • 中断された夜間の sync は翌晩そのまま続きます。すでに一致するものは飛ばされ、半端なファイルはやり直しではなく続きから送られます。
  • いずれかのファイルが整合性チェックに失敗すると、コマンドは非ゼロで終了するので、cron の失敗時メール通知で問題に気づけます。

バックアップが届かないとき

スケジュール実行のバックアップは、その性質上ひっそりと失敗します。誰も端末を見ていないからです。次の4つでほぼ尽きますし、どれも今すぐ実行できるコマンドで判定できます。

症状・確認・対処

cron ジョブが固まる、またはログがパスワード入力待ちで終わっている。
ssh -i ~/.ssh/backup_key -o BatchMode=yes user@your-server true
# Permission denied (publickey).

BatchMode=yes は入力を求めずに失敗するので、無言のハングがこの1行に変わります。その鍵の公開鍵をサーバーの ~/.ssh/authorized_keys に追加するか、エージェントがすでに保持している鍵をジョブに指定してください。

crontab の行は動いているのにログが空のまま。
command -v relayium
# /usr/local/bin/relayium

cron は最小限の PATH で動き、たいてい /usr/local/bin を含みません。そのため relayium が起動する前に行が失敗します。いま確認した絶対パスを crontab のエントリーに書き、>> ~/relayium-backup.log 2>&1 のリダイレクトは残しておいて、次の失敗が見えるようにしてください。

中断された夜間の sync が、次の実行でゼロからやり直しになる。
ssh user@your-server command -v relayium
# (何も表示されない)

リモートに relayium が無いということです。sync にはフォールバックが無いのでそもそも動かず、push は何も検証しない tar ストリームに落ちて毎回ファイル全体を送り直します。サーバーに入れてください。半端なファイルを次回に続けるのは sync だけで、push と pull はどちらのプロトコルでも再開しません。すでに sync を使っているなら、その待ち受け側の再開を実際に切る --no-resume を渡していないかも確認してください。

「N file(s) could not be verified or saved」と表示され、終了コードが 0 以外になる。
relayium push ./photos user@your-server:backups/
# 1 file(s) could not be verified or saved: [photos/IMG_0413.jpg]
# exit status 1
echo $?
# 1

到着時に計算した SHA-256 が送信時のものと一致しなかったか、サーバー上の relayium がファイルを保存・設置できなかった(空き容量不足、権限がない、書き込めない保存先パスなど)かのどちらかで、このメッセージはどちらなのかを区別しません。1 行目はサーバー上の relayium が出力して SSH 経由で転送されたもので、続く exit status 1 はそのリモートプロセスの終了コードです。どちらの場合も、ネイティブプロトコルは各ファイルをいったん暫定領域に置き、ハッシュが一致して保存できたときだけ設置します。つまり今回の転送はそのパスを設置していません。ただし、それは保存先に何も無いことの証明にはなりません(その間に別のプログラムが作成した可能性があります)。このメッセージだけを理由に、受信側に既にあるファイルを削除しないでください。同じバッチの他のファイルがすでに設置されている場合は、バッチ全体をやり直すと衝突チェックに拒否されるので、そのパスだけを本来の保存先に向けて push し直してください。それでも繰り返し失敗するなら一度きりの転送エラーではありません。サーバー側の空き容量・権限・保存先パスを確認し、元ファイル(読み取り中に何かが書き込んでいないか)も調べてください。

よくある質問

ファイルは Relayium のサーバーを経由しますか?

いいえ。push と pull はすべて自分の SSH 接続の上で完結します。Relayium のサーバーは一切関与せず、アカウントも不要です。

サーバーに relayium のインストールは必要ですか?

方向によります。push の場合は任意です。リモートに relayium があればネイティブプロトコルが使え、送信前の衝突チェックと、転送するすべてのファイルに対する SHA-256 チェックが得られます。なければ push は SSH 上の tar ストリームにフォールバックし、それでも動作しますが、ファイル単位では何も検証しません。pull の場合は必須です。pull は常にリモート側の relayium を必要とし(tar フォールバックはありません)、先にリモートへインストールしておいてください。

どの SSH 鍵とポートを使うかはどう決まりますか?

ssh と同じように既存の ~/.ssh/config を読み込むため、ホストエイリアス、鍵、ポートは自動的に反映されます。コマンドごとに -i でアイデンティティファイル、-p でポートを指定して上書きすることもできます。

これは rsync より速いですか?

自分のサーバーへの push に関しては、SSH 経由の rsync とほぼ同等です。狙いは rsync に勝つことではなく、同じファイル単位の整合性チェックを備えたまま、クロスネットワーク転送やサーバー間転送もこなせる1つのツールを提供することです。

次のディレクトリを直接の方法でバックアップしましょう。自分の SSH 経由、ファイル単位の整合性チェック付きで無料です。

CLI を入手

続けて読む