WSL 1 と WSL 2 の比較Comparing WSL 1 and WSL 2

Linux 用 Windows サブシステムを新しいバージョンに更新する主な目的は、ファイル システムのパフォーマンスを向上させシステム コールの完全な互換性をサポートすることです。The primary goals of updating the Windows Subsystem for Linux to a new version are to increase file system performance and support full system call compatibility.

軽量のユーティリティ仮想マシン (VM) 内で Linux カーネルを実行するために、WSL 2 には最新の優れた仮想化テクノロジが使用されています。WSL 2 uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM). ただし、WSL 2 は従来の VM エクスペリエンスではありません。However, WSL 2 is not a traditional VM experience. WSL 2 アーキテクチャの詳細については、こちらをご覧くださいLearn more about the WSL 2 architecture.

機能の比較Comparing features

機能Feature WSL 1WSL 1 WSL 2WSL 2
Windows と Linux の統合Integration between Windows and Linux
高速の起動時間Fast boot times
小さなリソース フット プリントSmall resource foot print
現在のバージョンの VMware と VirtualBox での実行Runs with current versions of VMWare and VirtualBox
マネージド VMManaged VM
完全な Linux カーネルFull Linux Kernel
システム コールの完全な互換性Full system call compatibility
OS ファイル システム間でのパフォーマンスPerformance across OS file systems

WSL 1 を既に使用していて、WSL 2 にアップグレードする場合は、Already using WSL 1 and want to upgrade to WSL 2? 手順に従って WSL 2 に更新してください。Follow the instructions to update to WSL 2!

WSL 2 は、Windows 10、バージョン 2004、ビルド 19041 以上でのみ使用できます。WSL 2 is only available in Windows 10, Version 2004, Build 19041 or higher. Windows のバージョンを確認するには Windows ロゴ キー + R キーを押します。次に「winver」と入力し、 [OK] を選択しますCheck your Windows version by selecting the Windows logo key + R, type winver, select OK. (または、Windows コマンド プロンプトで ver コマンドを入力します)。(Or enter the ver command in Windows Command Prompt). 最新の Windows バージョンに更新する必要がある場合があります。You may need to update to the latest Windows version. 19041 より前のビルドでは、WSL はまったくサポートされていません。For builds lower than 19041, WSL is not supported at all.

注意

WSL 2 は VMWare 15.5.5+VirtualBox 6+ で動作します。WSL 2 will work with VMWare 15.5.5+ and VirtualBox 6+.

Linux ファイル システムを使用してパフォーマンスを向上させるUse the Linux file system for faster performance

最速のパフォーマンス速度を実現するために最適化するには、プロジェクト ファイルを (Windows ファイル システムではなく) Linux ファイル システムに格納してください。In order to optimize for the fastest performance speed, be sure to store your project files in the Linux file system (not the Windows file system).

たとえば、WSL プロジェクト ファイルを格納する場合は、次のとおりです。For example, when storing your WSL project files:

  • Linux ファイル システムのルート ディレクトリを使用します: \\wsl$\Ubuntu-18.04\home\<user name>\ProjectUse the Linux file system root directory: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Windows ファイル システムのルート ディレクトリではありません: C:\Users\<user name>\ProjectNot the Windows file system root directory: C:\Users\<user name>\Project

WSL ディストリビューション (Ubuntu など) を使用して作業しているプロジェクト ファイルは、より高速なファイル システム アクセスを利用するために、Linux ルート ファイル システムに配置する必要があります。Project files that you are working with using a WSL distribution (like Ubuntu) must be in the Linux root file system to take advantage of faster file system access.

Linux ルート ファイル システムには、エクスプローラーなどの Windows アプリやツールを使用してアクセスできます。You can access your Linux root file system with Windows apps and tools like File Explorer. Linux ディストリビューション (Ubuntu など) を開いてみてください。また、次のコマンドを入力して、Linux ホーム ディレクトリにいることを確認してください: cd ~Try opening a Linux distribution (like Ubuntu), be sure that you are in the Linux home directory by entering this command: cd ~. 次に、以下を入力して、エクスプローラーで Linux ファイル システムを開きます " (末尾のピリオドを忘れないでください) ": explorer.exe .Then open your Linux file system in File Explorer by entering (don't forget the period at the end): explorer.exe .

例外的に WSL 2 ではなく WSL 1 を使用する場合Exceptions for using WSL 1 rather than WSL 2

WSL2 ではより高速なパフォーマンスと 100% のシステム コールの互換性が提供されるため、WSL 2 を使用することをお勧めします。We recommend that you use WSL 2 as it offers faster performance and 100% system call compatibility. ただし、WSL 1 を使用する方が好ましいシナリオもいくつかあります。However, there are a few specific scenarios where you might prefer using WSL 1. 次の場合は、WSL 1 の使用を検討してください。Consider using WSL 1 if:

  • プロジェクト ファイルを Windows ファイル システムに格納する必要がある。Your project files must be stored in the Windows file system.
    • WSL Linux ディストリビューションを使用して Windows ファイル システム上のプロジェクト ファイルにアクセスする予定で、これらのファイルを Linux ファイル システムに格納できない場合は、WSL 1 を使用することにより、OS ファイル システム間でより高速なパフォーマンスを実現できます。If you will be using your WSL Linux distribution to access project files on the Windows file system, and these files cannot be stored on the Linux file system, you will achieve faster performance across the OS files systems by using WSL 1.
  • 同じファイルに対して Windows と Linux の両方のツールを使用したクロスコンパイルを必要とするプロジェクト。A project which requires cross-compilation using both Windows and Linux tools on the same files.
    • Windows オペレーティング システムと Linux オペレーティング システムの間のファイル パフォーマンスは WSL 1 の方が WSL 2 よりも高速です。そのため、Windows アプリケーションを使用して Linux ファイルにアクセスする場合、現時点では WSL 1 を使用する方がより高速なパフォーマンスを得られます。File performance across the Windows and Linux operating systems is faster in WSL 1 than WSL 2, so if you are using Windows applications to access Linux files, you will currently achieve faster performance with WSL 1.

注意

VS Code Remote WSL 拡張機能を試すことを検討してください。Linux コマンド ライン ツールを使用してプロジェクト ファイルを Linux ファイル システム上に格納できるだけでなく、Windows 上で VS Code を使用して、インターネット ブラウザーでプロジェクトを作成、編集、デバッグ、実行できるようになります。Linux ファイル システムと Windows ファイル システムをまたぐ処理に伴うパフォーマンスの低下は発生しません。Consider trying the VS Code Remote WSL Extension to enable you to store your project files on the Linux file system, using Linux command line tools, but also using VS Code on Windows to author, edit, debug, or run your project in an internet browser without any of the performance slow-downs associated with working across the Linux and Windows file systems. 詳しくはこちらをご覧くださいLearn more.

WSL 2 のアーキテクチャWSL 2 architecture

従来の VM エクスペリエンスは起動に時間がかかり、分離され、大量のリソースが消費され、管理に時間がかかります。A traditional VM experience can be slow to boot up, is isolated, consumes lots of resources, and requires your time to manage it. WSL 2 にこのような特徴はありません。WSL 2 does not have these attributes.

WSL 2 には、Windows と Linux の間のシームレスな統合、高速な起動時間、小さなリソース フットプリントをはじめとする WSL 1 の利点があるうえ、VM の構成や管理が必要ありません。WSL 2 provides the benefits of WSL 1, including seamless integration between Windows and Linux, fast boot times, a small resource footprint, and requires no VM configuration or management. WSL 2 には VM が使用されますが、バックグラウンドで管理および実行されるため、WSL 1 とユーザー エクスペリエンスは同じです。While WSL 2 does use a VM, it is managed and run behind the scenes, leaving you with the same user experience as WSL 1.

完全な Linux カーネルFull Linux kernel

WSL 2 の Linux カーネルは、kernel.org で入手できるソースに基づいて、最新の安定したブランチから Microsoft によって構築されています。このカーネルは WSL 2 向けに特別にチューニングされており、サイズとパフォーマンスの最適化によって Windows 上で優れた Linux エクスペリエンスが提供されます。The Linux kernel in WSL 2 is built by Microsoft from the latest stable branch, based on the source available at kernel.org. This kernel has been specially tuned for WSL 2, optimizing for size and performance to provide an amazing Linux experience on Windows. カーネルは、Windows の更新プログラムによって保守されます。つまり、自分で管理しなくても、最新のセキュリティ修正プログラムとカーネルの機能強化を利用できます。The kernel will be serviced by Windows updates, which means you will get the latest security fixes and kernel improvements without needing to manage it yourself.

WSL 2 Linux カーネルはオープン ソースですThe WSL 2 Linux kernel is open source. 詳細については、カーネルを構築したチームによって書かれたブログ投稿「Windows に Linux カーネルを同梱する」を参照してください。If you'd like to learn more, check out the blog post Shipping a Linux Kernel with Windows written by the team that built it.

ファイル IO パフォーマンスの向上Increased file IO performance

WSL 2 を使用すると、git clone、npm install、apt update、apt upgrade などのあらゆるファイル集約型の操作が大きく高速化されます。File intensive operations like git clone, npm install, apt update, apt upgrade, and more are all noticeably faster with WSL 2.

実際どのくらい高速になるかは、実行しているアプリと、ファイル システムとのやり取りの方法によって変わります。The actual speed increase will depend on which app you're running and how it is interacting with the file system. 初期バージョンの WSL 2 は、zip 圧縮された tarball を展開する場合、WSL 1 と比べて最大 20 倍速くなります。また、さまざまなプロジェクトで git clone、npm install、および cmake を使用する場合は、約 2 倍から 5 倍速くなります。Initial versions of WSL 2 run up to 20x faster compared to WSL 1 when unpacking a zipped tarball, and around 2-5x faster when using git clone, npm install and cmake on various projects.

システム コールの完全な互換性Full system call compatibility

Linux バイナリでは、システム コールを使用して、ファイルへのアクセス、メモリの要求、プロセスの作成などの機能を実行します。Linux binaries use system calls to perform functions such as accessing files, requesting memory, creating processes, and more. WSL 1 では WSL チームが構築した変換レイヤーが使用されていましたが、WSL 2 にはシステム コールの完全な互換性を持つ独自の Linux カーネルが含まれています。Whereas WSL 1 used a translation layer that was built by the WSL team, WSL 2 includes its own Linux kernel with full system call compatibility. 次のような利点があります。Benefits include:

  • Docker など、WSL 内で実行できるまったく新しいアプリのセット。A whole new set of apps that you can run inside of WSL, such as Docker and more.

  • Linux カーネルに対する更新プログラムがすぐに使用可能になりますAny updates to the Linux kernel are immediately ready for use. (WSL チームが更新プログラムを実装して変更を追加するまで待つ必要はありません)。(You don't have to wait for the WSL team to implement updates and add the changes).

WSL 2 は起動時のメモリ使用量が少ないWSL 2 uses a smaller amount of memory on startup

WSL 2 では、メモリ フットプリントが小さな実際の Linux カーネル上で軽量のユーティリティ VM を使用します。WSL 2 uses a lightweight utility VM on a real Linux kernel with a small memory footprint. このユーティリティは、仮想アドレスが使用されるメモリを起動時に割り当てます。The utility will allocate Virtual Address backed memory on startup. これは、WSL 1 で必要とされていたよりも少ない割合の合計メモリで起動するように構成されています。It is configured to start with a smaller proportion of your total memory that what was required for WSL 1.

ネットワーク アプリケーションへのアクセスAccessing network applications

Windows からの Linux ネットワーク アプリへのアクセス (localhost)Accessing Linux networking apps from Windows (localhost)

Linux ディストリビューションでネットワーク アプリ (たとえば、Node.js または SQL Server で実行されるアプリ) を構築する場合、(通常の場合と同様に) localhost を使用して (Microsoft Edge または Chrome インターネット ブラウザーなどの) Windows アプリからアクセスすることができます。If you are building a networking app (for example an app running on a NodeJS or SQL server) in your Linux distribution, you can access it from a Windows app (like your Edge or Chrome internet browser) using localhost (just like you normally would).

ただし、Windows の古いバージョン (ビルド 18945 以下) を実行している場合は、Linux ホスト VM の IP アドレスを取得する (または最新の Windows バージョンに更新する) 必要があります。However, if you are running an older version of Windows (Build 18945 or less), you will need to get the IP address of the Linux host VM (or update to the latest Windows version).

Linux ディストリビューションが動作する仮想マシンの IP アドレスを確認するには、次の手順に従います。To find the IP address of the virtual machine powering your Linux distribution:

  • WSL ディストリビューション (つまり、Ubuntu) から、次のコマンドを実行します: ip addrFrom your WSL distribution (ie Ubuntu), run the command: ip addr
  • eth0 インターフェイスの inet 値の下で目的のアドレスを見つけてコピーします。Find and copy the address under the inet value of the eth0 interface.
  • grep ツールがインストールされている場合は、次のコマンドを使用して出力をフィルター処理することにより、これをより簡単に見つけることができます: ip addr | grep eth0If you have the grep tool installed, find this more easily by filtering the output with the command: ip addr | grep eth0
  • この IP アドレスを使用して Linux サーバーに接続します。Connect to your Linux server using this IP address.

次の図は、これを実行するために、Edge ブラウザーを使用して Node.js サーバーに接続する例です。The picture below shows an example of this by connecting to a Node.js server using the Edge browser.

Windows からの Linux ネットワーク アプリケーションへのアクセス

Linux からの Windows ネットワーク アプリへのアクセス (ホスト IP)Accessing Windows networking apps from Linux (host IP)

Linux ディストリビューション (つまり、Ubuntu) から Windows 上で実行されているネットワーク アプリ (たとえば、Node.js または SQL Server で実行されるアプリ) にアクセスする場合は、ホスト マシンの IP アドレスを使用する必要があります。If you want to access a networking app running on Windows (for example an app running on a NodeJS or SQL server) from your Linux distribution (ie Ubuntu), then you need to use the IP address of your host machine. これは一般的なシナリオではありませんが、次の手順に従ってこれを実現できます。While this is not a common scenario, you can follow these steps to make it work. - Linux ディストリビューションから次のコマンドを実行して、ホスト マシンの IP アドレスを取得します: cat /etc/resolv.confObtain the IP address of your host machine by running this command from your Linux distribution: cat /etc/resolv.conf - 次の語句の後に IP アドレスをコピーします: nameserverCopy the IP address following the term: nameserver. - コピーした IP アドレスを使用して、Windows サーバーに接続します。Connect to any Windows server using the copied IP address.

次の図は、これを実行するために、curl を介して Windows で実行されている Node.js サーバーに接続する例です。The picture below shows an example of this by connecting to a Node.js server running in Windows via curl.

Windows からの Linux ネットワーク アプリケーションへのアクセス

ネットワークに関する追加の考慮事項Additional networking considerations

リモート IP アドレスを使用した接続Connecting via remote IP addresses

リモート IP アドレスを使用してアプリケーションに接続すると、ローカル エリア ネットワーク (LAN) からの接続として扱われます。When using remote IP addresses to connect to your applications, they will be treated as connections from the Local Area Network (LAN). これは、アプリケーションで LAN 接続を受け入れることができるようにする必要があることを意味します。This means that you will need to make sure your application can accept LAN connections.

たとえば、場合によっては、127.0.0.1 ではなく 0.0.0.0 にアプリケーションをバインドする必要があります。For example, you may need to bind your application to 0.0.0.0 instead of 127.0.0.1. Flask を使用する Python アプリの例では、次のコマンドを使用してこれを実行できます: app.run(host='0.0.0.0')In the example of a Python app using Flask, this can be done with the command: app.run(host='0.0.0.0'). これらの変更を行うと、LAN からの接続が許可されるため、セキュリティに注意してください。Please keep security in mind when making these changes as this will allow connections from your LAN.

ローカル エリア ネットワーク (LAN) からの WSL 2 ディストリビューションへのアクセスAccessing a WSL 2 distribution from your local area network (LAN)

WSL 1 ディストリビューションを使用している場合、LAN からアクセスできるようにコンピューターが設定されていれば、WSL で実行されているアプリケーションに LAN からもアクセスできます。When using a WSL 1 distribution, if your computer was set up to be accessed by your LAN, then applications run in WSL could be accessed on your LAN as well.

WSL 2 では、これは既定の動作ではありません。This isn't the default case in WSL 2. WSL 2 には、独自の一意の IP アドレスを持つ仮想化されたイーサネット アダプターがあります。WSL 2 has a virtualized ethernet adapter with its own unique IP address. 現在、このワークフローを有効にするには、通常の仮想マシンの場合と同じ手順を実行する必要があります。Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. (Microsoft は、このエクスペリエンスを改善する方法を検討しています)。(We are looking into ways to improve this experience.)

IPv6 アクセスIPv6 access

WSL 2 ディストリビューションは、現在、IPv6 のみのアドレスに到達できません。WSL 2 distributions currently cannot reach IPv6-only addresses. Microsoft は、この機能の追加に取り組んでいます。We are working on adding this feature.

WSL 2 仮想ハードウェア ディスクのサイズの拡張Expanding the size of your WSL 2 Virtual Hardware Disk

WSL 2 では、仮想ハードウェア ディスク (VHD) を使用して Linux ファイルを格納します。WSL 2 uses a Virtual Hardware Disk (VHD) to store your Linux files. 場合によっては、その最大サイズに達したときにサイズを拡張する必要があります。If you reach its max size you may need to expand it.

WSL 2 VHD では、ext4 ファイル システムが使用されます。The WSL 2 VHD uses the ext4 file system. この VHD は、ストレージのニーズに合わせて自動的にサイズが変更されます。初期の最大サイズは 256 GB です。This VHD automatically resizes to meet your storage needs and has an initial maximum size of 256GB. ディストリビューションが 256 GB を超えるサイズになると、ディスク領域が不足していることを示すエラーが表示されます。If your distribution grows in size to be greater than 256GB, you will see errors stating that you've run out of disk space. このエラーは、VHD サイズを拡張することで修正できます。You can fix this error by expanding the VHD size.

256 GB を超えて VHD の最大サイズを拡張するには、次のようにします。To expand your maximum VHD size beyond 256GB:

  1. 次のコマンドを使用して、すべての WSL インスタンスを終了します: wsl --shutdownTerminate all WSL instances using the command: wsl --shutdown

  2. ディストリビューションのインストール パッケージ名 ("PackageFamilyName") を見つけますFind your distribution installation package name ('PackageFamilyName')

    • PowerShell を使用して、次のコマンドを入力します ("distro" はディストリビューション名です):Using PowerShell (where 'distro' is your distribution name) enter the command:
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
  3. WSL 2 のインストールで使用される VHD ファイルの fullpath を特定します。これが pathToVHD になります。Locate the VHD file fullpath used by your WSL 2 installation, this will be your pathToVHD:

    • %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
  4. 次のコマンドを実行して、WSL 2 VHD のサイズを変更します。Resize your WSL 2 VHD by completing the following commands:

    • 管理者特権で Windows コマンド プロンプトを開き、次のように入力します。Open Windows Command Prompt with admin privileges and enter:
      • diskpart
      • Select vdisk file="<pathToVHD>"
      • expand vdisk maximum="<sizeInMegaBytes>"
  5. WSL ディストリビューション (たとえば、Ubuntu) を起動します。Launch your WSL distribution (Ubuntu, for example).

  6. Linux ディストリビューションのコマンド ラインから次のコマンドを実行して、ファイル システムのサイズを拡張できることを WSL に認識させます。Make WSL aware that it can expand its file system's size by running these commands from your Linux distribution command line:

    • sudo mount -t devtmpfs none /dev
    • mount | grep ext4
    • /dev/sdXX のようなこのエントリの名前をコピーします (X は他の文字を表します)Copy the name of this entry, which will look like: /dev/sdXX (with the X representing any other character)
    • sudo resize2fs /dev/sdXX
    • 前の手順でコピーした値を使用します。Use the value you copied earlier. resize2fs のインストールが必要になる場合もあります: apt install resize2fsYou may also need to install resize2fs: apt install resize2fs

注意

通常、Windows ツールまたはエディターを使用して、AppData フォルダー内にある WSL 関連ファイルを変更、移動、またはアクセスしないでください。In general do not modify, move, or access the WSL related files located inside of your AppData folder using Windows tools or editors. そうすると、Linux ディストリビューションが破損する可能性があります。Doing so could cause your Linux distribution to become corrupted.