🔖
Hyper-V環境のWindowsとLinux間でファイル共有する
Hyper-V環境を適用したWindowsとLinuxでファイル共有を行うためのメモ。
WindowsのIntelliJ IDEAを使ってソースコード編集をして、Linuxでビルドする環境を構築した。
どちらが共有ホストになるか

Hyper-V環境におけるWindowsとLinuxの共有方法には
- Windowsのファイル共有を設定してLinuxからcifsでマウントする(図の上)
- Linuxにsmbdを立ててWindowsからアクセスする(図の下)
がある。
最初は、設定が簡単な、Windowsを共有ホストにしたファイル共有をしていたが、下記の問題が発生した。
- シンボリックリンクが作れないため、npmのinstallでコケる
- mount時にmfsymlinksオプションをつけることで対処可能
 
- Windowsでのファイル更新にはinotifyが使えないため、IntelliJ IDEAで保存してもLive Reloadが動作しない
- 
ファイルシステムの違いのため対処不可
- ただしwebpack-dev-serverであれば、ポーリングで回避可能
 
 
- 
ファイルシステムの違いのため対処不可
- Linuxでのビルドなどが遅い、場合によっては20秒ほどかかることもある
- 実体がWindowsにあり、ビルドするたびにWindowsとのNetworkI/Oが走っているため
- NetworkI/Oの問題のため対処不可
 
そのため、Linuxを共有ホストにした方法に切り替えた。
手順が少し込み入ってるためメモを残しておく。
なお、Linuxを共有ホストにした方法にも欠点があり、
Linuxのファイル更新がWindowsで検知できるまでタイムラグが有るのだが、
運用上致命的ではなかったため、こちらの方法にした。
やること
- ネットワークアダプタの設定
- smbdの設定
- ポートの設定
- Windowsから参照する
ネットワークアダプタの設定
Hyper-V環境ではゲストのIPアドレスが固定できない問題があるため、
別途仮想スイッチを作成してもう一つセグメントをもう一つ作る必要がある。
下記のサイト通り設定すれば良い。
IPアドレスを下記のようにした。
- Windows 10
- 169.254.123.1
 
- Manjaro Linux
- 169.254.123.2
 
smbdの設定
Manjaro Linuxなら初期状態でsambaがインストールされているが、
confが設定されておらず起動できないため、有効化もされていない。
そのため、confを設定して起動できるようにする。
 true}
[global]
  workgroup = WORKGROUP
  server string = Samba Server
  security = user
  hosts allow = 169.254.123. 127.
 # 内部からのアクセスのみ許可
  interfaces = 169.254.0.0/16
  map to guest = Bad User
 # 不明なユーザはすべてゲスト扱いにする
  guest ok = yes
 # ゲストアクセスを許可
  guest only = yes
 # すべてのアクセスをゲストアクセスとする
  guest account = guestuser # ゲストのアカウントを指定する
  load printers = no
  log file = /usr/local/samba/var/log.%m
  max log size = 50
  dns proxy = no
  unix charset = UTF-8
  dos charset = CP932
  create mask = 777
 # ファイル作成時のパーミッション全許可
  directory mask = 777
 # ディレクトリ作成時のパーミッション全許可
  printing = bsd
[shared]
  # 共有する名前
  comment = Shared Directory
  path = /usr/local/samba/shared
 # 共有フォルダのパス
  browseable = yes
 # 検索可能
  writable = yes # 書き込みを許可
フォルダも作成する。
$ mkdir /usr/local/samba/var
$ mkdir /usr/local/samba/shared
ポートの設定
Windowsからアクセスできるようにするためにポートを開放する。
下記はufwでポート開放をするコマンド例。
$ sudo ufw allow 137/udp
$ sudo ufw allow 138/udp
$ sudo ufw allow 139/tcp
$ sudo ufw allow 445/tcp
``
### Windowsから参照する
smbd, nmbdを起動する。
```sh
sudo systemctl enable smb.service
sudo systemctl enable nmb.service
sudo systemctl start smb.service
sudo systemctl start nmb.servic 
Windowsからネットワークドライブの割当を行う。
下記のサイトの通り設定すれば良い。
フォルダは \\169.254.123.2\shared とする。

Discussion