xserver をオンラインストレージとして使う

(2025-09-14)

NAS はとても便利なものですが所詮は個人で管理しており、火事やら災害で損傷する可能性があります。

サーバー上に置いておけば、おそらくバックアップも完璧で相当安全なはずです。無くなるということはまずないでしょう。

そこで、xserver をオンラインストレージとして使えないかと考えました。

ローカル環境は linux mint 22.1 です。

xserver の容量は 500 GB

xserver のスタンダードプランの容量は 500 GB あります。

現在、そのうちの 130 GB 程度を使用しているようです。
調べてみると必要のないファイルがいっぱいあります。使わないのはもったいないという発想で、バックアップ用にどんどんコピーしたんでしょう。

そこで、必要のないファイルをほとんど削除しました。

44 GB まで減らすことができました。これでも多い気がしますが、このブログの動画は最近ではブログ以外の xserver 上に置いてリンクしているので少し容量があります。

残りのうちの少なくとも 400 GB くらいは使えるので、自宅のアルバムは十分に入ります。

xserver のプレミアムプランにすると 600 GB まで使えますが費用がぐっと上がります。スタンダードプランの 500 GB がコスパが最もいいと思います。

ドキュメントも xserver と同期

現在、ドキュメントは synology drive を利用してローカルのマシーンと自宅の NAS で同期しており、このようにするとファイルを持ち歩くことがないので紛失したりするリスクがなくとても便利です。

でも、やはり NAS 上にあるので災害などでダメージを受ける可能性があり、やはり xserver 上に同期ファイルを作成することにしました。

chatGPT に頼んだのですが、フリーを使用しているせいかちょっといい加減でかなり時間を要しました。

xserver に Storage ディレクトリを作成

まず、xserver のホームディレクトリ(ssh でログインした場所)に ~/Storage/documents を作成します。

lsyncd のインストール

lsyncd (Live Syncing Daemon) は inotify を使い、裏で rsync を走らせる専用ツールで、ほぼリアルタイムで同期してくれます。

sudo apt install lsyncd

lsyncd.conf.lua の設定

sudo mkdir -p /etc/lsyncd
sudo nano /etc/lsyncd/lsyncd.conf.lua

lsyncd.conf.lua を編集します。

settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd-status.log",
nodaemon = false,
}
sync {
default.rsync,
source = "/home/user/ドキュメント",
target = "moheno@sv12345.xserver.jp:/home/moheno/Storage/documents",
rsync = {
archive = true,
compress = true,
verbose = true,
_extra = {"-e", "ssh -i /home/user/.ssh/moheno.key -p 10022"}
}
}

lsyncd.service の設定

lsyncd.service を作成します。

sudo nano /etc/systemd/system/lsyncd.service

編集します。

[Unit]
Description=Live Syncing Daemon
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/bin/lsyncd /etc/lsyncd/lsyncd.conf.lua
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target

ログの作成

/var/log/lsyncd ディレクトリを作ります。

sudo mkdir -p /var/log/lsyncd

ユーザーに書き込み権限を付与。

sudo chown user:user /var/log/lsyncd
sudo chmod 755 /var/log/lsyncd

起動

systemd に認識させます。

sudo systemctl daemon-reload
sudo systemctl enable --now lsyncd

これで起動時に自動でリアルタイム同期が開始されます。

状態の確認。

sudo systemctl status lsyncd
lsyncd.service - Live Syncing Daemon
Loaded: loaded (/etc/systemd/system/lsyncd.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-09-13 09:59:49 JST; 1h 8min ago
Process: 1724 ExecStart=/usr/bin/lsyncd /etc/lsyncd/lsyncd.conf.lua (code=exited, status=0/SUCCESS)
Main PID: 1727 (lsyncd)
Tasks: 1 (limit: 38108)
Memory: 61.6M (peak: 65.7M)
CPU: 506ms
CGroup: /system.slice/lsyncd.service
└─1727 /usr/bin/lsyncd /etc/lsyncd/lsyncd.conf.lua
9月 13 09:59:49 user-Vostro-3681 systemd[1]: Starting lsyncd.service - Live Syncing Daemon...
9月 13 09:59:49 user-Vostro-3681 lsyncd[1724]: 09:59:49 Normal: --- Startup, daemonizing ---
9月 13 09:59:49 user-Vostro-3681 systemd[1]: Started lsyncd.service - Live Syncing Daemon.

これで、ローカルのドキュメントと xserver の Storage/documents がリアルタイムで同期するようになります。

NAS から xserver へアルバムファイルを rsync

現在、これと逆のことはすでにできているのでこれは簡単です。

xserver の空きは 450 GB ありますが、我が家のアルバムは 80 GB くらいで、この先そんなに増えることはないと思います。容量としては十分に余裕があります。

以下のようなシェルスクリプトを作成しました。

#!/bin/sh
logdir="/volume1/backup/album_rsync/logs"
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
/volume1/web/ourAlbum \
moheno@sv12345.xserver.jp:~/Storage \
>> "$logdir/album_rsync_$(date +%Y%m%d%H%M%S).log" 2>&1
# ==========================
# 古いログを削除(30日より前のもの)
# ==========================
find "$logdir" -type f -name "album_rsync_*.log" -mtime +30 -exec rm -f {} \;

そして、cron に設定します。

48 11 * * * heno /volume1/backup/album_rsync/album_rsync.sh

これで 1 日 1 回、NAS と xserver が rsync します。
初回は時間がかかりますが、次からは差分だけをアップするのでそんなに時間はかからないはずです。

video や music も

アルバムを全部アップロードしてもまだまだ容量が余っていたので、video や music もアップロードしました。

それでも、まだ 200 GB 以上余っています。アルバムはもう少しだけ増えると思いますが、200 GB すべてを使い切ることはないと思います。

ところで、セキュリティはどうなんだろうとふと思いました。
xserver はかなり強烈なパスワードに設定してあるので正面突破は無理だと思います。しかも、ホームディレクトリの直下にディレクトリを作成してそこへ rsync しています。

public_html の下に置くとネットから簡単にアクセスできてしまいますが、その外に配置してあるので安全なはずです。

でも、アップされたファイルを確認したところ、chmod が 777 になっていました。

chatGPT に質問したところ、シェルスクリプトを以下のようにするように言われました。

Terminal window
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
--chmod=Du=rwx,go=,Fu=rw,go= \
/volume1/web/ourAlbum \
moheno@sv12345.xserver.jp:~/Storage \
>> "$logdir/album_rsync_$(date +%Y%m%d%H%M%S).log" 2>&1

このようにすると chmod が 600 になります。
普通に考えてアクセスは無理だと思います。有名人でもない人間のアルバムなんてそもそも要らないと思いますが。

これで安心して枕を高くして眠れます。

rsync では双方向完全同期ができない

いろいろやってみたのですが、rsync では双方向完全同期ができず、synology NAS の Drive のような便利さはありません。

今回、ドキュメントを synology NAS じゃなくて xserver に持っていったのは synology NAS では自宅の火災や災害によって NAS が損傷するとドキュメントが破壊されるからでした。

これまでは 3 台のコンピュータが NAS をハブとして同期していました。

基本は NAS をハブとして使い、1 日 1 回程度 NAS から xserver に rsync すれば、被災して NAS が破壊されても 1 日前までは戻れます。

NAS に以下のようなシェルスクリプトを作成して 1 日 1 回実行します。

Terminal window
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
--chmod=Du=rwx,go=,Fu=rw,go= \
--exclude='@eaDir/' \
/volume1/documents \
moheno@sv12345.xserver.jp:~/Storage \
>> "/volume1/archive/shell/log/documents_rsync_$(date +%Y%m%d%H%M%S).log" 2>&1

これで上図のようなシステムが完成され、災害時でも少なくとも 1 日前のドキュメントは残ると思います。

ssh ログインできない時の moheno.key のパーミッション設定

自宅にいない時には、自宅の NAS に ssh ログインできません。なので、chmod 600 にするのは少し面倒です。

以下のようなシェルスクリプトを作ってタスクスケジューラに設定して実行すれば OK です。

Terminal window
chmod 600 /var/services/homes/heno/.ssh/moheno.key

ドキュメントだけじゃなくてユーザーのディレクトリ全体をバックアップ

この astroblog は ドキュメントの外にあります。

すべてをドキュメントの中に入れてもいいのでしょうが、別宅では iPhone のテザリング環境なので容量の制限がありドキュメントは 2 - 3 GB 程度に抑えるようにしていました。

でも、ドキュメントだけではなくて他のディレクトリも synology drive で同期して、さらに xserver へも rsync すると鉄壁です。

drive の設定画面で、同期するファイル・ディレクトリを選択することができます。

動画を NAS へ

astroblog は静止画は assets の中に入れてますが、動画は最近では astroblog 以外のディレクトリを作成してそこにアップしてリンクするようにしています。 そうしないと、動画がどんどん溜まってきてパンクすることになります。
wordpress が巨大化したのはそういう理由だったと思います。

このようにすると、astroblog の容量は 800 MB 以下であり今後もあまり増えないと思います。

動画はレンタルサーバーのユーザーディレクトリの public_html 内に jstree を作り、その中にアップロードするようにしています。
このようにすると、jstree 全体をそのままダウンロードするとローカルでも簡単に素早くコンテンツを閲覧できます。

xserver が災害で壊れてファイルが無くなるなんてことはまず考えられませんが、気分的にバックアップをとりたいと思います。

NAS に共有フォルダを作成します。

例によってシェルスクリプトを作成します。

#!/bin/sh
logdir="/volume1/moheno_jstree/logs"
rsync -avzu \
-e 'ssh -p 10022 -i ~/.ssh/moheno.key' \
--delete \
--checksum \
moheno@sv12345.xserver.jp:~/moheno.xsrv.jp/public_html/jstree \
/volume1/moheno_jstree \
>> "$logdir/rsync_moheno_jstree_$(date +%Y%m%d%H%M%S).log" 2>&1
# ==========================
# 古いログを削除(30日より前のもの)
# ==========================
find "$logdir" -type f -name "rsync_*.log" -mtime +30 -exec rm -f {} \;