Windows Subsystem for Linux(WSL)でのマウント方法|外部ドライブやWindowsフォルダにアクセス

Linux

WSL(Windows Subsystem for Linux)は、Windows上でLinuxを手軽に動かせる便利な環境です。

でも「LinuxのシェルからWindowsのファイルにアクセスしたい」「USBメモリや別ドライブをマウントしたい」と思ったとき、どう操作すればよいか迷ってしまうことはありませんか?

この記事では、WSL上でWindowsのドライブや外部メディアをマウント・利用する方法をわかりやすく解説します。WSL1とWSL2の違いにも触れながら説明するので、ぜひ参考にしてください。

スポンサーリンク

WSL1とWSL2の基本的な違い

アーキテクチャの違い

項目WSL1WSL2
仕組みシステムコール変換軽量仮想マシン
ファイルI/O性能Windows側が高速Linux側が高速
ネットワークWindows と同じIP独立したIP
メモリ使用量少ないやや多い

マウント機能の違い

WSL1

  • Windowsドライブの自動マウント
  • drvfsによるWindows ファイルシステムアクセス
  • 基本的なマウント機能

WSL2

  • WSL1の全機能
  • Linuxネイティブファイルシステムのマウント
  • 物理ディスクへの直接アクセス
  • より高速なLinux ファイルI/O

WSLでWindowsファイルシステムにアクセスする

自動マウントされる /mnt ディレクトリ

WSLを起動すると、WindowsのドライブはすでにWSL環境にマウントされています。

Windows側WSL上のパス内容
C:\/mnt/cシステムドライブ
D:\/mnt/dデータドライブ
E:\/mnt/e外付けドライブなど

実際の使用例

Windowsのデスクトップに移動

cd /mnt/c/Users/ユーザー名/Desktop
ls -la  # デスクトップのファイル一覧

ドキュメントフォルダの確認

cd /mnt/c/Users/ユーザー名/Documents
pwd  # 現在のパスを確認

Windows側でファイル作成

# WSLからWindowsデスクトップにファイル作成
echo "Hello from WSL" > /mnt/c/Users/ユーザー名/Desktop/test.txt

パスの書き方のコツ

Windows パスをWSL形式に変換

Windows形式C:\Users\username\Documents\project WSL形式/mnt/c/Users/username/Documents/project

空白を含むパスの扱い

# 空白があるパスは引用符で囲む
cd "/mnt/c/Program Files"

# またはエスケープ
cd /mnt/c/Program\ Files

手動でのマウント操作

基本的なマウントコマンド

Windowsドライブのマウント

# 基本形式
sudo mount -t drvfs <Windows_path> <mount_point>

# 例:Dドライブをマウント
sudo mkdir -p /mnt/external
sudo mount -t drvfs D: /mnt/external

ネットワークドライブのマウント

# SMB共有をマウント
sudo mkdir -p /mnt/networkdrive
sudo mount -t drvfs '\\server\share' /mnt/networkdrive

# 認証が必要な場合
sudo mount -t drvfs '\\server\share' /mnt/networkdrive -o username=user,password=pass

マウントオプションの活用

よく使うオプション

オプション効果使用例
uid=1000ファイル所有者を指定マウント時の権限設定
gid=1000グループを指定マウント時の権限設定
case=off大文字小文字を区別しないWindows互換性
metadataLinuxメタデータを有効chmod/chownの動作

実際の使用例

# 権限を指定してマウント
sudo mount -t drvfs D: /mnt/external -o uid=1000,gid=1000

# 大文字小文字を区別せずマウント
sudo mount -t drvfs E: /mnt/usb -o case=off

# メタデータを有効にしてマウント
sudo mount -t drvfs F: /mnt/data -o metadata

WSL2でのLinuxファイルシステムマウント

物理ディスクへの直接アクセス

WSL2では、ext4、XFS、BtrfsなどのLinuxファイルシステムを直接マウントできます。

基本的な手順

