win-logo

前回に引き続き VeraCrypt ボリュームのマウントの方法を考えています
共有するパソコンでマウントするか、使う側のパソコンでマウントするかです

使う側でマウントするほうが扱いやすいのですが、不安も残ります
前回試したときは数 MB 程度の小さいボリュームでしたが、実際にやりたいものは大きいものだと数百 GB のサイズがあります
ネットワーク越しに共有された数百 GB のファイルを VeraCrypt ボリュームとしてマウントして、大きなボリュームファイルの中をシークして書き込みってどうなんでしょう・・・?
特にマウント中にネットワークの切断などのエラーが発生したらボリュームが壊れたりしないかが心配です
ボリュームの実体が存在する、共有するパソコンの方でマウントしてしまう方がやっぱり無難なのかも


前回問題視していた「Celeron で大丈夫?」問題も、当分はストレージサイズ的に HDD メインでしょうし、致命的にはならないと思うので良しとします
そうすると残る問題は・・・

◯ 必要なときにマウントするのが面倒
◯ 共有が面倒

現状だと普通に使ってるデスクトップパソコンで共有してるので、必要になったときにマウントするのは簡単です
ですが、ファイルサーバパソコンを用意するとなると、そのパソコンには基本ディスプレイは繋がないので RDP 接続してからそこでマウントという手順になります
さらにマウントしたフォルダを共有する設定も必要です

なんかもう面倒なのでずっとマウントしたままでいいようなと思い始めました・・・
全部マウントしてもさすがにドライブレター 26 個使ったりはしませんし
でもそれだとボリュームに分けた意味がなくなります


考えてると、この問題って Linux サーバにすると簡単に解決できそうに思いました
ssh コマンドに実行するコマンドを指定できますし、 VeraCrypt はコマンドからマウントもできたはずです
事前にコマンドを実行するショートカットを用意しておけば、実質ダブルクリックするだけでできるはず!
さらに、マウントポイントを共有フォルダの中にすれば共有が面倒という問題はなくなるはずです

試してないけどこんな感じかな

ssh root@file-server veracrypt -t /home/user/volume1 /opt/share/vol1

・・・だけど、小さめのパソコンだと自作は難しそうだし、既製品で買うと Windows が付いてるので使わないのももったいない気がします・・・
OS 入れ替えとかやるとサポートも切れそうですし

Windows でも ssh 接続でコマンド実行するみたいなことできないのかなーと調べると、 PowerShell がリモートコマンド実行できるみたいです
ですがサンプルコマンドをそのまま実行しても動きませんでした・・・
もう少し調べたら、 WinRM の有効化や TrustedHosts の追加とか色々事前準備が必要みたいでした
コマンド実行だし、フォルダ共有ほど簡単じゃないようですねー


とりあえず Windows でもマウントが面倒というところはリモートコマンド実行するための設定を頑張ればなんとかできそう?な気がします
となると残るはマウントポイント
Windows でもフォルダにマウントすることはできるのに、 VeraCrypt では絶対ドライブレターを使うみたいです
VeraCrypt はそのままに、 Windows のコマンドでドライブレターからアンマウントして、ドライブレターにマウントされていたボリュームをフォルダにマウントすることはできるみたいです
ですがこの方法は VeraCrypt 側から見るとマウントされてるはずのドライブレターにマウントされてないことになりますし、その状態でのアンマウント等の操作も不安です

なのでドライブレターはそのままにしておきます
26 個全部が埋まることはないと思いますし
その代わりに、共有してるフォルダからジャンクションとして G ドライブなどにリンクします
共有するフォルダの場合はシンボリックリンクだとうまく動かずジャンクションの必要があります

これでとりあえずは「共有する側でマウントする」で大丈夫そうです

シンボリックリンクとジャンクション

記事タイトルのメインの話はここからです
さらっと触れたジャンクションとシンボリックリンクについて、少し調べたのでまとめです

基本的なこと

Windows ではソフトリンクにジャンクションとシンボリックリンクがあります
どっちも NTFS ファイルシステムの機能です
なので FAT32 や exFAT でフォーマットすると使えないはず

シンボリックリンクのほうが後からできた新しい機能で、基本こっちのほうが高機能だからシンボリックリンクのみで良いと書いてるページも見かけます
実際にジャンクションはフォルダのみですが、シンボリックリンクはファイルにも使えます
また、ジャンクションは必ず絶対パスとして保存されます
共通の親フォルダの名前を変えたりフォルダを移動すると無効なリンクになります
シンボリックリンクは相対パスで指定できるので、相対パスの範囲が変わってないなら有効のままです

シンボリックリンクのデメリットは管理者ユーザの権限が必要というくらいだと思います
お仕事で使うパソコンなど、管理者権限がないユーザだとジャンクションしか作れません
Windows10 のいつ頃からかは開発者機能を有効にしてれば一般ユーザでも作れるようになったはずですが、やっぱり特殊な設定が事前に必要になっています
ジャンクションがいいならシンボリックリンクも権限なしでいいと思うのですけどねー

ネットワーク通すと

で、ここからはあまり聞かない意外な違いです
Windows の機能でフォルダを共有します
そのフォルダの中にはジャンクションやシンボリックリンクを作り、そのリンク先は共有してるフォルダの外にあるフォルダにします
この共有フォルダに別のパソコンからアクセスしてリンクを開いたときに違いがあります

とりあえず例として⇩のようなフォルダを用意します

C:\Data
C:\Users\user1\Desktop\test

test フォルダの中に 2 種類のリンクを作ります
リンクは junction と symbolic という名前にします
それぞれがジャンクションとシンボリックリンクです
どちらも C:\Data フォルダへのリンクです

cd C:\Users\user1\Desktop\test
mklink /J junction C:\Data
mklink /D symbolic C:\Data

C:\Data に適当なファイルを入れて、 test フォルダのリンク経由で開いたときにそのファイルが見れるかを確認しておきます

そして、 test フォルダを共有します
test フォルダを共有するパソコンの名前を「desktop-pc1」とすると、
別のパソコンからエクスプローラで「\\desktop-pc1\test」を開きます

junction と symbolic というリンクが見えるのでそれぞれ開いてみます
結果は・・・

junction にアクセスすると、 desktop-pc1 の C:\Data のフォルダの中身が見れます
symbolic にアクセスすると、「開けませんでした」というエラーダイアログが出ます


また、 Linux でも test フォルダをマウントしてみます
Linux の場合でも同じでした
junction へのアクセスは desktop-pc1 の C:\Data のフォルダの中身が見れます
symbolic へのアクセスはエラーでした

ジャンクションは共有を行っている Windows 側(リモート)で解決してるみたいで、共有フォルダ外であってもリンク先が見れます
それに対して、シンボリックリンクの場合は共有フォルダを開いているパソコン側(ローカル)で解決しようとしてるみたいです
共有しているフォルダ内へのリンクなら見れて、フォルダ外なら正しく開けません
Linux では、リンク先に対応するパスにフォルダを作ると、そのローカルのフォルダが見れました
Windows の場合はローカルに C:\Data を作ってみてもローカルの C:\Data は開かれずエラーでした
リンク先のパスにフォルダがあったとしても、共有フォルダの外だと偶然リンク先のパスがあっただけで、意図しないものになってるのが普通でしょう
Windows の方が親切にチェックしてくれてるのかもしれません