WindowsとNFSとShift-JISと

443 Views

April 04, 25

スライド概要

WindowsからLinuxのファイルを操作する際にNFSv3とShift-JIS対応を行う実装について述べ、軽く性能計測も行った。

profile-image

長野県から湧いたITエンジニアのようなもの。生水。このアカウントで展開される主義主張は全て個人の見解です。SR400/ZD11S乗り。科甲'12/ISUCON6 1st student/ICTSC6 3rd/ISUCON13 132nd ActivityPub: @fono@ma.fono.jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

と と Windows NFS Shift-JIS と ふぉの (@fono@ma.fono.jp) 於: 第8回 FediLUG 勉強会・東海道らぐ 2025年4月オフな集まり

2.

自己紹介 属性 AP: @fono@ma.fono.jp 趣味 自宅サーバー サブカルコンテンツ消費一般 内燃機/手動変速: バイク, 自動車 国内旅行 「ふぉの」と読みます Mastodonサーバの惰性運用で6年目 FediLUG過去発表 https://www.docswell.com/user/fono fediverseと自宅サーバと私 2024年2月スパム対処顛末記+α nginx-proxy + acme-companion Traefik proxy から への移行

3.

今回のゴール 維持導入コストを最小限に抑えてLinuxの ファイルをWindowsから操作したい

4.

技術選定(1/2) ( 採用) NFSv3 側の追加導入なし(v3に限る) Linux側の追加導入なし(カーネル搭載) 機能は単純 事故るとインセキュアだが防ぎやすい(ネットワークベース認証) Windows ( 没) CIFS / Samba Windows側の追加導入なし Linuxはsmbdの対応が必要 要らん機能付きすぎ(Workgroup, ActiveDirectory, プリンタ共有) 事故るとインセキュア(普通の市販ルータは当該ポートを閉じている)

5.

技術選定(2/2) WebDAV 実は一部で導入済み(自炊コンテンツ配信用) 双方の追加導入が必要(HTTP(s)サーバ, 専用クライアント) 限定的な対応クライアントから快適にアクセス 事故ると致命的にインセキュア(80/443アタックは多い)

6.

とは(1/2) NFS Network File System Protocol とその対応実装群)のこと。 名前の通り、ファイルを共有するという より、遠隔ファイルシステムとして、公開 しマウントするイメージが正しい。 NFSにおけるv1相当はSunMicrosystemsの プロプライエタリ仕様で NFSv2のRFCからmount protocolと 呼ばれていたと思われる ( 以下は標準化の年月とRFC NFSv2(1989, RFC 1094) NFSv3(1995, RFC 1813) NFSv4 2000, RFC 3010 2003, RFC 3530 2015, RFC 7530 NFSv4.1 2010, RFC 5661 2020, RFC 8881 NFSv4.2(2016, RFC 7862)

7.

とは(2/2) NFS 今回採用するのはNFSv3 やや古い規格だが、まあシンプル TCP伝送 ネットワークベース認証 ステートレス(v4に比べて) Linuxではカーネルに標準搭載されていて(nfsd) Windows 7, 8.1, 10, 11 では v3対応 https://learn.microsoft.com/ja-jp/windows-server/storage/nfs/nfs-overview

8.

今回の構成 +-------------------------------------+ | Windows 11 Pro 24H2 / 192.168.0.10 | +-------------------------------------+ | | | +--------------------------------+ | Ubuntu 22.04.5 / 192.168.0.100 | +--------------------------------+

9.

課題(1/2) は 対応しているが常用するには問題がある(1/4) Windows UTF-8 個別アプリケーションの文字コードの選定を否定するものではありません UTF-8利用が可能になった後も含め、Windows用アプリケーション実装における 依存関係や各種都合により、自発的に選定できない個別の事情が多々あります 基本スタンスとして、ソフトウェアの安定性を尊重します

10.

課題(1/2) は 対応しているが常用するには問題がある(2/4) Windows UTF-8 このようにチェックを入れると動かなく なるアプリケーションは多々存在する 実例1: 電子出願など官公庁系のアプ リケーション https://www.pcinfo.jpo.go.jp/docs/ex planation/localecheck.html ベータ...にチェックを入れて運用すると NFSでもUTF-8運用できるが…… 実例2: DLSiteのクライアントソフト https://cs.dlsite.com/hc/ja/articles/15 00002996862-ゲームの起動が正常に 行えません#:~:text=ベータ

11.

課題(1/2) は 対応しているが常用するには問題がある(3/4) Windows UTF-8 そのため、NFSではShit-JIS(厳密にはCP932)で通信することになる 対応方法としては、fuse-convmvfs パッケージを導入することになる https://manpages.ubuntu.com/manpages/noble/man1/convmvfs.1.html

12.

課題(1/3) は 対応しているが常用するには問題がある(4/4) Windows UTF-8 イメージとしてはこんな感じ ファイル名相互変換/マッピング +-----------+ convmvfs +-----------------+ | /var/hoge | <-------------------> | /var/hoge_cp932 | +-----------+ +-----------------+

13.

課題(2/2) におけるfsidの怪 NFSv3 必須オプション化されてしまっていて、この設定を怠ると起動しない状況が発生した NFSv4にとって fsid=0 が特別な意味を持つが、今回はNFSv3で任意の32bit数値が使え る 値 0 は NFSv4 で使う場合には特別な意味を持つ。 NFSv4 にはエクスポートされ るファイルシステム全体のルートという概念がある。 fsid=0 でエクスポートされ たエクスポートポイントは、 このルートとして使用される。 https://manpages.ubuntu.com/manpages/noble/ja/man5/exports.5.html を文字列のまま入れてしまったが動作しているのでよくわからない UUIDv4

14.

実設定(1/4) さて実設定はこうなる 側 Ubuntu (1/2) $ sudo apt install fuse-convmvfs # convmvfs を導入 $ sudo mkdir -p /exports/var/hoge_cp932 /exports/home/fuga_cp932 # マウンとポイントの空フォルダを作成 で編集して下記の内容を打ち込んだが、本来は /etc/cron.d/convmvfs などの形での設定をお勧めする sudo crontab -e @reboot convmvfs /exports/var/hoge_cp932 -o icharset=utf8,ocharset=CP932,srcdir=/var/hoge,allow_other @reboot convmvfs /exports/home/fuga_cp932 -o icharset=utf8,ocharset=CP932,srcdir=/home/fuga,allow_other QWERTY でEとRって隣なんですよ 気になる人は crontab -r について調べてみよう!

15.

実設定(2/4) 側 Ubuntu (2/2) /etc/exports /exports 192.168.0.10/24(rw,sync,fsid=0,crossmnt,no_subtree_check) /exports/var/hoge_cp932 192.168.0.10/24(rw,sync,fsid=88bebdb1-047a-4f6d-ae3a-e964b2af2acf,no_subtree_check) /exports/home/fuga_cp932 192.168.0.10/24(rw,sync,fsid=58910a93-d42b-48d7-b91f-41384146cab7,no_subtree_check) ここの罠としては、bindオプションのマウントポイントとして 書かれたディレクトリは空ディレクトリでも存在しなければならない 仕上げに $ sudo systemctl restart nfs-kernel-server

16.

実設定(3/4) 側 Windows (1/2) プログラムと機能 > Windowsの機能の有効化または無効化 > NFS用サービス > NFSク ライアント にチェックを入れてNFS Clientを導入して再起動 Windows側のユーザーのスタートアップフォルダに 次のスライドの内容のバッチファイルを置いてマウントする アドレスバーに スタートアップ と打ち込んで、エンターを押すとアクセスできる。 ジョークみたいだがジョークではない。

17.

実設定(4/4) 側 Windows (2/2) mount_on_login.bat mount -o lang=shift-jis 192.168.100.101:/exports/var/hoge_cp932 P: mount -o lang=shift-jis 192.168.100.101:/exports/home/fuga_cp932 Q: これでログイン時にマウントされる

18.

性能計測(1/3) ベースとなる通信速度(1/2) というツールでWindows-Linux間のスピードをはかる 理由はこちらを参照: https://news.mynavi.jp/techplus/article/20240422-2931777/ 公式解説はこちら: https://learn.microsoft.com/ja-jp/azure/virtual-network/virtualntttcp network-bandwidth-testing?tabs=windows Windows: PS >.\ntttcp.exe -s -m '12,*,192.168.0.101' -t 60 -ns Ubuntu: sudo ntttcp -r -m '12,*,192.168.0.101' -t 60 -M

19.

性能計測(2/3) ベースとなる通信速度(2/2) 側計測抜粋 52.286 MB/s 出る回線 Windows ##### Totals: ##### Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s) ================ =========== ============== ================ 3137.187500 60.001 1462.317 52.286 ....

20.
[beta]
性能計測(3/3)
実測

のファイルを送信して試してみる。

11.1GB

PS > Measure-Command { cp "E:\...\VID_20250224_224036_00_216.insv" "\\192.168.0.101\var\hoge_cp932" }

秒で終わった。
平均して 19.8 MB/s で回線速度の半分ぐらいは出るので、
実用上は問題はないという認識。
557.9

21.

感想 一度構築できれば便利 WindowsはUTF-8対応をちゃんとしてほしい /etc/exports はNFSv4/v3両対応だが色々とややこしい クライアントのアドレスを固定する必要がある

22.

ご清聴ありがとうございました