UGREENのNASを使っていて、UbuntuなどのLinuxの機械とファイルを共有したいと思ったことはありませんか。

私はあります。そして調べてみると、UGREENのNASアプリにはLinux版がありません。WindowsとMac、スマホ向けはあるのに、Linuxだけ用意されていないのです(UGREEN公式のダウンロードページ)。

なので、NASの中で動かしているUbuntuとNASの共有フォルダを、unison(ユニゾン)というソフトで2分おきに同期する仕組みを組みました。正確に言うと、AI(Claude Code)に組んでもらいました。私はLinuxの専門家ではありません。

白状すると、この記事を書くために聞かれるまで、同期していることを忘れていました。それくらい、何もしなくても勝手に動いています。

この記事では、その設定と、途中でつまずいたところを書きます。「純正アプリがないから、Linuxとの同期はあきらめた」という人の参考になればと思います。

何のために同期しているのか:AIとのファイル受け渡し口

最初に、この同期を何に使っているかを書いておきます。ここが分かると、設定の意味も分かりやすくなるはずです。

うちでは、NASの中にUbuntuを入れて、そこでAIに作業をしてもらっています(詳しくはAIの作業を「NASの中」にまとめたら、スマホからでも続きができるようになったに書きました)。

同期しているフォルダは、私ではなく、AIのためのフォルダです。私が自分で開くことはほとんどありません。使うのは、AIとファイルを渡し合うときだけです。

  • 私からAIへ:LINEで送った写真が、このフォルダに届きます。AIはそれを見て作業します
  • AIから私へ:AIが作ったPDFやExcelがこのフォルダにできます。私はMacのNASアプリから受け取ります
MacのUGREEN NASアプリで「共有フォルダ › ubuntu › sync」を開いた画面(一部のフォルダ名は消しています)
MacのUGREEN NASアプリで「共有フォルダ › ubuntu › sync」を開いた画面(一部のフォルダ名は消しています)

NASアプリで開くと、こんなふうに見えます。AIの作業メモやリサーチの結果など、いつの間にか22個のフォルダとファイルが入っていました。

Ubuntuの中のファイルは、本来はNASアプリから見えません。同期してNASの共有フォルダに写しておくから、Macやスマホから受け取れる、というわけです。

全体の形:NASの「棚」を、Ubuntuの部屋に引き出しとしてつなぐ

たとえで説明します。

  • NASの共有フォルダは、家族みんなが使える大きな棚です。MacやスマホのNASアプリからも見えます
  • Ubuntuは、AIが作業している別の部屋です。この部屋の中は、NASアプリからは見えません

そこで、棚をUbuntuの部屋に引き出しとしてつなぎ、部屋の机(AIが使うフォルダ)と引き出しの中身を2分おきにそろえるようにしました。

UGREEN NAS
 ├─ 棚:共有フォルダ「ubuntu」の中の sync   ← Mac・スマホから見える
 │        ▲
 │        │ 2分おきに中身をそろえる(unison)
 │        ▼
 └─ 部屋:Ubuntu の ~/nas-sync              ← AIが使う机

「そろえる」は、片方にファイルが増えたらもう片方にも増やし、片方で消したらもう片方でも消す、という意味です。これを双方向同期と呼びます。

組み方:5つの手順

ここからは、Ubuntuの「端末」(黒い画面)に文字を打っていきます。$ で始まる行が、打つ文字です($ そのものは打ちません)。

sudo が付いた命令は、パスワードを聞かれます。Ubuntuにログインするときのパスワードを入れてください。

手順1:道具を2つ入れる

$ sudo apt install cifs-utils unison
  • cifs-utils:NASの棚につなぐための道具
  • unison:中身をそろえるための道具

「続行しますか? [Y/n]」と聞かれたら y を押して Enter です。

手順2:NASの合言葉を、別の紙に書いておく

NASにつなぐには、NASのユーザー名とパスワードが要ります。これを専用のファイルに書いておきます。

$ sudo nano /etc/samba/nas_credentials

メモ帳のような画面が開くので、次の2行を書きます(自分のNASのユーザー名とパスワードに置き換えてください)。

username=NASのユーザー名
password=NASのパスワード

Ctrl + O → Enter で保存、Ctrl + X で閉じます。

最後に、このファイルを自分(管理者)しか読めないようにします。

$ sudo chmod 600 /etc/samba/nas_credentials

パスワードが書いてある紙を、机の上に出しっぱなしにしないための作業です。

手順3:引き出しの「場所」を作って、つなぐ

まず、引き出しを置く場所(空のフォルダ)を作ります。

$ sudo mkdir -p /mnt/nas

次に、「Ubuntuを起動したら、毎回この棚をつなぐ」という設定を書きます。

$ sudo nano /etc/fstab

いちばん下に、この1行を足します。

//NASのアドレス/共有フォルダ名 /mnt/nas cifs credentials=/etc/samba/nas_credentials,iocharset=utf8,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,_netdev 0 0

置き換えるのは先頭の2か所だけです。うちの場合、「NASのアドレス」にはTailscaleのアドレス(100. で始まる数字)を、「共有フォルダ名」には ubuntu を入れています。家の中だけで使うなら、NASのふだんのアドレス(192.168. で始まる数字など)でも大丈夫です。

後ろの長い部分は、ほぼそのまま写して大丈夫です。意味が大事なのは3つです。

  • credentials=:「合言葉は手順2の紙を見てね」という意味
  • _netdev:「ネットワークの準備ができてから、つなぎに行ってね」という意味。これが無いと、Ubuntuの起動直後にTailscaleより先につなぎに行って失敗します。Tailscaleの記事で「別の記事にします」と書いたのは、この話でした。ただ、これは「Tailscaleがつながり終わるまで必ず待つ」という約束ではありません。うちはこれで起動時に失敗しなくなりましたが、もし起動直後だけつながらないときは、少し待ってから sudo mount -a を打ち直してください
  • uid=1000,gid=1000:「引き出しの中身は自分のものにしてね」という意味。1000 は自分の番号です。id -u と打って 1000 と出れば、そのままで大丈夫です。違う数字が出たら、その数字に書きかえてください

保存して閉じたら、試しにつないでみます。

$ sudo mount -a
$ findmnt /mnt/nas

/mnt/nas の行に、自分のNASのアドレスと共有フォルダ名が出てきたら、成功です。念のため ls /mnt/nas と打って、NASアプリで見えるのと同じフォルダ名が出るかも見ておくと安心です。

手順4:そろえ方のルールを書く(ここが一番大事)

unisonに「どこと、どこを、どうそろえるか」を教えるファイルを作ります。

$ mkdir -p ~/nas-sync ~/.unison
$ nano ~/.unison/nas-sync.prf

中身はこうです(ユーザー名 は自分のものに)。

root = /home/ユーザー名/nas-sync
root = /mnt/nas/sync

perms = 0
dontchmod = true
links = false

auto = true
batch = true

上の2行は「この2つをそろえてね」という指定です。

真ん中の3行が、この記事でいちばん伝えたいところです。これが無いと、同期はエラーで止まります。うちも最初は動きませんでした。

理由をたとえで言います。Linuxのファイルには、中身とは別に「だれが書きかえていいか」という札が1枚ずつ付いています。ところがNASの棚に入れたファイルには、この札を1枚ずつ付けられません。全部まとめて同じ札になります(手順3の file_mode=0664 がそれです)。

unisonはまじめなので、札もそろえようとします。でも棚の側では札を付け替えられないので、そろえられずに止まってしまうのです。

なので、「札はそろえなくていいよ」と教えます。

  • perms = 0:札(権限)はそろえなくていい
  • dontchmod = true:札を付け替えようとすること自体をやめる
  • links = false:ショートカット(「シンボリックリンク」)はそろえない。棚の側では扱えず、エラーになります

下の2行は「いちいち私に確認しないで、自動で進めてね」という指定です。自動で動かすには必要です。

手順5:1回、手で動かしてみる

$ unison nas-sync

エラーが出ずに終わったら成功です。

試しに、~/nas-sync に何かファイルを1つ置いてから、もう一度 unison nas-sync を打ってみてください。MacやスマホのNASアプリで「共有フォルダ › ubuntu › sync」を開いて、そのファイルが見えたら、つながっています。

ここまでは「打ったときだけそろう」状態です。2分おきに自動でそろえる方法は、次の見出しで書きます。

