こんにちは。
本記事では、Windows11とUbuntu22.04をデュアルブートし、Windows11の機能であるWSL2からUbuntu側のファイルを読み書きできるようにします。
こうすることで、普通にLinuxをブートすることもできつつ、再起動なしでLinux環境にアクセスすることもできるので、便利です。
準備
本記事の目的
Windows11とUbuntu (Linux) を共存させることが最も大きな目的です。
しかし、Windows11ではUEFIセキュアブートが必須要件となっているため、この条件下でブート可能なOSを選択する必要があり、以前より厄介と言えるでしょう。
今回はUEFIセキュアブートでも起動可能なUbuntuを採用しました。
また、Windows11標準機能のWSL2ではファイルフォーマットとしてext4を使っている上に、外部ストレージをマウント可能です。
従って、Windows側のファイル(フォーマットはNTFS)よりも、共存しているLinux側のファイル(フォーマットはext4)の方が高速にアクセスできます。
このような観点からも、Ubuntuとして独立に起動することができつつ、WindowsのWSLからもアクセスできる環境を作っておくと便利だと考えました。
必要なもの
PC (ストレージを2つ以上搭載しているものを推奨)
Windows11 (インストール済み)
USBメモリ (使用するストレージとは別の記憶媒体なら何でも可能)
デュアルブートの手順
ストレージについて
メインのストレージにWindows11がインストールされている状態から本作業を開始します。
ここではまず、Ubuntuをインストールする場所について話しておきます。
Windows用とUbuntu用の2つのストレージ (SSD等) を搭載したPCを用意し、Windowsとは別のストレージにUbuntuをインストールするのが基本です。
もちろん、ストレージが1つしかないPCでも、パーティションを使って同じストレージ内の別の領域にインストールすることはできます。
しかし、この方法はブート関連の問題が起きやすいのでおすすめはできず、別のストレージにインストールする方が望ましいです。
問題の例として、Windowsアップデートによってブート領域に変更が加えられてOSが起動しなくなるという問題が過去に発生しています。
さらに別の問題として、現時点ではWindowsと同じストレージ内のUbuntuパーティションにはWSLからアクセスできないため、WindowsとUbuntuをデュアルブートするメリットが大きく損なわれます。
PCにストレージを追加できない方 (主にノートPC) は、外付けSSDやUSBメモリにUbuntuをインストールすることもできるので、インストール場所を物理的に分離することを検討してみてください。
それでもパーティションを変更したい場合は「ディスクの管理」から変更できます。
ディスクの管理は、タスクバーの「スタート」を右クリックし、「ディスクの管理」を選択することで起動します。
別々のストレージを使う場合は、ここでは何もする必要はありません。
インストールメディアの作成
Ubuntuをインストールするために、まず簡易的にインストールメディア (Live USB等) を作成してインストールメディアからUbuntuをブートし、その状態でストレージにUbuntuをインストールします。
まず初めに、Ubuntu公式サイト (https://jp.ubuntu.com/download) からUbuntuのディスクイメージをダウンロードします。
執筆時点ではUbuntu 22.04 LTSが最新だったので、これをダウンロードします。
ページ内の「ダウンロード」ボタンをクリックするとページが遷移して自動的にダウンロードが始まります。
次に、ストレージにUbuntuをインストールする際に必要なインストールメディアを作成します。
ここではUSBメモリに先程ダウンロードしたディスクイメージを書き込みますが、Windowsの標準機能だけでは書き込めないので、有名なフリーソフト「Rufus」を使用します。
(DVDを使う場合はWindowsの標準機能だけで書き込めるので、フリーソフトを使う必要はありません)
RufusはMicrosoft Storeからインストール可能です。
(デスクトップアプリ版もあります。公式サイト: https://rufus.ie)
Rufusのアプリを起動すると下の画像のような画面が表示されるので、「デバイス」のプルダウンメニューからディスクイメージを書き込むデバイスを選択し、「ブートの種類」の右下の「選択」と書かれたプルダウンメニューから先程ダウンロードしたディスクイメージを選択します。
他の設定は特に変更する必要がなく、画面下の「スタート」ボタンをクリックすると書き込み処理が始まります。
以上でインストールメディアの作成は完了です。
Ubuntuのインストール
ここでは、インストールメディアをブートして、ストレージにUbuntuをインストールします。
まず、先程のインストールメディアが接続された状態でPCを再起動します。
そして、起動時にブートメニュー画面 (またはBIOS設定画面) を表示します。
表示方法はPCによって異なりますが、私の場合はPC起動時に「F8」キーを連打することで表示されました。
多くの場合、起動時にF7~F12を押すことで表示されると思います。詳細は各自のPCのマニュアル等をご参照ください。
設定画面が表示されたら、インストールメディアのUbuntuを起動します。(Windows Boot Managerではない方)
Ubuntuが起動したらインストール画面が表示されるので、左側の言語の中から好きな言語を選択し、「Ubuntuをインストール」ボタンをクリックします。
あとは基本的にデフォルトの設定のままインストールの設定を進めます。(下の画像参照)
「インストールの種類」では、1つのストレージ内にパーティションを作成する場合やストレージを選択したい場合等には詳細な設定をする必要がありますが、特にこだわりがなければ「Windows Boot Managerとは別にインストール」を選択すれば大丈夫です。
また、設定途中に出てくる「あなたの名前」はホームディレクトリの名前 (ユーザ名) として使用され、ホームディレクトリのパスが /home/あなたの名前/
になります。
以上でインストール作業は完了です。
ブート優先度の設定
複数のOSを導入した場合にはそれらの起動優先度を決めておく必要があるため、ここではそれを設定します。
先程のインストール完了後に再起動し、BIOSの設定画面を表示します。
私の場合は「F2」キーを連打して表示されましたが、一般的にはF2やDeleteキーに割り当てられていることが多いと思います。
BIOSの設定画面ではブートの優先度を設定します。
私の場合は、Advanced Mode → Boot の順に選択して設定画面を出しました。(下の画像参照)
OSを頻繁に切り替える方やUbuntuをメインで使用する方はUbuntuを最優先にすることをおすすめします。
理由は、Ubuntu起動時には毎回以下のような起動OS選択画面が表示されますが、Windows起動時には起動OSの選択ができないからです。
因みに、私はほとんどWindowsしか使用しないので、Windowsを最優先にしています。
設定し終えたら、変更内容を保存して再起動します。
私の場合は、Exit → Save Changes & Reset の順に選択しました。(下の画像参照)
以上でデュアルブート環境の構築は完了です。
WSLからのアクセス手順
ここからは、先程導入したUbuntu内のファイルにWSLでアクセスする手順を説明します。
前述の通り、Windowsと同じストレージ内にUbuntuをインストールしている場合はできないのでご注意ください。(別パーティションでも不可)
Windowsを起動した状態から作業を開始します。
WSL2とは
WSL2 (Windows Subsystem for Linux 2)は、Hyper-Vというハイパーバイザを使って仮想化することで、Windows上でLinuxを起動させることができる技術です。
つまり、わざわざOSを切り替えなくてもWindowsからLinuxを起動できるので便利です。
Linux単体を起動した場合と比べると若干処理速度は落ちますが、WSL2は以前のWSLから処理の面で大幅に向上しており、普段使いにはまったく困らないと思います。
WSLのインストール
まず、Windows PowerShellを管理者権限で起動します。
起動方法がわからない方は、以下のようにタスクバーの検索欄にPowerShellと入力し、「管理者として実行する」をクリックしてください。
起動したら、以下のように入力して実行します。(Enterキーを押すと実行されます)
wsl --install
処理が終わったらインストール完了です。
以前はWindowsの設定を変更したりLinuxのディストリビューションを別で導入したりする必要がありましたが、コマンド1行だけで自動的に実行されるように改善されました。
参考: WSL のインストール | Microsoft公式ドキュメント
Linuxディストリビューションの選択
先程インストールしたLinuxカーネル (WSL) 上で使用するLinuxディストリビューションを選択します。
WSLインストール後は、「Ubuntu on Windows」(または「Ubuntu」) というアプリが自動的に追加されており、これを使ってUbuntu (現在のデフォルトはUbuntu20.04) を使用できます。
ただし、別バージョンや別ディストリビューションはMicrosoft Storeから入手可能で、現時点でUbuntu 22.04 LTSが既に公開されています。
不要な問題を回避するため、デフォルトのUbuntuアプリではなくデュアルブートで選択したOSと同じディストリビューションのアプリを使うことを推奨します。
上記「入手」ボタンをクリックすると、アプリのインストールが自動的に行われます。
(以降では、ここでインストールしたアプリのことをUbuntuアプリと表記します)
その後、アプリインストール後最初のアプリ起動時に、Ubuntuインストール時と同じような初期設定 (言語の選択: Select your language、ユーザ名設定: Pick a username) を行います。
現在、最初の言語選択時に文字化けする問題が発生していますが、デフォルトで選択されている言語が日本語になっているはずなので、気にせず進めてください。
初期設定が終わったら、設定完了画面にも表示されている通り、Ubuntuアプリを開いて以下のコマンドを実行してください。
sudo apt install
sudo apt update
外部ストレージのマウント
UbuntuをインストールしたストレージにWSLからアクセスできるようにします。
作業を始めるにあたり、予めPowerShellを管理者権限で開いておきます。
まず、UbuntuをインストールしたストレージのIDを特定するため、以下のコマンドを実行します。
入力 (PowerShell)
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
出力例
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
\\.\PHYSICALDRIVE0 WDC WD10EFRX-68FYTN0 1 1000202273280 WDC WD10EFRX-68FYTN0
\\.\PHYSICALDRIVE2 SPCC M.2 PCIe SSD 2 512105932800 SPCC M.2 PCIe SSD
\\.\PHYSICALDRIVE1 PLEXTOR PX-512M10PGN 3 512105932800 PLEXTOR PX-512M10PGN
この中から、UbuntuをインストールしたデバイスのDeviceIDを特定します。
キャプションやサイズから判別できますが、それでも分からない方は「ディスクの管理」等を使って調べるか、一度ストレージを外して差分を確認することで該当するIDを特定してください。
(因みに、 wmic diskdrive
というコマンドを実行するとより詳細な情報が表示されます)
出力例の場合、対応するDeviceIDは \\.\PHYSICALDRIVE2
なので、以降ではDeviceIDとして \\.\PHYSICALDRIVE2
を使用します。コマンド内のDeviceIDは各自のIDに修正してから実行してください。
次に、マウントするパーティションを特定します。
先程特定したDeviceIDを含め、PowerShellで以下のコマンドを実行します。(マウントはせずにディスクのアタッチのみを行うコマンド)
入力 (PowerShell 管理者権限)
wsl --mount \\.\PHYSICALDRIVE2 --bare
これを実行するとWSLからストレージにアクセス可能になるので、WSL (Ubuntuアプリ) で以下のコマンドを実行します。
入力 (WSL)
lsblk
出力例
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 256G 0 disk
sdb 8:16 0 339.8M 1 disk
sdc 8:32 0 477G 0 disk
├─sdc1 8:33 0 16M 0 part
├─sdc2 8:34 0 513M 0 part
└─sdc3 8:35 0 476.4G 0 part
sdd 8:48 0 256G 0 disk /
この中でパーティションが複数存在するデバイスがUbuntuをインストールしたストレージに対応しており、そのパーティションの中で最も容量が大きいパーティションがUbuntu側のファイル保存領域だと考えられます。
出力例の場合、sdc3
が該当するパーティション名であり、最後の数字である 3 が該当するパーティション番号です。
このパーティション番号は後で使います。
(以降ではパーティション番号として 3 を使用しますが、コマンド内のパーティション番号は各自の番号に修正してから実行してください)
最後に、Ubuntu側のパーティションをWSLにマウントするため、先程特定したDeviceIDとパーティション番号を含めてPowershellで以下のコマンドを実行します。
入力 (PowerShell 管理者権限)
wsl --mount \\.\PHYSICALDRIVE2 --partition 3
出力例
ディスク \\.\PHYSICALDRIVE2 は、名前 'PHYSICALDRIVE2p3' で正常にマウントされました。マウントポイントは、自動マウント設定が指すパス (既定: /mnt/wsl) の下にあります。
ディスクをアンマウントしてデタッチするには、'wsl --unmount \\.\PHYSICALDRIVE2' を実行します。
以上でマウントは完了です。
DeviceIDとパーティション番号は基本的に変わらないので、今後WSLにストレージをマウントする際には上記コマンド1行のみを実行すれば良いです。
ストレージへの接続を終了する場合は、PowerShellで以下のコマンドを実行します。
入力 (PowerShell 管理者権限)
wsl --unmount \\.\PHYSICALDRIVE2
参考: Linux ディスクを WSL 2 にマウントする | Microsoft公式ドキュメント
WSLからマウントポイントへのアクセス
これ以降はWSL内 (Ubuntuアプリ) で作業します。
先程マウントされたストレージは、/mnt/wsl/
内に存在しています。
今回の例では、/mnt/wsl/PHYSICALDRIVE2p3/
以下にUbuntu側のディレクトリがあります。
(PHYSICALDRIVE2p3
というファイル名は先程のマウント時に決定されたものであり、各自異なります)
例えば、Ubuntu側のホームディレクトリのパスは /mnt/wsl/PHYSICALDRIVE2p3/home/username/
(usernameは各自のユーザ名) ということになります。
毎回パスを入力するのが面倒な場合は、以下のようにシンボリックリンクを作成しておくと良いでしょう。
ln -s /mnt/wsl/PHYSICALDRIVE2p3 ~/ubuntu_root
ln -s ~/ubuntu_root/home/username ~/ubuntu_home
また、Windows側のストレージ (Cドライブ) は /mnt/c/
以下に存在し、例えば以下のようにWindowsとUbuntu間でファイルのやり取りができます。
cp /mnt/c/User/username1/Documents/src/example.txt /mnt/wsl/PHYSICALDRIVE2p3/home/username2/dst/
異なるファイルフォーマット間でやり取り可能なので、それだけでも使う価値があるでしょう。
Windows側のファイルによくアクセスする方は、Windowsへのシンボリックリンクも作成しておきましょう。
ln -s /mnt/c ~/windows_root
ln -s ~/windows_root/User/username ~/windows_home
注意点
Ubuntuの環境とWSL (Ubuntuアプリ) の環境が異なるという点については十分に留意してください。
環境というのは、OSのバージョンやデバイスドライバ、コンパイラ、実行環境などを指しています。
上記の方法は単にUbuntu側のディレクトリ内にアクセスしているだけだということです。
最後に
ここまで、WindowsとUbuntuのデュアルブート手順、WSLからUbuntu内ファイルへのアクセス手順の2点を紹介しました。
複数のOSを頻繁に使う方や、Windowsを毎回再起動したくないという方は、本記事を参考にしてみてください。
質問や要望等があれば、下のコメント欄にてお知らせください。
それでは、また。
コメント一覧