これはなに

WindowsでWSLを使っている。使っているディストリビューションがUbuntu18.04だったのだが、サポートが切れるため、Ubuntu18.04から22.04に移行する必要が出てきた。 このときに取った方法を備忘録としてメモしておく。
とった手順

失敗

最初に取った方法は、Windowsのエクスプローラーで、\\wsl$\{ディストリビューション名}\home\{ユーザ名}にアクセスして、ファイルをコピーする方法だった。
この方法は結構手軽でよさそうだったのだが、コピー先の方にのみXXX Zone.Identifierという謎のファイルが各ファイルごとにできてしまい、これが邪魔だった。
XXX Zone.Identifierというファイルは、ChatGPT曰く、ファイルがどのゾーン(インターネット/イントラネット/ロカル)から来たかを記録するためのもの1らしい。
削除しても問題ないらしいが、邪魔なので、別の方法を取ることにした。
成功

そこで、移動先のディストリビューションでsshサーバを立てて、移動元のディストリビューションからscpでコピーする方法を取ることにした。
結論を言えば、この方法でうまくいった。
SSHサーバは以下のコマンドでインストールして起動した。
sudo apt update
sudo apt install openssh-server
sudo service ssh startその後、移動元のディストリビューションで、以下のようにしてコピーした。
scp -r /home/{ユーザ名}/target-dir/ {ユーザ名}@localhost:/home/{ユーザ名}/workspace/-rオプションをつけることで、ディレクトリごとコピーできる。
{ユーザ名}は環境のユーザ名に置き換えること。これで、target-dirディレクトリを、移動先のディストリビューションへコピーできた。
コピーした後に、移動前のディストリビューションでtarget-dirを削除すれば、移動完了である。
補足

ちなみに、今回はSSHサーバが移動先のディストリビューションだけで立っていたため、ポート番号を指定しなくてもlocalhostで接続できた。
複数のSSHサーバを立てている場合は、移動先のディストリビューションのSSHサーバのポート番号を調べて、-P {ポート番号}オプションをつける必要があるはずである。
Windowsの代替データストリーム(Alternate Data Stream, ADS)に関連する。本来はNTFSの隠しADSだが、WSLはLinuxなので、ゴミファイルのように見えてしまうとのこと。 ↩︎