1. ディスク番号の確認

Windows側(管理者権限のPowerShell):

# ディスク一覧表示
Get-Disk

# または
wmic diskdrive list brief

2. WSLでのマウント

# 基本形式
wsl --mount \\.\PHYSICALDRIVE<番号> --partition <パーティション番号> --type <ファイルシステム>

# 例:3番目のディスクの1番目のパーティション(ext4)
wsl --mount \\.\PHYSICALDRIVE3 --partition 1 --type ext4

ファイルシステム別の例

ext4ファイルシステム

wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type ext4

XFSファイルシステム

wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type xfs

Btrfsファイルシステム

wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type btrfs

マウント後のアクセス

マウントされたLinuxファイルシステムは、デフォルトで/mnt/wsl/以下にマウントされます:

# マウントポイントの確認
ls -la /mnt/wsl/

# マウントされたファイルシステムにアクセス
cd /mnt/wsl/PHYSICALDRIVE2p1
ls -la

アンマウント操作

基本的なアンマウント

手動マウントしたドライブのアンマウント

# 基本形式
sudo umount <mount_point>

# 例
sudo umount /mnt/external
sudo umount /mnt/usb

強制アンマウント

# プロセスが使用中でアンマウントできない場合
sudo umount -f /mnt/external

# 遅延アンマウント(使用が終了したらアンマウント)
sudo umount -l /mnt/external

WSL2の物理ディスクアンマウント

# PowerShellまたはコマンドプロンプトから
wsl --unmount \\.\PHYSICALDRIVE3

# すべてのディスクをアンマウント
wsl --unmount

マウント設定のカスタマイズ

/etc/wsl.conf での設定

WSLの動作は/etc/wsl.confファイルで細かく制御できます。

基本的な設定ファイル

# /etc/wsl.conf ファイルを作成・編集
sudo nano /etc/wsl.conf

設定例

[automount]
enabled = true          # 自動マウントを有効
root = /mnt/           # マウントポイントのルート
options = "metadata,uid=1000,gid=1000,umask=22,fmask=11"

[network]
generateHosts = true # /etc/hostsを自動生成 
generateResolvConf = true # /etc/resolv.confを自動生成

[interop]
enabled = true # Windows実行ファイルの実行を許可 
appendWindowsPath = true # Windows PATHを追加

設定の詳細説明

automountセクション

  • enabled:Windowsドライブの自動マウント
  • root:マウントポイントのベースディレクトリ
  • options:マウント時のデフォルトオプション

よく使うオプション

  • metadata:chmod/chownを有効化
  • uid=1000:ファイル所有者をuser(UID 1000)に
  • gid=1000:グループをuser(GID 1000)に
  • umask=22:ディレクトリ権限を755に
  • fmask=11:ファイル権限を644に

設定の反映

設定を変更した後は、WSLを再起動する必要があります:

# PowerShellまたはコマンドプロンプトから
wsl --shutdown

# WSLを再起動
wsl

実用的な使用例

開発プロジェクトでの活用

Windowsとの連携開発

# Windowsのプロジェクトフォルダにアクセス
cd /mnt/c/projects/myapp

# Linuxツールでファイル処理
find . -name "*.js" | xargs grep "TODO"

# ログファイルの解析
tail -f /mnt/c/logs/application.log

バックアップとデータ移行

# WindowsからLinuxファイルシステムへのバックアップ
rsync -av /mnt/c/Users/user/Documents/ /mnt/wsl/backup/

# 外付けHDDからの復元
sudo mount -t drvfs E: /mnt/backup
cp -r /mnt/backup/project/* /home/user/workspace/

システム管理での活用

ログファイルの監視

# Windowsのイベントログ(CSV形式)を監視
tail -f "/mnt/c/Windows/System32/winevt/Logs/Application.evtx"

# IISログの解析
awk '{print $1}' /mnt/c/inetpub/logs/LogFiles/W3SVC1/*.log | sort | uniq -c

ファイルシステムの健全性チェック

# 外付けHDDのチェック(ext4の場合)
wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type ext4
sudo fsck -f /dev/sdc1

パフォーマンスの最適化

ファイルI/Oパフォーマンス

WSL1とWSL2の使い分け

Windows側ファイルメイン

  • WSL1を推奨
  • /mnt/c/でのファイル操作が高速

Linux側ファイルメイン

  • WSL2を推奨
  • WSL2のLinuxファイルシステムが高速

効率的なファイル配置

# 悪い例:WSL2でWindows側ファイルを頻繁にアクセス
cd /mnt/c/projects/
make  # 遅い

# 良い例:プロジェクトをLinux側にコピー
cp -r /mnt/c/projects/myapp ~/workspace/
cd ~/workspace/myapp
make  # 高速

マウントオプションの最適化

大量ファイル処理向け

# ケースインセンシティブで高速化
sudo mount -t drvfs D: /mnt/data -o case=off

# メタデータなしで軽量化
sudo mount -t drvfs E: /mnt/external -o noatime

トラブルシューティング

よくある問題と解決法

マウントできない場合

問題mount: /mnt/external: mount failed: Operation not permitted

解決法

# 管理者権限で実行
sudo mount -t drvfs D: /mnt/external

# WSLを再起動
wsl --shutdown
wsl

ファイルが見つからない

問題:Windowsで作成したファイルがLinux側で見えない

解決法

# マウント状態を確認
mount | grep drvfs

# 再マウントを試行
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c

権限問題

問題:ファイルの権限が適切でない

解決法

# メタデータオプション付きで再マウント
sudo umount /mnt/external
sudo mount -t drvfs D: /mnt/external -o metadata,uid=1000,gid=1000

パフォーマンス問題

遅いファイルアクセス

WSL2でWindows側ファイルアクセスが遅い場合

# ファイルをLinux側にコピーして作業
cp /mnt/c/large_project ~/workspace/
cd ~/workspace/large_project

# 作業後にWindows側に戻す
rsync -av ~/workspace/large_project/ /mnt/c/large_project/

メモリ使用量の最適化

WSL2のメモリ制限設定

%USERPROFILE%\.wslconfigファイルを作成:

[wsl2]
memory=4GB
processors=2
swap=1GB
localhostForwarding=true

セキュリティ考慮事項

アクセス権限の管理

適切な権限設定

# セキュアなマウント(読み取り専用)
sudo mount -t drvfs D: /mnt/readonly -o ro

# 特定ユーザーのみアクセス可能
sudo mount -t drvfs E: /mnt/private -o uid=1000,gid=1000,umask=077

ネットワークドライブの認証

# 認証情報を環境変数で管理
export SMB_USER="username"
export SMB_PASS="password"

# 認証情報付きマウント
sudo mount -t drvfs '\\server\share' /mnt/network -o username=$SMB_USER,password=$SMB_PASS

まとめ

Windows Subsystem for Linux(WSL)でのマウント機能について、主要なポイントをまとめます:

基本的なマウント方法

  • 自動マウント:Windowsドライブは/mnt/cなどに自動配置
  • 手動マウントmount -t drvfsでドライブや共有フォルダをマウント
  • WSL2の新機能wsl --mountでLinuxファイルシステムに直接アクセス

実用的な活用法

  • 開発環境:WindowsとLinuxツールの組み合わせ
  • データ移行:異なるファイルシステム間でのファイル移動
  • システム管理:ログ監視やバックアップ作業

パフォーマンス最適化

  • ファイル配置:WSL1/WSL2の特性に応じた使い分け
  • マウントオプション:用途に応じたオプション選択
  • 設定ファイル/etc/wsl.confでのカスタマイズ

セキュリティ配慮

  • 権限管理:適切なuid/gid設定
  • アクセス制御:読み取り専用マウントなど
  • 認証情報:ネットワークドライブの安全な接続

コメント

タイトルとURLをコピーしました