fetburner.core

コアダンプ

Synology DS920+を使って外付け光学ドライブをネットワークに共有する

 光学ディスクの重要性が低下し、巷で売られているPCに読み取り用のドライブが標準搭載されなくなって久しくなりましたが、それでもCDの類を読み込みたくなる機会は度々訪れます。今ほどダウンロード販売が盛んではなかった頃に買ったソフトウェアのインストーラ、PCに付属のリカバリーディスク、昔ハマったアニメのBDなど、日常的に使う訳ではないけど一応読み込みの手段は残しておきたい光学ディスクも多いでしょう。

 内蔵式のドライブをめっきり見なくなった今、光学ディスクの読み出し手段を確保しようと思えばUSB等で接続される外付けドライブに頼る事になると思うのですが、PCを複数持っている場合は接続を切り替えるのが面倒だし、この光学ドライブと言う奴は結構電力を食うせいで接続できるポートが限られるので困ったものです。適当なポートに外付けドライブを接続しておいて、ネットワークからアクセスできれば良いのにと思うのは自然な発想でしょう。

 Windowsにはネットワーク経由でファイルを共有する機能が標準で備わっていますから、適当なマシンに外付けドライブの光学ドライブを接続し、ネットワークからアクセスできるようにするのは難しくありません。しかし、適当なWindowsマシンを常に起動しておくのも消費電力が気になるところですから、サーバーとして常時稼働する事を前提としたマシン、例えばNASなんかを使いたい気持ちになります。

 本記事では、我が家で使っているSynology社のNAS、DS920+に接続した外付け光学ドライブをネットワークで共有し、ローカルネットワーク上の他のマシンから見られるようにした際の手順を紹介します。実機で検証はしていませんが、Synology Virtual Machine Managerをサポートしている同社のNASであれば同様の手段で光学ドライブを共有できるものと思われます。

基本的なアイデア

 ASUSTOR社製品のように外付け光学ドライブの読み書きをサポートしたNASも世の中にはあるのですが、残念ながら現在Synology社のNASは公式にサポートしていないようです。実際、外付け光学ドライブをDS920+に接続してみても特に認識されている様子はありませんでした。

kb.synology.com

 しかし、Synology社のNASはSynology Virtual Machine Managerと呼ばれる仮想化機能を提供していますから、適切なドライバーを持ったOSを仮想マシンにインストールし、そちらで光学ドライブをネットワークに共有してしまおうと言うのが基本的なアイデアです。

www.synology.com

仮想マシンのセットアップ

 それでは、適当なOSをNAS上の仮想マシンにインストールしていきましょう。ここでインストールするOSは外付け光学ドライブのドライバーを持っていて、普段使いしているPCとファイルの共有ができれば何でも良いのですが、わざわざWindowsのライセンスを買うのも勿体ないのでUbuntu Server 22.04.1 LTS(記事執筆時点での最新版)を使いました。

 Virtual Machine Managerで作成したマシンにUbuntu Serverをインストールする記事はありふれている(僕は [解決済] Synology VMM の仮想マシンで、 Ubuntu Server 22.04 LTS のインストールが止まる | Mulong.me と同じ個所でハマりましたが)ので具体的手順については割愛しますが、USBで接続した外付けの光学ドライブ仮想マシン上のUbuntuに認識させるためには、少し設定を弄る必要があるので説明しておきましょう。

仮想マシンの編集」から「その他」を選択し、 仮想USBコントローラーをUSB 3.0で有効化します。 この状態で、予め接続しておいた外付け光学ドライブを「USBデバイス」に選択すると、仮想マシン上のUbuntuから見られるようになります。

 僕の環境では、外付けの光学ドライブ/dev/sr2として見えていました。「仮想マシンの編集」画面には「ブートアップ用のISOファイル」と「追加のISOファイル」の設定項目が存在しますから、恐らく/dev/sr0/dev/sr1にはそれらが鎮座しているのでしょう。

光学ドライブの共有

 仮想マシンUbuntuをインストールし、外付けの光学ドライブを認識できる状態にしてしまえば、あとはUbuntuでファイルサーバーを構築する際と同様の手順で光学ドライブを共有できます。一般に、Linuxマシン上のディレクトリをネットワーク経由でWindowsマシン等に公開する際にはSambaが用いられるように、適当にそれをセットアップするだけです。

2022年10月7日追記: Sambaで光学ドライブを共有しているとクライアントのPC側でディスクの取り出しができなくて不便なのでiSCSIによる共有も試したのですが、本記事の構成ではiSCSI接続が途中で切れてしまう問題に遭遇しました。代わりにラズパイ4でiSCSIターゲットを作成した際には特に問題が起きなかったので、Synology Virtual Machine Manager上の仮想マシンiSCSIを使う際には何かしらの制限があるのかもしれません。

 Sambaを使って適当なディレクトリをネットワークからアクセスできるよう設定する記事はありふれているので具体的手順については割愛しますが、光学ドライブのマウント方法については少し苦戦したのでここで解説しておきます。(もっと良い方法があれば教えて下さい)

 Sambaの設定ファイル、smb.confにはpostexecなるオプションが存在しており、ドキュメント曰くサービスから切断した際に実行するコマンドを指定できるそうですから、これと対応するpreexecを用いれば光学ドライブのマウントを自動化できるように見えます。例えば、以下のようにsmb.confを設定すれば良いと思うのではないでしょうか?

[dvdrom]
  comment = DVD-ROM
  path = /mnt/dvdrom
  guest ok = yes
  browseable = yes
# マウントに失敗した場合、たぶん光学ディスクが入っていないので接続を切る
  root preexec close = yes
  root preexec = mount /dev/sr2 /mnt/dvdrom
  root postexec = umount /mnt/dvdrom

www.samba.gr.jp

ところがこのような設定で使っていたところ、光学ドライブがマウントされた状態で誤ってディスクを取り出してしまった場合に、動作が不安定になってしまいました。どうやら光学ドライブのアンマウントに失敗して/dev/sr2がマウントされたままになってしまい、次に接続した際にマウントに失敗して preexec close のオプションに従って切断されてしまうようです。

 そこで今回はautofsを使って光学ドライブをマウントし、Sambaがアクセスしなくなった場合に自動的にアンマウントもするようにしました。この方法であれば、マウントもアンマウントも二重に試みられる事は無いでしょう。ついでにDVD-ROMのような読み取り専用デバイスを想定してロック関連を適切に設定するとしたら、以下のようなsmb.confになるでしょうか。

[dvdrom]
  comment = DVD-ROM
  path = /misc/dvdrom
  locking = no
  deadtime = 1
  guest ok = yes
  read only = yes
  browseable = yes
  fake oplocks = yes

ここでデットタイムを1分に設定していますが、これはWindowsマシンが起動している限りこの共有ドライブへの接続を保持しようとしてしまい、光学ドライブがマウントされたままになってディスクを取り出せなくなってしまう事への対策です。smb.confのドキュメントにもある通り、多くのクライアントは自動的に再接続してくれるので実用上の問題はありません。

まとめ

 本記事では、我が家で使っているSynology社のNAS、DS920+に接続した外付け光学ドライブをネットワークで共有し、ローカルネットワーク上の他のマシンから見られるようにした際の手順を紹介しました。実機で検証はしていませんが、Synology Virtual Machine Managerをサポートしている同社のNASであれば同様の手段で光学ドライブを共有できるものと思われます。

 公式ではサポートされていない事をしたので試行錯誤の連続でしたが、Synology Virtual Machine Managerでは仮想マシンのスナップショットをカジュアルに撮ったり復元できたりするので比較的楽に環境を構築できました。ラズベリーパイ辺りをNASにして遊ぶのも良いですが、NAS専用機も中々遊べて良いですね。