Skip to content

Instantly share code, notes, and snippets.

@niratama
Last active February 3, 2023 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niratama/2c8f03cb9497f0528b8237c452cbdac2 to your computer and use it in GitHub Desktop.
Save niratama/2c8f03cb9497f0528b8237c452cbdac2 to your computer and use it in GitHub Desktop.
WSL2のディストリビューションexport/importの比較

WSL2のディストリビューションexport/importの比較

WSL2のディストリビューションをexport/importすることで別ドライブに移動することができるんだけど、 普通にぐぐって出てくる方法(デフォルトのtar形式)だとわりと時間かかってた。

wsl.exeのヘルプを見ると、

Linux 用 Windows サブシステムでディストリビューションを管理するための引数:

    --export <Distro> <FileName> [Options]
        ディストリビューションを tar ファイルにエクスポートします。
        ファイル名を - にすると標準出力になります。

        オプション:
            --vhd
                ディストリビューションを .vhdx ファイルとしてエクスポートする必要があることを指定します。

    --import <Distro> <InstallLocation> <FileName> [Options]
        指定された tar ファイルを新しいディストリビューションとしてインポートします。
        ファイル名を - にすると標準入力になります。

        オプション:
            --version <Version>
                新しいディストリビューションに使用するバージョンを指定します。

            --vhd
                指定されたファイルが tar ファイルではなく .vhdx ファイルであることを指定します。
                この操作により、指定されたインストール場所に .vhdx ファイルのコピーが作成されます。

    --import-in-place <Distro> <FileName>
        指定された .vhdx ファイルを新しいディストリビューションとしてインポートします。
        この仮想ハード ディスクは ext4 ファイル システムの種類でフォーマットする必要があります

とあるので、vhdx形式だと実はそのままなので高速化できるんじゃないかと思って実験してみた。

処理時間はPowerShellのMeasure-Commandを使って計測した。 (バッチファイルにして起動したのでたぶんcmd.exeの起動時間も含まれていそう)

Measure-Command { Start-Process test.bat -Wait -NoNewWindow }

参考: https://devlights.hatenablog.com/entry/2018/04/20/114112

export

tar形式

処理時間

TotalSeconds      : 20.0230566

export後のファイルサイズ

-a---          2023/02/03    22:39     1214351360 Ubuntu-22.04.tar

vhdx形式

処理時間

TotalSeconds      : 5.0145458

export後のファイルサイズ

-a---          2023/02/03    22:46     1788870656 Ubuntu-22.04.vhdx

import

tar形式

処理時間

TotalSeconds      : 8.0263856

import後のvhdxファイルサイズ

-a---          2023/02/03    23:52     1386217472 ext4.vhdx

vhdx形式

処理時間

TotalSeconds      : 5.0203429

import後のvhdxファイルサイズ

-a---          2023/02/03    23:53     1788870656 ext4.vhdx

vhdx形式(in-place)

処理時間

TotalSeconds      : 1.0137321

import後のvhdxファイルサイズ

-a---          2023/02/03    23:52     1788870656 ext4.vhdx

推測

  • vhdx形式だと単純にファイルコピーにかかる時間に見える
  • in-placeだと処理時間は一瞬
  • tar形式だと純粋に存在するファイル分だけになるので、結果的にvhdxファイルが最適化できる
    • 実際にはvhdx形式を最適化する方法は別に存在するけど
rem 実際に動かすの以外はコメントアウト
rem import
wsl --import Ubuntu-22.04-tar d:\wsl2\Ubuntu-22.04-tar d:\temp\Ubuntu-22.04.tar
wsl --import Ubuntu-22.04-vhd d:\wsl2\Ubuntu-22.04-vhd d:\temp\Ubuntu-22.04.vhdx --vhd
wsl --import-in-place Ubuntu-22.04-inplace d:\wsl2\Ubuntu-22.04-inplace\ext4.vhdx
rem export
wsl --export Ubuntu-22.04 d:\temp\Ubuntu-22.04.tar
wsl --export Ubuntu-22.04 d:\temp\Ubuntu-22.04.vhdx --vhd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment