2026年10月16日金曜日

Linux Mint 上の Wine+Bottles で Windowsアプリのファイル一覧表示速度が改善

 Linux Mint 上の Wine+Bottles で Windowsアプリのファイル一覧表示速度が改善した件

(16/Oct/2026) 

Windows10 のサポート切れに伴い、使わなくなったPCでLinux Mint を使い始めました。

Firefox でアカウント登録して使っているため、Linux上でもパスワード登録なども引き継がれ、インターネットはなんの問題もなく、また表計算などは互換アプリがあり、ほぼ問題はないです。

ただし、Windows で使いなれたアプリ、データを引き継いで引き続き使いたいアプリのほか、Windowsでなければ使えない専用アプリも存在します。

そこで、Linux の Windows互換環境を試してみています。すんなりとは行かないのですが、少し苦労すればそれなりに使えそうです。

そんな中で、Windowsアプリで、Macで立てたファイルサーバーからファイルを読もうとしたところ、ファイル表示が異常に遅い(24項目の表示に35秒かかる)現象に遭遇。ChatGPT に尋ねながら、まずまずの改善結果(24項目で10秒程度)になったのですが。AIでもすんなりとは行かず、結構な数のやり取りと試行錯誤を要しました。で、ここにレポートとして公開します。今後、同じ状況に陥った方がAIに聞けばAIの検索結果に引っかかって、すんなりと解決に結びつくことを期待します。また、Wine開発者にも届き、改善につながると幸いです。

ChatGPTがまとめたレポートは下記の通り。

^^^^^^^^^^^^^^^^^^^^^^ 

● Wine/BottlesでSMB共有フォルダーのファイル一覧表示が遅い問題と、CIFSのnouser_xattrによる改善

【環境】
・クライアント:Linux Mint(カーネル 7.0.0-38-generic)
・Windows互換環境:Bottles 67.3(Flatpak版)、Wineランナー soda-11.0-10
・対象アプリ:RootPro CAD 13 Free
・ファイルサーバー:Mac mini、家庭内LAN、SMB 3.0
・アクセス方法:LinuxのCIFSマウントをWineのS:ドライブに割り当て

【症状】
RootPro CADの「ファイルを開く」ダイアログでMac mini上の共有フォルダーを表示すると、ファイル一覧の取得が極端に遅く、体感では1項目につき約1秒かかった。一方、同じ共有をLinux Mintのファイルマネージャー(Nemo)やlsで参照すると、一覧取得は約0.2秒程度で速かった。ファイル本体の転送速度だけでは説明できない差だった。

当初試したGVfs経由のSMBアクセスは遅延や不安定さがあり、LinuxカーネルのCIFSマウントに変更して読み書きは実用的になった。しかしWine上のファイル一覧表示の遅さは残った。

【調査で確認したこと】
RootPro CADのプロセスをstraceで調べると、ファイル一覧表示の際にgetxattrシステムコールが大量に発生していた。特にuser.DOSATTRIBとuser.WINEREPARSEへの問い合わせが目立ち、ある記録ではそれぞれ約4,882回、要求された属性がないことを示すENODATAが多数返っていた。別の計測ではgetxattr関連の約5,214回の呼び出しに累積約35.85秒を要した。これらの数値は別々の計測であり、同一条件の厳密なベンチマークではない。

【設定の比較】
本番のS:ドライブとは別に、同じ共有フォルダーをLinuxの別マウントポイントに接続し、WineのT:ドライブとして比較した。

・actimeo=30:属性キャッシュ期間を延長したが、目立った改善はなかった。
・actimeo=30,nouser_xattr:ファイル一覧表示が大幅に改善し、体感で約3倍速くなった。CADファイルの読み書きも正常だった。

そこで通常使用するS:ドライブ側のCIFS設定には、actimeoを変更せず、nouser_xattrだけを追加した。適用後のマウントオプションにはnouser_xattrとactimeo=1が表示され、RootPro CADのファイル一覧も「かなり速く」なった。テストファイルを開いて編集・保存し、アプリを終了してから再度開いても問題はなかった。

【実際に変更した設定】
/etc/fstabのCIFSマウントオプションにnouser_xattrを追加した。次は共有名・ホスト名を一般化した記述例である。

変更前:
//server.local/share /mnt/macmini cifs credentials=/etc/samba/credentials-macmini,uid=1000,gid=1000,vers=3.0,_netdev,nofail,x-systemd.automount 0 0

変更後:
//server.local/share /mnt/macmini cifs credentials=/etc/samba/credentials-macmini,uid=1000,gid=1000,vers=3.0,nouser_xattr,_netdev,nofail,x-systemd.automount 0 0

fstabをバックアップ・編集後、sudo findmnt --verify --verboseで構文を確認し、sudo systemctl daemon-reloadを実行した。共有を使用中のアプリを終了して自動マウントを停止・再開し、次のコマンドで実際の設定を確認した。

findmnt -n -M /mnt/macmini -t cifs -o OPTIONS --notruncate

【考察と注意点】
nouser_xattrは、CIFSマウントにおけるユーザー拡張属性(user.*)のサポートを無効にするオプションである。今回の観察からは、Wineによる大量の拡張属性照会とCIFS側の属性処理が、一覧表示の遅延に関係していた可能性が高い。ただし、Wine側の呼び出し自体が減ったか、個々の呼び出しが軽くなったかまでは今回の測定だけでは断定できない。

nouser_xattrはすべてのWine環境に有効な高速化設定ではない。ユーザー拡張属性を利用する別のアプリには影響する可能性があるため、適用前にバックアップを取り、可能なら別マウントで試し、閲覧だけでなく保存・再読み込みも確認してほしい。

本件の要点は、Linux側では高速なのにWine上のファイル一覧だけが遅い場合、ネットワーク速度だけでなくgetxattrなどのシステムコールとCIFSの拡張属性処理を調べる価値がある、ということである。

ーーーーーーーーーーーーーーーーー

ChatGPTのレポート、なんか硬いですね。論文みたい。論文での学習が多いのかな。 

0 件のコメント:

コメントを投稿