data migration between dist
最終更新日時: 2025年08月25日 12:57
- nothing
- nothing
- WSL2上のディストリビューションは仮想ディスク(VHDXファイル)を使用しており、 ディストリビューションの内部のファイルを削除してもVHDXファイルは小さくならない。 これが原因でWindows上のディスク領域を圧迫する。
- PowerShellでVHDXを圧縮したり、ddで未使用領域を0で書き込むなどの方法はあるが 安全であるとは限らない
- そこで、新しいディストリビューションを起動しても1GB程度の領域しか必要としないため、 旧ディストリビューションから新ディストリビューションの領域へ ユーザデータをコピーすることを考える
- Windows 11マシン(256GB)、USB接続されたSSD(1TB)、同ホームネットワーク上にsambaサーバ(3.7TB)がある
- 旧環境:Ubuntu 22.04(移行元)
- 新環境:Ubuntu 24.04(移行先)
- WSL2のPCにUSB接続されたSSD
- ext4フォーマット
- wsl —mount \.\PHYSICALDRIVE1 —partition 1 —bare でwsl2環境からは見える
- ext4のファイルシステムなのでwindows上からは見えない
- ubuntuからは/dev/sdd1に存在している
- 旧環境では
/mnt/usbにマウント済み
- Sambaサーバが192.168.1.1にある
-旧環境に
/mnt/sambaにマウント済み - 両方のディストリビューションに同じユーザー名を作成
- usbのファイルシステムを介して
- rsyncで旧環境をディレクトリごと一旦バックアップを取り、そこから新環境にコピーする
- tarファイルを旧環境で作成しusbディスクに一旦コピーして、それを新環境で取得し展開する
- sambaサーバを介して
- rsyncで旧環境をディレクトリごと一旦バックアップを取り、そこから新環境にコピーする
- tarファイルを旧環境で作成しusbディスクに一旦コピーして、それを新環境で取得し展開する
- Windowsファイルシステムを介して
- tarファイルを旧環境で作成しWindowsの/mnt/c配下に配置して、新環境で取得し展開する
- explore上で直接複数ディレクトリをまとめてコピーする
- sshプロトコルで2環境間でコピーする
- scpを利用して新旧環境間でコピー
- rsync利用して新旧環境間でコピー
- SSHFSをexport/mountして2環境間でコピーする
| 方法 | ファイル属性の保持 | 時間の短さ | 事前設定 | 確実性 | 総合評価 |
|---|---|---|---|---|---|
| USB + rsync | ◎(保持される) | △(USBの転送速度次第) | ○(USBマウントのみ) | ◎(rsyncの信頼性高) | ★★★★☆ |
| USB + tar | ◎(保持される) | △(圧縮・解凍で時間がかかる) | ○(USBマウントのみ) | ◎(tarはアーカイブに強い) | ★★★★☆ |
| Samba + rsync | △(NTFS経由で一部属性喪失) | ×(ネットワークの影響大) | △(Sambaサーバの設定が必要) | △(Sambaの設定ミスで失敗あり) | ★★☆☆☆ |
| Samba + tar | △(NTFS経由で一部属性喪失) | ×(ネットワーク+tarの展開) | △(Sambaサーバの設定が必要) | △(Sambaの影響を受ける) | ★★☆☆☆ |
| Windows + tar | ○(WSLの挙動次第) | ◎(SSDなら高速) | ◎(WSLで簡単) | ○(ファイルシステムの影響あり) | ★★★★☆ |
| Windows + エクスプローラー | ×(所有権・実行権限喪失) | ◎(ドラッグ&ドロップは簡単) | ◎(最も簡単) | △(WSLのファイルシステムとの相性悪) | ★★☆☆☆ |
| SCP(ssh) | ◎(保持される) | △(SSHのオーバーヘッドあり、同一PC間では特に遅い) | △(SSH設定とホスト名/IP指定が必要) | ◎(安全な転送) | ★★★★☆ |
| rsync(ssh) | ◎(保持される) | △(SSHのオーバーヘッドあり、同一PC間では特に遅い) | △(SSH設定とホスト名/IP指定が必要) | ◎(安全な転送) | ★★★★☆ |
| SSHFS | ◎(保持される) | ×(ネットワーク速度に依存) | △(FUSEと設定が必要) | ○(ネットワークが安定していれば確実) | ★★★☆☆ |
総合評価の基準:
- ★★★★★: 速度、信頼性、設定の手間が最もバランスが良い。
- ★★★★☆: 多少の手間や時間がかかるが、確実に移行可能。
- ★★★☆☆: 使えるが、他に優れた方法がある。
- ★★☆☆☆: ファイル属性の喪失や設定の手間が大きく、推奨しにくい。
- ★☆☆☆☆: 信頼性が低く、移行方法としては不適切。
補足:
- SCPはSSHのオーバーヘッドがあり、同一PCのWSL間では非効率。また、ホスト名やIPアドレスの指定が必要。
- WSL環境でSCPを使う場合、WSL1とWSL2の間では
localhostを使えるが、WSL2同士ではIPアドレスを指定する必要がある。ip addr show eth0 | grep 'inet 'で WSL2 の IP を取得し、それを用いてscp user@<WSL2_IP>:<file> <destination>のように指定する。
- USB/SSDを用いた
rsyncやtarが最も現実的な選択肢。 - Windowsの
/mnt/cを利用する方法も高速で、環境によっては有力候補。
結論:
? 最もバランスが良い方法: USB + rsync, USB + tar, Windows + tar
? 時間を優先するなら: Windows + tar
? 避けるべき方法: エクスプローラー, Samba, SCP(WSL間での直接コピーには向かない)
実際に使った手段
Section titled “実際に使った手段”- 旧環境でopenssh-serverを起動(新環境にはscpがインストールされていた、sshクライアントがインストールされていた)
- 新環境でemacsを起動。emacsでシェルを二つ起動、一つでssh 172.20.172.143(旧環境)にアクセス
- 二つのシェル間で比較しながらscp user:172.20.172.143/:~/.emacs . のように旧環境から新環境にコピー
- ディストリビューションの分割を思いついた
- 新しい環境は基本的に開発/three.jsのみ
- 他のことを試すなら、例えば、puredata等は、別のディストリビューションを作ってそちらにインストールして試そう
- windowsにもう一度インストール(優先順位順)
- Evernote
- blender
- vvvv
この手順書では、WSL2上の異なるUbuntuディストリビューション間でユーザーデータ(/home/akihisa)を移行する方法を説明します。外部ストレージ(USB SSDまたはSambaサーバー)を利用して、Windows環境のディスク容量を消費せずに効率的にファイルを同期します。
両方のディストリビューションでrsyncがインストールされていることを確認
Section titled “両方のディストリビューションでrsyncがインストールされていることを確認”旧環境と新環境の両方で:
sudo apt updatesudo apt install -y rsync2. USB SSDを使用する方法(推奨)
Section titled “2. USB SSDを使用する方法(推奨)”USB SSDは直接Linuxファイルシステムとしてマウントされているため、パーミッションが保持され、最も効率的です。
-
USB SSDに一時ディレクトリを作成:
旧環境で:
Terminal window mkdir -p /mnt/usb/akihisa_backup -
旧環境からUSB SSDへデータをコピー:
旧環境で:
Terminal window rsync -avz /home/akihisa/ /mnt/usb/akihisa_backup/ -
USB SSDから新環境へデータをコピー:
新環境で(USBが同じパスでマウントされていることを確認):
Terminal window rsync -avz /mnt/usb/akihisa_backup/ /home/akihisa/ -
移行後に差分同期が必要な場合:
旧環境で更新されたファイルがある場合:
Terminal window # 旧環境でrsync -avz /home/akihisa/ /mnt/usb/akihisa_backup/# 新環境でrsync -avz /mnt/usb/akihisa_backup/ /home/akihisa/
3. Sambaサーバーを使用する方法
Section titled “3. Sambaサーバーを使用する方法”容量の大きいデータを移行する場合は、Sambaサーバーも活用できます。
-
Sambaサーバーに一時ディレクトリを作成:
旧環境で:
Terminal window mkdir -p /mnt/samba/akihisa_backup -
旧環境からSambaサーバーへデータをコピー:
旧環境で:
Terminal window rsync -avz /home/akihisa/ /mnt/samba/akihisa_backup/注意: Sambaファイルシステムではパーミッションが完全に保持されない場合があります。
-
Sambaサーバーから新環境へデータをコピー:
新環境で(Sambaが同じパスでマウントされていることを確認):
Terminal window rsync -avz /mnt/samba/akihisa_backup/ /home/akihisa/
4. 直接マウントして同期する方法(より高度)
Section titled “4. 直接マウントして同期する方法(より高度)”こちらの方法では、SSHFSを使用して旧環境のユーザーディレクトリを新環境に直接マウントします。
-
旧環境でsshサーバーをセットアップ:
旧環境で:
Terminal window sudo apt updatesudo apt install -y openssh-server# SSHサーバー設定sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_configsudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config# SSHサーバー再起動sudo service ssh restart -
旧環境のIPアドレスを確認:
旧環境で:
Terminal window ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1表示されたIPアドレスをメモしておきます(例:
172.17.123.45) -
新環境で旧環境にマウント:
新環境で:
Terminal window # 必要なツールのインストールsudo apt updatesudo apt install -y sshfs# マウントポイント作成mkdir -p ~/old_home# SSHFSでマウントsshfs akihisa@172.17.123.45:/home/akihisa ~/old_home -p 2222プロンプトが表示されたら、旧環境のakihisaユーザーのパスワードを入力します。
-
新環境でrsyncを使用してデータをコピー:
新環境で:
Terminal window rsync -avz ~/old_home/ /home/akihisa/ -
マウント解除:
新環境で:
Terminal window fusermount -u ~/old_home
5. パーミッションの修正(必要に応じて)
Section titled “5. パーミッションの修正(必要に応じて)”特にSambaを使用した場合は、ファイル所有者やパーミッションに問題がある場合があります。以下のコマンドで修正できます:
新環境で:
sudo chown -R akihisa:akihisa /home/akihisasudo chmod -R u+rwX /home/akihisa6. 動作確認
Section titled “6. 動作確認”新環境で、移行したファイルやアプリケーションが正常に動作することを確認します。すべてが問題なく動作していることを確認してから、旧環境を削除することをお勧めします。
7. 差分同期
Section titled “7. 差分同期”後で旧環境が更新された場合に差分だけを同期する場合:
USB SSDを使用した場合:
# 旧環境でrsync -avz /home/akihisa/ /mnt/usb/akihisa_backup/
# 新環境でrsync -avz /mnt/usb/akihisa_backup/ /home/akihisa/Sambaサーバーを使用した場合:
# 旧環境でrsync -avz /home/akihisa/ /mnt/samba/akihisa_backup/
# 新環境でrsync -avz /mnt/samba/akihisa_backup/ /home/akihisa/rsyncコマンドの詳細
Section titled “rsyncコマンドの詳細”rsync -avz コマンドの各オプションの意味:
-a: アーカイブモードで、複数のオプション(-rlptgoD)をまとめたもの-r: 再帰的にディレクトリ内のすべてのサブディレクトリとファイルをコピー-l: シンボリックリンクをリンクとしてコピー-p: パーミッション(権限)を保持-t: タイムスタンプを保持-g: グループ所有権を保持-o: 所有者情報を保持-D: デバイスファイルと特殊ファイルを保持
-v: 詳細な出力(verbose)。何が起きているかを詳しく表示-z: 転送時にデータを圧縮。ネットワーク転送を高速化(Sambaの場合に特に有効)
追加のオプション(必要に応じて):
--delete: 送信先にあって送信元にないファイルを削除(完全に同一にする場合)--dry-run: 実際にはコピーせず、何が起こるかをシミュレーション--progress: ファイル転送の進行状況を表示
WSL2 ディストリビューションのストレージ情報(25年03月09日 16時07分)
Section titled “WSL2 ディストリビューションのストレージ情報(25年03月09日 16時07分)”| ディストリビューション | VHDXファイルのパス | ディスク使用量 (GB) |
|---|---|---|
| Ubuntu-22.04 | C:\Users\aquis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx | 17.82 |
| Ubuntu-24.04 | C:\Users\aquis\AppData\Local\wsl{42d332fc-4c83-460c-af9c-229533d69005}\ext4.vhdx | 3.36 |
PS C:\Users\aquis> Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\*" | Select-Object DistributionName,BasePathDistributionName BasePath---------------- --------Ubuntu-22.04 C:\Users\aquis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalStateUbuntu-24.04 C:\Users\aquis\AppData\Local\wsl\{42d332fc-4c83-460c-af9c-229533d69005}Ubuntu C:\Users\aquis\AppData\Local\wsl\{a48b6377-4503-4fea-81f2-3b03329a76c5}
## 一番古い ubuntu22.04PS C:\Users\aquis> Get-Item "C:\Users\aquis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" Directory: C:\Users\aquis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalStateMode LastWriteTime Length Name---- ------------- ------ -----a--- 2025/03/10 17:31 19,132,317,696 ext4.vhdx
## 今後使う予定 ubuntu 24.04PS C:\Users\aquis> Get-Item "C:\Users\aquis\AppData\Local\wsl\{42d332fc-4c83-460c-af9c-229533d69005}\ext4.vhdx" Directory: C:\Users\aquis\AppData\Local\wsl\{42d332fc-4c83-460c-af9c-229533d69005}Mode LastWriteTime Length Name---- ------------- ------ -----a--- 2025/03/10 17:30 4,508,876,800 ext4.vhdx
## sandbox予定 ubuntu(最新?)PS C:\Users\aquis> Get-Item "C:\Users\aquis\AppData\Local\wsl\{a48b6377-4503-4fea-81f2-3b03329a76c5}\ext4.vhdx" Directory: C:\Users\aquis\AppData\Local\wsl\{a48b6377-4503-4fea-81f2-3b03329a76c5}Mode LastWriteTime Length Name---- ------------- ------ -----a--- 2025/03/10 17:11 1,354,760,192 ext4.vhdxキッティング
Section titled “キッティング”- 不要なものを削除(GUI使わない前提)
sudo apt remove --purge ubuntu-desktop gnome-shell snapd unattended-upgrades modemmanager multipath-tools cups whoopsie bluez avahi-daemon networkd-dispatcher rsyslogsudo apt autoremovesudo apt clean- --purgeをつけると設定ファイルも削除- autoremove 依存関係で不要になったものも削除- clean キャッシュも削除- 最小限インストール
sudo apt install zsh emacsWSL2 ディストリビューションの確認手順
Section titled “WSL2 ディストリビューションの確認手順”| 手順 | コマンド |
|---|---|
| インストール済みの WSL ディストリビューションを一覧表示 | wsl --list --verbose |
| 各ディストリビューションの保存場所を確認 | `Get-ItemProperty -Path “HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss*“ |
| 各ディストリビューションの VHDX ファイルのパスを確認 | Get-Item "C:\Users\aquis\AppData\Local\wsl\{UUID}\ext4.vhdx" |
| VHDX ファイルのサイズを確認 | Get-Item "C:\Users\aquis\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" |
| Ubuntu 内でディスク使用量を確認 | wsl -d Ubuntu-XX.XX -- df -h / |
参考: ssh インストール、起動、確認
Section titled “参考: ssh インストール、起動、確認”> sudo apt install openssh-server -y> sudo service ssh start> sudo systemctl enable ssh> sudo systemctl status ssh>> ~/download %systemctl status sshsystemctl status ssh● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2025-03-08 02:32:28 JST; 8min ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 165379 (sshd) Tasks: 1 (limit: 4596) Memory: 1.7M CGroup: /system.slice/ssh.service └─165379 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
Mar 08 02:32:28 pasokon systemd[1]: Starting OpenBSD Secure Shell server...Mar 08 02:32:28 pasokon sshd[165379]: Server listening on 0.0.0.0 port 22.Mar 08 02:32:28 pasokon sshd[165379]: Server listening on :: port 22.Mar 08 02:32:28 pasokon systemd[1]: Started OpenBSD Secure Shell server.
> netstat -tlnp(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -tcp 0 0 10.255.255.254:53 0.0.0.0:* LISTEN -tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -tcp6 0 0 :::22 :::* LISTEN -tcp6 0 0 :::4321 :::* LISTEN 163568/node