2015年9月17日木曜日

PC ルートとその直下のフォルダーの不思議

何気なく、普通に使っている PC ですが、 Windows OS が直轄している ルートフォルダ と その直下 は、不思議な事が起こります。
例えば、Robocopy でフォルダをコピーして見ると、 作業は普通に終了しても、 実際にコピー先のフォルダは現れません。
急いでいる時など、パニクッてしまいますよね。  実際、パニクりましたぁ。
実は、こんな事が起こっていた と、書いて置きますか。


では、実験です。

C ドライブ直下に Explorer でフォルダをひとつ作り、そこに、メモ帳で ひとつ ファイルを作って収めます。
そのフォルダを C:¥Test、ファイルを SampleTest.txt とします。
  別に問題なく 作成 できますね。
次に Command Prompt (cmd.exe) を立ち上げて、 Robocopy で このフォルダを別名称でコピーします。
コマンドは、 Robocopy C:¥Test C:¥Test2 です。
  別に問題なく 作成 できますね。
さぁ、Explorer で、新しくコピーされた筈のフォルダを確認して見ましょうか。
  !!!  ぎゃ~ な、な、ない。  筈です。  ありますね。

では、条件を変えて見ます。
USB メモリを NTFS でフォーマットして、 全く別の PC (別の場所のユーザー名が異なる環境) で取得したファイルで試します。

ファイルのオーナーは 別 PC 別ユーザー (コピー先 PC で登録のない SID) で、Windows の ISO ファイルです。
設定された属性は、 A:A (Attrib) つまり アーカイブ属性のみです。
保存された場所は ドライブルートです。
これをコピーすると、 A:HS (Attrib) となり、 システム属性+隠し属性で、 かつ、 指定保存フォルダも 隠し属性が付加されます。
Robocopy でオプション COPYALL を付けていませんので、 コピーされる属性は DAT で DATSOU ではありません。

Robocopy 自体は正常に終了し、 その後、フォルダの情報更新がされる時点で、消えている(属性が変更されている)様です。


思い出しましょう。
Windows OS が直轄している ルートフォルダ は通常のフォルダと違い、所有者は SYSTEM です。
Robocopy でコピーされたものも、 A:O (Attrib) を明示しない限り、 既定で、 親フォルダの情報を引き継ぎます。
        A:O (Attrib) は  /COPY:DATO  だと思うのですが、 試していません。.
親がルートならば、所有者は SYSTEM システム を引き継ぐのです。
Explorer で明示的にフォルダを作成する場合には、 所有者はユーザーになりますが、
Robocopy の場合には、忠実に、再現する為に、所有者が SYSTEM になり、 親フォルダの情報を継承する結果となります。
すると、ユーザー (管理者権限を持っていても) からは 隠蔽 (表示設定を標準から変更しない限り) されるのです。
これは、 遭遇すれば分りますが、 かなり、焦ります。
既存のフォルダに移動・コピーした場合等、 フォルダごと 全てが、見えなくなる恐怖は、 それは、もう ... 。

この、対応策は、 以下の3方法でしょうか。

  •    ルート直下に ファイルを置かない (フォルダをユーザー所有で作って収める)
  •    親フォルダに システム属性 および 隠し属性がある場合には、 所有者情報ごと コピーする (?)
  •                   同上                   もしくは、 属性指定(解除明示) してコピーする

2番目は、具体的には、  Robocopy U:¥ C:¥Users¥UserName¥Documents¥SomeDir Test*.* /A-:HS  です。

さて、ドライブ直下では、この様に、不思議な事が起こりますが、
元々、ドライブ ルートのフォルダを Explorer や cmd.exe で調べても、 所有者や属性は出て来ません。 *1.
プログラムを書いて見ましたので、 その実行結果を載せて置きます。


気を付けましょう。


でも、不思議ですよね。  だって、ルートって、隠し+システムの属性が付いているのに、普通に 見られるんですから。  !?
やはり、ルートは、 摩訶不思議 です。



[2015/09/17] Robocopy Option で O の扱いが不明なので、追記 (解除指定は検証済み)
[2015/10/06] Robocopy Option で O の指定をしても解消しない為、解除明示  ...  /A-:HS を追記  \ を ¥ 表記に
[2018/11/29]  投稿時の Win7 はそうでしたが、現在の Win10 では表示されますね。 *1.

0 件のコメント:

コメントを投稿