2分おきに、自動でそろえる

手で打つのは続きません。なので、Ubuntuに「2分ごとに unison nas-sync を打っておいて」と頼んでおきます。これには systemd(システムディー)のタイマーを使います。目覚まし時計のようなものです。

ファイルを2つ作ります。1つは「何をするか」、もう1つは「いつするか」です。

手順6:「何をするか」のファイルを作る

$ mkdir -p ~/.config/systemd/user
$ nano ~/.config/systemd/user/nas-sync.service

中身はこうです。

[Unit]
Description=nas-sync
ConditionPathIsMountPoint=/mnt/nas

[Service]
Type=oneshot
ExecStart=/usr/bin/unison nas-sync -batch
TimeoutStartSec=240

大事なのは2行です。

  • ExecStart=:やること。手順5で手で打ったのと同じ命令です
  • TimeoutStartSec=240:NASの調子が悪くて終わらないときは、4分であきらめる。固まったままにしないための保険です

ConditionPathIsMountPoint= の行は、あとの「消えるリスクを減らす設定」で説明します。

手順7:「いつするか」のファイルを作る

$ nano ~/.config/systemd/user/nas-sync.timer
[Unit]
Description=nas-sync every 2 minutes

[Timer]
OnCalendar=*:0/2
AccuracySec=10s
Persistent=true

[Install]
WantedBy=timers.target
  • OnCalendar=*:0/2:「毎時0分から、2分おきに」という意味です。0分、2分、4分……と鳴ります
  • AccuracySec=10s:鳴る時間のずれの「許容幅」を10秒にする。何も書かないと、省エネのために1分くらいずらして鳴らすことがあります(必ず10秒以内に収まる、という約束ではありません)
  • Persistent=true:Ubuntuを止めていた間に鳴らなかった分を、起動したあとに1回だけ取り戻す

手順8:目覚ましをオンにする

$ systemctl --user daemon-reload
$ systemctl --user enable --now nas-sync.timer

1行目は「新しいファイルを作ったよ」とUbuntuに知らせる命令、2行目は「目覚ましをオンにして、今からスタート」という命令です。

もう1つ、これも打っておきます。

$ sudo loginctl enable-linger ユーザー名

これが無いと、自分がUbuntuにログインしている間しか目覚ましが鳴りません。AIに任せて放っておく使い方なら、必ず入れておいてください。

最後に、ちゃんと動いているか確かめます。

$ systemctl --user list-timers

nas-sync.timer の行の NEXT(次に鳴る時刻)に時刻が入っていれば、目覚ましはセットされています。うちは時刻が日本時間ではなく世界標準時(UTC)で出ますが、9時間ずれているだけなので気にしなくて大丈夫です。

ただ、これで分かるのは「目覚ましが鳴る予定」までです。そろえる作業がうまくいったかは、記録を見て確かめます。

$ journalctl --user -u nas-sync -n 20

最後のほうに Nothing to do: replicas have not changed since last sync.(前回から何も変わっていない)や、ファイルを送った記録が出ていて、エラーが無ければ大丈夫です。

消えるリスクを減らす設定:2つ

双方向同期で、いちばん怖いのはファイルが消えることです。うちで入れている設定を2つ書きます。先に言っておくと、どちらも「リスクを減らす」もので、消えないことを約束するものではありません。

NASが止まっている間は、そろえない

手順6の ConditionPathIsMountPoint=/mnt/nas がこれです。

NASが再起動中などで止まっていると、Ubuntu側の引き出し(/mnt/nas)は空っぽのフォルダに見えます。この状態でそろえると、unisonが「棚の中身が全部消えた」と勘違いして、机の側のファイルまで消しにかかるおそれがあります。

この1行は、「引き出しがつながっているときだけ動いてね」という意味です。つながっていない間は、そろえる作業をまるごと飛ばしてくれます。

ただし、見ているのは「つながっているかどうか」だけです。つながってはいるけれど通信が不安定、といった状態までは見分けられません。

両方で書き換えたら、両方残す

Macで直したファイルと、AIが直したファイルが、同じ2分の間にぶつかることがあります。どちらを残すかは、手順4のファイルに2行足して決めます。

prefer = newer
copyonconflict = true
  • prefer = newer:ぶつかったら、新しいほうを残す
  • copyonconflict = true:負けたほうも、名前を変えて残しておく

1行目だけだと、負けたほうは消えてしまいます。2行目を足すと、あとから両方を見比べて決められます。この2行はセットで入れておくのがおすすめです。

ただ、2行目が残してくれるのは「ぶつかったとき」の負けたほうだけです。ふつうに消したファイルは、もう片方からもそのまま消えます。同期はバックアップではないので、なくしたら困るファイルは、別の場所にもバックアップを取っておいてください。

つまずいたこと

設定ファイルの「メモ書き」で動かなくなった

設定ファイルには、# で始まるメモを書いておけます。ところが、unisonの設定ファイルでは行の途中にメモを書くと動きません。

perms = 0   # 権限はそろえない   ← これは動かない

こう書くと、unisonは # から後ろまで全部を「設定の中身」として読んでしまい、エラーになります。メモは必ず行の頭から書きます。

# 権限はそろえない
perms = 0

うちはこれで一度、同期が動かなくなりました。

気づかないうちに、自動の同期が止まっていた

最初、手順7の「いつするか」は OnCalendar ではなく、「前回が終わってから2分後」という書き方(OnUnitActiveSec)にしていました。

ところが、これだと次の目覚ましがセットされないまま止まることがありました。手順6の Type=oneshot(1回やったら終わり)と組み合わせると、「前回が終わった時刻」の扱いがうまく噛み合わなかったようです。エラーも出ないので、止まっていることにしばらく気づきませんでした。

そこで、「毎時0分から2分おき」という、時計の時刻で決まる書き方(OnCalendar=*:0/2)に変えました。前回がどう終わったかに関係なく、次の時刻が必ずセットされます。2026年8月に変えてから、止まったことはありません。

手順8の list-timers で、NEXT の欄が空っぽや n/a になっていたら、この状態を疑ってください。

分かっていないこと

正直に書いておきます。

1つ目。この記事を書くために、unisonの公式マニュアルと設定を突き合わせたら、うちの設定に意味のない1行が入っていました。

times = false

最初は「NASの棚はファイルの更新時刻をうまく扱えないから、そろえないようにする設定」だと思っていました。でも公式マニュアルを読むと、この設定はもともとオフです。書いても書かなくても同じでした。なので、この記事の手順からは外しています。

2つ目。公式マニュアルには、「新しいほうを残す」という指定(-force newer)を使うときは、更新時刻をそろえる設定(times)をオンにすること、と書いてあります。うちの prefer = newer もよく似た指定ですが、times はオフのままです。

prefer = newer のほうにはそういう注意書きがないので、このままでいいのか、本当に新しいほうを選べているのかは、確かめていません。今のところ困ったことはありません。ぶつかったときは copyonconflict = true でコピーが作られるので、どちらかが残るはずだと考えています。ただ、どちらが「勝つ」かは思いどおりにならないかもしれません。大事なファイルを両方で同時に書き換える使い方をするなら、気をつけてください。

まとめ

  • UGREENのNASアプリにはLinux版がない。なので、Ubuntuとの同期は unison と systemd のタイマーで自分で組んだ
  • 同期が止まるときは、まず設定ファイルにこの3行を足してみる
perms = 0
dontchmod = true
links = false
  • 自動で動かすなら、時刻は OnCalendar=*:0/2 で決める。ログインしなくても動くように enable-linger も忘れずに
  • 消えるリスクを減らす設定は、「NASがつながっていなかったら飛ばす」と「ぶつかったら両方残す」の2つ。ただし同期はバックアップではないので、大事なファイルは別にバックアップを取る

うちでは、このフォルダがAIとのファイルの受け渡し口になっています。LINEで送った写真がAIに届き、AIが作ったPDFやExcelを、私はMacのNASアプリで受け取るだけです。同期していることを忘れるくらい、勝手に動いてくれています。

AIの作業場所をNASの中に作った話はAIの作業を「NASの中」にまとめたら、スマホからでも続きができるようになったに、NASを外から使えるようにした話はNASを外から見る方法が分からなかった。純正のリモートアクセスをやめてTailscaleを入れるまでに書きました。ほかのNASの記事は自宅NAS・自宅サーバーまとめにまとめています。