Help us understand the problem. What is going on with this article?

WSL同士のファイル転送

More than 1 year has passed since last update.

解決したい問題点:WSL同士でファイル転送をしたい

ついにWSLにもUbuntu 18.04が来ました。
思ったよりも早くきて、びっくりしつつ、とても喜んでいます。

ところが!
このUbuntu 18.04は新しいWindowsStore Appとして配布されました。
そこで起こるのが、旧Ubuntuアプリから新Ubuntu1804アプリへの環境移行。

私は開発環境のセットアップをgitレポジトリ化&スクリプト化してあるため、こちらはあまり問題になりませんでした。
しかし、今まで扱っていたファイルをどうするのかという問題が残りました。

問題解決の大変さ:WSLのファイルシステムの特殊さ

WSLはファイルシステムが特殊で、Windows10のファイルパスを使ってファイルのやりとりをすると問題が起こります。

Linuxから見たWindowsでのファイル権限

WSLはWindows10のファイルシステムにアクセスできます。
しかし、Windows10を経由すると、すべてのファイルに実行権限が付与されてしまいます。
つまり、WSL1からWSL2にファイルをコピーするのに「WSL1→Windows 10→WSL2」と経由すると、すべてのファイルに実行権限がついてしまいます。
1つ2つのファイルならいいですが、大量になると、権限の復旧が面倒です。

Windows10から見たWSLのファイルパス

WSLのファイルは、Windowsでの実体がひじょうに深いところにあります。
ファイルパスは以下です。

Ubuntuの場合
%LOCALAPPDATA%\Packages\CanocialGroupLimited.UbuntuonWindows_"何か"\LocalState\rootfs
Ubuntu1804の場合
%LOCALAPPDATA%\Packages\CanocialGroupLimited.Ubuntu18.04onWindows_"何か"\LocalState\rootfs

しかも、Windows10からWSLのファイルを読めますが書き込みはできません。
WSLのファイルを変更をすると、WSLから不可視なファイルとなってしまいます。1

また前述の実行権限の都合により、Ubuntu1804から/mnt/c経由でUbuntuのファイルにアクセスはできますが、やはり実行権限がついてしまいます。

解決策:そうだ、sshしよう

Windowsを経由せず、WSLのLinux同士で通信すれば解決できます。
他のLinuxサーバがあればそこを経由でもいいですが、ネットワークを経由したくありません。
そこで、新たなWSLで可能になった、WSLでsshdを立てることにしました。

Ubuntu1804でsshdの設定をする

一時的に、パスワードでの認証をオンにします。
sshdを使い続けるのであれば、RSA認証にあとで変えましょう。

/etc/ssh/sshd_config
PasswordAuthentication yes

なお、参考文献にある以下サービスの停止は必要ありませんでした。

  • SSH Server Broker
  • SSH Server Proxy

また、以下のsshdのUsePrivilegeSeparation noの設定も必要ありませんでした。

Ubuntu1804でsshdを起動する

Ubuntuのsshdを以下のコマンドで起動します。

# service ssh start

Ubuntuからアクセスする

ここまでくれば、sshもscpも使えます。
ダイレクトにコピーすることができました。

$ scp -r [コピーしたいフォルダ] [Ubuntu1804のユーザ名]@localhost:[コピー先]

Ubuntu1804のsshdを止める

使わないものは止めておきましょう。

# service ssh stop

まとめ

  • WSL間のファイルのやりとりはダイレクトで行おう
  • WSLでは、親であるWindows10を経由するとファイルのあれこれに面倒が増える

参考文献


  1. Windows版Source Treeがひじょうに便利なのですが、この制約のせいでWSL内のgitレポジトリを扱うことができません。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした