このページの本文へ

前へ 1 2 次へ

Windows Info 第151回

Windows 10 RS5で改良されたファイル名の大文字/小文字の区別

2018年12月16日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

 Windows 10 Ver.1803(April 2018 Update、RS4)で、DrvFs(WSLからWindows側ファイルシステムへのアクセス)が改良され、Windows Subsystem for Linux(WSL)から作成したディレクトリ(フォルダ)に関しては、ファイル名の大文字小文字の区別をするようになった。このような大文字小文字の区別を「ケースセンシティビティ」(Case Sensitivity)という。

RS4では、WSLからDrvFsに作成したディレクトリでは大文字小文字が区別されるようになった。その機能がRS5で改定されている

POSIX互換のためにNTFSでは
ファイル名の大文字小文字を区別できるようになっている

 そもそもNTFSはファイル名の大文字小文字を区別しており、大文字小文字の状態は保存されている。しかし、WindowsのAPIでは、ファイルの大文字と小文字を区別しないようにしてNTFSを利用する。

 Windowsでファイル名の大文字小文字を区別させたい場合には、「FILE_FLAG_POSIX_SEMANTICS」という属性を付けてファイルを作成する必要があった。これは、Windows NTがPOSIXと互換性を持っていたときに用意された機能だ。

 かつては、米政府に納入するコンピューターはPOSIXと互換性が持つ必要(Federal Information Processing Standards:FIPS、FIPS 151-1/151-2がPOSIXとの互換性を要求していた)があり、昔のWindowsはPOSIXサブシステムを内蔵していた。このFIPS 151-1/151-2は2000年に廃止されたため、現行のWindowsはPOSIXとの互換性は持っていない。ちなみにWSLはPOSIXサブシステムをベースにして作られている。

 前述のようにNTFS上ではファイル名の大文字小文字を区別しているため、表示としては区別された状態だが、ファイルとして扱うときには、WindowsのAPIが大文字小文字を区別せずに処理する。これに対して、LinuxなどUnix系のOSでは区別するのが標準。これはWSL内においても同様だ。

 RS4では、このケースセンシティビティのためにディレクトリ(フォルダ)に対して、新しい属性が用意された。WSLからDrvFs上に作成したディレクトリにはこの属性が設定され、その中ではファイル名の大文字小文字が区別されるようになった。

RS5ではWindowsアプリケーションが扱うことを考えた設定に

 しかし、Windowsとの共存を考えると、RS4における実装にはいつかの問題があった。Windows側のアプリケーションは、そもそも大文字小文字を区別しないという前提で作られていて、ファイル名などを内部的に大文字のみ、小文字のみ、に変換して利用することがある。

 それによりパスの比較処理などが簡単にできるからだ。しかし、こうした前提で作られたアプリケーションは、ファイルのアクセスの仕方によっては大文字小文字を区別するディレクトリでファイルを見つけられなくなってしまう可能性がある。

 そこで、RS5のWSLでは動作を変更し、WSL側で作成したディレクトリも大文字小文字を区別しないようにした。その代わりに、WSL側からディレクトリのケースセンシティビティを制御できるようにした。

 またRS4では、DrvFsのmountコマンドのオプション(マウントオプション)に、ケースセンシティビティ動作を指定できるようになった。マウントオプションは、

・case=dir:新規作成したディレクトリをケースセンシティビティにする
・case=off:ケースセンシティビティは設定しない
・case=force:ディレクトリのケースセンシティビティフラグに関係なく常にケースセンシティビティが有効

の3つで、RS4においては「case=dir」がデフォルト値だった。しかし、RS5では標準設定のマウントオプションをcase=offとして、ケースセンシティビティを有効にすることをやめた。

 また、NTFSの既定の動作として、ディレクトリのケースセンシティビティ属性をサブディレクトリに継承するようになった。これは、ケースセンシティビティが設定されたディレクトリ以下にWindows側でサブディレクトリを作っても、そのサブディレクトリにケースセンシティビティが設定されることを意味する。

 さらにRS5では、WSL側からディレクトリのケースセンシティビティを設定することを可能にした。具体的には「getfattr」「setfattr」というコマンドを使う。

 ただし、標準ではインストールされていないため、aptコマンドを使い手動でインストールする必要がある。

sudo apt install attr

 このコマンドを使うとき、ケースセンシティビティは、「system.wsl_case_sensitive」という属性値で扱われる。ケースセンシティビティを設定する場合には、

setfattr -n system.wsl_case_sensitive -v 1 対象ディレクトリへのパス

とする。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン