パスの大文字と小文字を区別しないデフォルト動作

2018年春のWindows 10のアップデートで、Windows 10にfsutil.exeというツールが導入された。C:\WINDOWS\system32\fsutil.exeにデプロイされている。

■Windows 10 2018年春のアップデートで導入されたfsutil.exeユーティリティ

PS C:\Users\daich> Get-Command fsutil.exe | Format-List


Name            : fsutil.exe
CommandType     : Application
Definition      : C:\WINDOWS\system32\fsutil.exe
Extension       : .exe
Path            : C:\WINDOWS\system32\fsutil.exe
FileVersionInfo : File:             C:\WINDOWS\system32\fsutil.exe
                  InternalName:     fsutil.exe
                  OriginalFilename: fsutil.exe.mui
                  FileVersion:      10.0.17134.112 (WinBuild.160101.0800)
                  FileDescription:  fsutil.exe
                  Product:          Microsoft® Windows® Operating System
                  ProductVersion:   10.0.17134.112
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:         日本語 (日本)




PS C:\Users\daich>

このツールを使うと、フォルダに設定されている大文字/小文字区別機能の有無をチェックすることができる。次の例ではC:\Users\daich\Documents\Linux\は大文字と小文字を区別しない設定になっていることがわかる。

PS C:\Users\daich> fsutil.exe file queryCaseSensitiveInfo C:\Users\daich\Documents\Linux
ディレクトリ C:\Users\daich\Documents\Linux の大文字と小文字を区別する属性が無効になっ
ています。
PS C:\Users\daich>

例えば、このWindowsのファイルシステム上にあるC:\Users\daich\Documents\Linux\以下に、WSLからファイルを作成してみる。test.txtとTEST.TXTというファイルを作成してみると、後から作成したTEST.TXTのみが存在することが確認できる。

daichi@DESKTOP-DVVLKV9:~$ echo test > /mnt/c/Users/daich/Documents/Linux/test.txt
daichi@DESKTOP-DVVLKV9:~$ echo TEST > /mnt/c/Users/daich/Documents/Linux/TEST.TXT
daichi@DESKTOP-DVVLKV9:~$ ls -l /mnt/c/Users/daich/Documents/Linux/
total 0
-rw-rw-rw- 1 daichi daichi 5 Jun 30 19:06 test.txt
daichi@DESKTOP-DVVLKV9:~$ cat /mnt/c/Users/daich/Documents/Linux/test.txt
TEST
daichi@DESKTOP-DVVLKV9:~$ cat /mnt/c/Users/daich/Documents/Linux/TEST.TXT
TEST
daichi@DESKTOP-DVVLKV9:~$

これはWindows 10からも同じで、作成したファイルにアクセスしても、最後に作成したTEST.TXTしか存在しないことが確認できる。

PS C:\Users\daich> dir .\Documents\Linux\


    Directory: C:\Users\daich\Documents\Linux


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/06/30     19:06              5 test.txt


PS C:\Users\daich> more .\Documents\Linux\test.txt
TEST

PS C:\Users\daich> more .\Documents\Linux\TEST.TXT
TEST

PS C:\Users\daich>

Linuxはファイルシステム名前空間において大文字と小文字を区別する。つまり、LinuxのベースとしてWindows 10のファイルシステムを利用するWSLでは、このまま利用していては問題が出ることになる。ベースとなるWindows 10のファイルシステムが大文字/小文字を区別できないようでは、Linux側で同じ名前で大文字と小文字だけが異なるといったファイルを同じディレクトリ下に作成できないからだ。

パスの大文字と小文字を区別する設定

Windows 10 2018年春のアップデートで、Windows 10においてフォルダごとにファイルパスの大文字と小文字を区別するかどうかを設定できるようになった。デフォルトでは大文字と小文字を区別しないものの、必要な場合には区別できるようになる。従来の互換性を維持しつつ、WSLのように必要に応じて大文字と小文字を区別する動作を利用できる仕組みだ。

設定の変更は次のようにfsutil.exeコマンドで実行する。次のように実行すると指定したフォルダ以下が大文字と小文字を区別するようになる。

PS C:\Users\daich> fsutil.exe file setCaseSensitiveInfo .\Documents\Linux\ enable
ディレクトリ C:\Users\daich\Documents\Linux\ の大文字と小文字を区別する属性が有効にな
っています。
PS C:\Users\daich>

逆に設定を解除して大文字と小文字を区別しないようにするには、次のようにfsutil.exeコマンドを実行する。

PS C:\Users\daich> fsutil.exe file setCaseSensitiveInfo .\Documents\Linux\ disable
ディレクトリ C:\Users\daich\Documents\Linux\ の大文字と小文字を区別する属性が無効にな
っています。
PS C:\Users\daich>

例えば、C:\Users\daich\Documents\Linux\を大文字と小文字を区別するように設定してから、次のようにWSLで作業を行うと、test.txtというファイルもTEST.TXTというファイルも両方とも存在していることを確認できる。

daichi@DESKTOP-DVVLKV9:~$ echo test > /mnt/c/Users/daich/Documents/Linux/test.txt
daichi@DESKTOP-DVVLKV9:~$ echo TEST > /mnt/c/Users/daich/Documents/Linux/TEST.TXT
daichi@DESKTOP-DVVLKV9:~$ ls -l /mnt/c/Users/daich/Documents/Linux/
total 0
-rw-rw-rw- 1 daichi daichi 5 Jun 30 19:10 TEST.TXT
-rw-rw-rw- 1 daichi daichi 5 Jun 30 19:10 test.txt
daichi@DESKTOP-DVVLKV9:~$ cat /mnt/c/Users/daich/Documents/Linux/test.txt
test
daichi@DESKTOP-DVVLKV9:~$ cat /mnt/c/Users/daich/Documents/Linux/TEST.TXT
TEST
daichi@DESKTOP-DVVLKV9:~$

同じフォルダをWindows 10から確認すると、次のように2つのファイルが存在することを確認できる。

PS C:\Users\daich> dir .\Documents\Linux\


    Directory: C:\Users\daich\Documents\Linux


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/06/30     19:10              5 TEST.TXT
-a----       2018/06/30     19:10              5 test.txt


PS C:\Users\daich> more .\Documents\Linux\test.txt
test

PS C:\Users\daich> more .\Documents\Linux\TEST.TXT
TEST

PS C:\Users\daich>

例えば、WSL側からWindows 10のユーザーフォルダ以下にファイルを展開して利用するようなケースでは、大文字と小文字を区別していないと問題があることもある。このように大文字を小文字を区別する設定を有効にすれば、そういった場合にも問題なく利用できる。

Windows 10 春のアップデートとWSL

Windows 10 2018春のアップデートでは、WSLに関係するさまざまな機能が改善された。今回のアップデートで取り込まれたWSL関連機能の多くは、パフォーマンスの改善といったものではなく、WSLを利用するために不便とされている部分の対応、といった内容になっている。WSLを普段使いするために必要となる機能の実装が進んだアップデート、ということが言えそうだ。

WSLを利用するにあたって必要になる機能はまだ存在しており、次のアップデートでも同じように基盤機能の改善が取り込まれるのではないかと見られる。パフォーマンス、特にWSLから利用するときのファイルシステムパフォーマンスの向上などはさらに先のアップデートで取り込まれるのではないかと考えられる。

WSLは確実にWindows 10にとっても欠かすことのできない機能になってきていると感じる。Linuxを利用するならWindows 10のノートPCがいいよね、という話が日常的に行われるのはそう遠い先の話ではなさそうだ。