Ubuntu Weekly Recipe

第703回NASをNextcloud化する

今回はNAS専用機の使用をやめ、NextcloudをNASとして使用する手順を紹介します。

筆者のNAS事情

第593回で紹介したように、筆者はこれまでSynology DiskStation DS118をNASサーバーとして使用していました。購入したのは2019年3月で、ほぼ3年前です。

あまり深く考えずそのへんに転がっていたNAS向けの3TB HDDを接続して、おおむね問題なく使用していましたが、使い込むにつれ空き領域が半分程度になりました。またメインPCに接続されているHDDにある、あまり使わないデータをそこに移すと空き容量が足りなくなることもわかりました。HDDの交換が容易にいかないのはシングルドライブモデルのデメリットです。昨年末にOSのDSMを7.0にバージョンアップすると、mDNSによる名前解決もSambaによる共有フォルダーの表示もできなくなり、IPアドレスでDSMの管理画面にログインして各サービスを再起動する必要がある状態になっていたのも引っかかっていました[1]⁠。

そもそも以前よりWindowsのファイル共有プロトコルそのものを含めてSambaには疑問がありました。プロトコルによるバージョンがあって特にWindowsからアクセスできたりできなかったりすることがあり、かつ脆弱性の修正もそれなりにあって[2]メンテナンスもわりと面倒です。もちろんNASなのでそのあたりはよしなにやってくれるのですが。

前々からファイルサーバーもNextcloudにしたらどうだろうと考えていたので、これを機に実行することとしました。ただ、自宅には常時稼働のPCが何台かあり、かつ使用していないNAS用6TB HDD[3]があったのでできることではあります。この自宅にあるPCについてはうぶんちゅ! まがじん ざっぱ〜ん♪ vol.12第2章で詳しく紹介しているのでそちらを参照してほしいのですが、NAS的に考えた場合はUbuntuがインストールされているストレージ(NVMe SSD)は250GBしかなく、とてもNASのデータドライブとしては使えないという点がポイントでした。幸いPCケースには3.5インチベイが空いていたので、6TB HDDを増設してNextcloudのデータドライブとして使用したわけです。

ここで問題になってくるのは、NextcloudサーバーはもちろんSnapパッケージ版であり、接続してマウントしておしまいというわけにはいかないところです。調べてみるとChange data directory to use another disk partitionというドキュメントを発見し、まさにやりたいことが記述されていました。

今回はPCを使用しましたが、Raspberry Piとデータ用外付けHDDのような組み合わせでも応用できるでしょう。なおデータを置くHDDはNAS用のものを選択するようにしましょう[4]⁠。

Nextcloudサーバーのインストールと設定

前置きが長くなりましたが、実作業に入ります。前述のとおりSnapパッケージ版Nextcloudサーバーをインストールしますが、今までにNextcloudサーバーを動作させていないことと、ストレージの接続とマウントは済ませていることを前提とします。Snapパッケージの制限でHDDは/media/以下にマウントしている必要があります。今回は/media/nasdrive/としました。

端末から次のコマンドを実行してください。

$ sudo snap install nextcloud
$ sudo snap connect nextcloud:removable-media
$ sudo mkdir /media/nasdrive/data
$ sudo chown -R root:root /media/nasdrive/
$ sudo chmod 0770 /media/nasdrive/data

1行目でNextcloudサーバーをインストールし、2行目で/media/以下にマウントされているストレージを認識するように設定を変更しています。3行目で実際にデータを置くフォルダーを作成し、4行目と5行目でパーミッションを変更しています。

Snapパッケージ版Nextcloudサーバーの設定ファイルは/var/snap/nextcloud/current/nextcloud/config/config.phpにあります。データ置き場のフォルダーは'datadirectory'で定義されているので、この変数を今回の例では"/media/nasdrive/data"に変更します。具体的には次のようになります。

'datadirectory' => '/media/nasdrive/data',

続けてsudo snap restart nextcloud.php-fpmを実行し、NextcloudのPHPサーバー部分だけを再起動します。

その後にWebブラウザーからNextcloudサーバーにアクセスして初期設定します。もしもうまく行っていない場合はこの段階でエラーが表示されるので、修正してください。ポイントとしては、フォルダーのパーミッションがrootになっている必要があるという点です。前述のコマンドをそのまま実行していれば問題ないはずではあります。

データ移行

Nextcloudサーバーの設定自体は簡単ですが、時間と手間がかかったのはデータの移行です。

もちろんデータ移行がないならそれに越したことはないのですが、今回はNASと、メインPCに接続されているHDDにあるあまり使わないデータで合計2TBくらいあります。普通に考えれば「ファイル(Nautilus⁠⁠」でちまちまと移動していくことになりますが、⁠ファイル」⁠正確にはバックエンドのgvfs)のWebDAVによるファイル転送はすごく遅く、安定しているともいいがたいので必然的に避けることになりました。肌感覚として2桁GBくらいまでならなんとかなるのですが、もう2桁足りない感じです。

次に考慮すべきはNextcloudクライアントを使用することですが、実データの分(今回は約2TB)だけNextcloudクライアントが動作しているOSでの空き容量が必要となります。もちろんそんなにあるはずがないので必然的に却下となります。

現実的な時間で移行するためにNextcloudでどうにかすることはあきらめ、/media/nasdrive以下にdataとは別のフォルダーを作成し、そこにrsyncでコピーすることにしました。これが最も高速で確実な方法であるように思います[5]⁠。

すでにお気づきかもしれませんが、今回はNASからのデータ移行があるということです。幸いDS118は設定を変更すればSSHでのログインができ、またrsyncコマンドもあるので移行に支障はありませんでした。リモートによるログインに対応していないNASを使用している場合は、もうひと工夫必要になるでしょう[6]⁠。

具体的には/media/nasdrive/ds118フォルダーを作成し、ユーザー権限で書き込めるようにします。rsyncコマンドでコピーし、1日か2日かくらいで完了したら、次のコマンドを実行してフォルダーを移動します。なおユーザー名はikuyaとしていますので、適宜変更してください。

$ sudo -i
# cd /media/nasdrive/
# mv ds118/ data/ikuya/files
# chown root:root -R data/ikuya/files/ds118/

もう一箇所からもrsyncでコピーしてきていますが、考え方は全く同じなので説明は省略します。

Nextcloudの管理外でフォルダーをコピーすると、実際のファイル構成とNextcloudサーバーがキャッシュしている内容とで食い違いが発生します。そのような場合には、次のコマンドを実行してキャッシュを再作成します。

$ sudo nextcloud.occ files:scan --path /media/nasdrive/data/ikuya/files/ds118 --verbose

外部ストレージ

Nextcloudには外部ストレージという機能があり、さまざまな方式のストレージをマウントできます[7]⁠。ほかのNextcloudサーバーのアカウントすらもマウントできます。そこで、メインで使用しているNextcloudサーバーを登録しておくと便利かなと思って試してみました。たしかにオンラインアカウントの設定が1回で済むので便利ではあるのですが、ただでさえ遅いのがさらに遅くなり、現実的かといわれるとやや首を傾げてしまいます。

Ubuntuからのアクセス

Ubuntuからのアクセスは前述のとおりNextcloudクライアントは使用せず、オンラインアカウント機能を使用することにします図1⁠。詳しくは第682回にて解説しています。簡単な設定で以後ユーザー名やパスワードの入力が必要ないというのは本当に便利です。特に筆者の場合は実PC、仮想PCともに多いのでメリットが大きいです。

図1 オンラインアカウントの設定は3つだけで簡単
図1

Windowsからのアクセス

本連載の趣旨からは外れるものの、利便性を考えてWindowsではどうすればいいのかを少し説明します。要するにWebDAVに対応していればどのようなアプリケーションでもいいのですが、Cyberduckがお勧めです。

Nextcloudサーバーにログインし、⁠ファイル」を表示して「設定」をクリックすると、WebDAVのURLが記載されています。これをコピーし、Cyberduckを起動して「新規接続」で必要な設定をして「接続」をクリックするとアクセスできます図2⁠。手元で試したところ、WinSCPではアクセスできませんでしたが、環境による差も考えられます。

図2 Cyberduckの設定
図2

おすすめ記事

記事・ニュース一覧