2023年 05月 06日
mac, Linux+samba, Windows のファイル名の問題:開けない共有のフォルダ、ファイル
「開けない共有ファイル、フォルダ」
Linux では ,", * > , < , |, /,)(,,{,} , スペースなど直接使えない文字はありますが、"" で囲うと使える文字があります。スペースも入ってしまう。一般的には "¥0", "¥/" 以外は使ってしまうことができるそうです。 Linux で Samba や NAS の基本 OS が Linux の場合、かなりファイル名の自由度は高いため、マルチベンダー構成のネットワークのファイルサーバを使うと mac や Linux では開けるけど 「Windows では開けないファイル・フォルダ」が沢山作られる可能性があります。
ということでいけないファイル名を作ってみます。
Linux のターミナルで samba の共有ディレクトリの中に、 "C:" という、明らかに妖しいディレクトリを作ってみます。これを Windows11 と macOS のファインダからみたらこんなふうになりました。
"C:" というディレクトリが "CQFO6Q~M" というフォルダ名としてエクスプローラから見えています。ついでにエクスプローラから、コピー・ペーストすると、CQFO6Q~M というフォルダ名に変わってコピーされています。C: フォルダは別な”使える名前”に変換されてアクセスできます。
面白いのは、 mac のファインダです。 "C:" というフォルダは、ファインダで作れなくても、テキストターミナルからは作れてしまいます。ファインダからは不可視ファイルとして存在していました。
Linux は "C:" というファイル、ディレクトリ名は許されますが、 Windows ではドライブレターとして認識されます。mac 場合、テキストターミナルからは作れますが、ファインダからは C: というフォルダは作れません。なかなか面白いものを見つけてしまった。
で、ファインダで見ると、"C:" は "C/" に見えますね。これもなるほど新発見です。
ついでに "LPT1: "というディレクトリ名は、エクスプローラでもファインダでも”L5E7T1~Q” というディレクトリに見えます。ちゃんとエクスプローラからは削除できたので、問題ないようですが。
ここで、よくやるファイルのコピー・ペーストをこのフォルダでしてみたら
「出たな、妖怪!」
コピー・ペーストすると filenameコピー.txt が作られるのですが、このファイルの生成に問題があるようで、無効なファイル名となってしまいます。
ちなみに C: ディレクトリのファイルをアプリケーションから別名で、"C:" フォルダに保存すると、Windows のエクスプローラは、”もうダメポ”という感じで見事にコケました。別な普通のフォルダに保存したり、C: フォルダへの上書き保存はうまく動きます。
Linux の samba 環境から、怪しい記号だけのディレクトリを作って、 Windows11 のエクスプロータや、mac のファインダからどの様に見えるか確認してみました。
knakaj@corsair:/share/test> mkdir "|"knakaj@corsair:/share/test> mkdir ">"knakaj@corsair:/share/test> mkdir ")"knakaj@corsair:/share/test> mkdir "!"knakaj@corsair:/share/test> mkdir "?"knakaj@corsair:/share/test> mkdir "*"knakaj@corsair:/share/test> ls -al合計 48drwxr-xr-x 2 knakaj users 6 4月 30 16:38 !drwxr-xr-x 2 knakaj users 6 4月 30 16:37 )drwxr-xr-x 2 knakaj users 6 4月 30 16:38 *drwxr-xr-x 8 knakaj users 88 4月 30 16:38 .drwxrwxrwx 28 root root 32768 4月 25 10:58 ..drwxr-xr-x 2 knakaj users 6 4月 30 16:37 >drwxr-xr-x 2 knakaj users 6 4月 30 16:38 ?drwxr-xr-x 2 knakaj users 6 4月 30 16:37 |knakaj@corsair:/share/test>
パイプやワイルドカードに相当する記号文字をフォルダ名に使うと、見事に別な名前にしてくれます。
オペレーティングシステムは「使えない文字」が幾つかありますが、いずれもファイルシステムの制限ではなく、オペレーティングシステムの、エクスプローラやファインダなどの、ファイル操作アプリケーションやプログラム API 、コマンドシェルの制限であって、使えないファイル名であっても作ってしまおうと思えばファイルはできてしまうのです。これが、WIndows と mac 、Linux などの混在環境では色々と楽しくても笑えないトラブルを引き起こしてくれます。
以前、LINUX と Windows のデュアルブート環境で GIMP のファイルのやり取りをしていたのですが、GIMP はやらかしてくれた事があります。当時の openSUSE の gnome 画面ハードコピーの保存ファイル名に ":"が含まれるので、 Windows 側 からアクセスできない。
オペレーティングシステムの、エクスプロータやファインダと言ったファイルマネージャや、アプリケーションから呼び出す API は「扱えない文字」を排除します。しかしサードパーティ製のディスク管理システム、例えば ntfs-3g のようなもので Linux から NTFS ファイルシステムでアクセスすると、 Windows 側からアクセスできないファイル名であってもファイルシステムにアクセスできてしまいます。
NTFS では使えない文字がある:の嘘。Windows と Linux のデュアルブート
実際に、Windows の"共有"フォルダに macOS 側からマウントして、テキストターミナルから "C:" というイケナイディレクトリは作れてしまいます。もっともエクスプローラ側から見ると "C・" と言う、読み込めないフォルダ名として存在しています。フォルダごとコピー・ペーストできました。コピーすると "C:コピー"になります。mac のファインダからは "C:/" に見えまが、mac OS 上では C: と言うディレクトリとして存在します。別に NTFS 上では : 付きファイル名は作れないのではなく、エクスプローラや API が許していないのです。他のシステムからアクセスが許可されていれば、 NTFS であっても、「使えない文字記号ファイル」は作れてしまいます。おそらく WIndows ファイルサーバの管理者が macOSなどの別なシステムにアクセスを許可した時に、無邪気なエンドユーザがやらかしてくれる悪夢かもしれません。
※ 怖くてWindows7 のテスト環境でやりましたが... ちょっと遊んでみたらなんだかすごいことになっています。
古い Windows では、エクスプローラで共有ファイルサーバの中を検索するだけで、この様な Windows では”使っては"イケナイファイル名”を見つけてしまうと、ブルースクリーンに陥るケースが良くありました。
検索途中でいきなりブルースクリーンですから、何が原因かわからない。
これが Windows クライアントならまだ、よくある意味不明なトラブルで済みますが、ファイルサーバの GUI からエクスプローラを使うと、サーバ自体が落ちるわけで、深刻なトラブルに陥ります。バックアップ途中でブルースクリーンですから、当然バックアップソフトウェアの不具合だと疑ってしまいますよね。
今の Windows11 では何とか回避していますが、ファイルシステム上の名前とエクスプローラ上での表記が違ってしまいます
基本的には Windows 上では、: や | と言った文字は使えませんが、最近の WIndows では、これを誤魔化してアクセスできる様に回避しています。繰り返しますが、 一般に言われるように "Windowsで使えない文字" は NTFS の仕様ではなく Windows のエクスプローラやプログラム API の仕様であり、ファイルシステムとしては許可されてしまいます。
例えば、UNIX 系システムが吐き出したログやらエクスポートしたデータなどでは、 ":" が入っているケースなんかは普通でしょう。これらが CIFS マウントされた Windows サーバに保管されるように仕掛けられたら、サーバの中には意味不明なファイルが沢山作られてしまうわけです。
SUSE Linux から Samba/Windows 共有をマウントしてバックアップ https://islandcnt.exblog.jp/241208919/
「ソ申票」などのいわゆる「5C文字」も良く問題になりました。これらの文字は、Shift JIS の中に、バックスラッシュ(¥)の5Cコードが含まれるため発生する問題です。
また、①などの丸数字や、"I" , "II" などのローマ数字、"〒"マークや "(株)" などの機種依存の特殊記号もファイル共有ではよく問題になりました。最近は日本語コードがほとんど UTF で処理されるためほとんど問題になりませんが、やはりファイル共有では思わぬ問題を起こすため、使うべきではないもの、という迷信に近いものになります。
以前は顔文字なども問題になりましたが、顔文字・絵文字もグローバル標準になってきたせいか、問題にはなりませんが、そもそもファイル名に絵文字を使う文化がどうなのか? という所は注意したいですね。
一般的には Windows 系 OS のファイルの長さ制限は、260 "文字"とされていますが、グループポリシーで制限されているだけで、この制限を解除すると、最大 32767 文字が利用できます。これがバイト数なのか、Unicode での「文字数」なのかは残念ながらよくわかりません。
ファイル名とパスの最大長の色々
実際、Linux 上では 4096 バイトの最大パスと、255 バイトのファイル名が使えるので、Linux 側から ”長いディレクトリパス¥長いファイル名.txt” を作ってみると、Windows11 のエクスプローラ側から、フォルダを開いて、別なフォルダにコピーはできました。しかし長いパス上のファイルをアプリケーションから直接開いたり、フォルダを作ったりはできません。
フォルダが開けるのは”偉い”と思いますが、そこにファイルがあるのに開けないというのは気味が悪いものです。
mac の場合、1024 文字以内のパスの長さであればファイルも開けるし、フォルダの作成もできます。ファインダで長いフォルダを作った場合、”これ以上の長さは勘弁してくれ”とファインダ側が音を上げました。
ここで分かるのは、 Linux > mac > Windows の順で、最大のフォルダの長さが決まるので、 Linux はもちろん、mac でも Samba や NAS の深いところにディレクトリが掘れて、ファイルが保管できるのですが、そこまでは Windows ではアクセスできない、という事になります。
ファイル名が長くて嬉しい事なんて何もありません。サーバ管理者としては長いファイル名は迷惑です。
退職した奴が、自分のホームディレクトリに深くてリードオンリーのフォルダを深く作って退職したのがいましたが、殺したろか、って思ったものです。
まず、長すぎるファイル名、フォルダ名によってアクセスできないファイルがある場合、問題が発生しているフォルダ名より上の階層で短いファイル名、フォルダ名にリネームできるかどうか試してみましょう。
¥長ぁーぃフォルダ名だ長ぁーぃフォルダ名長ぁーぃフォルダ名¥目的のファイル
を
¥短いフォルダ名¥目的のファイル
に変えてみます。
もう一つ、階層の深さで問題になっている場合、
¥dir1¥dir2¥dir3¥flename.txt
の dir3 を最上位のディレクトリに移動してみる、という事です。
Linux > mac > Windows と順に、ファイル名の許容度が下がります。大抵、ファイル名が問題でアクセスできないのは Windows のエクスプローラです。でも mac でアクセス出来るのであれば、mac のファインダなら問題ないでしょうし、ファインダでダメでも Linux + Samba ならファイルマネージャ nautilus や、ssh でログインしてファイルの操作ができるかどうか試してみます。
NAS の場合でも SSH で接続できるなら、面倒かもしれませんが、コンソールから名前を変えたり、ディレクトリを移動させたりができるかを確かめます。どうやって消せって言うんだ?
たまに、全くファイル名の変更ができない、全くファイルを開くことができないファイルというのが偶に存在します。消すこともできないゾンビです。もうこの様なファイルは、そもそも開けず放置されているため、ほとんどのケースでは不要なファイルがゾンビ化して残っているケースが多いでしょう。
しかし、消せないファイルというのは邪魔ですよね。特にバックアップなどの操作で支障があったり、サーバの移行の際に邪魔になります。
このようにゾンビ化したファイルは、もうフォーマットする以外にファイルを削除する方法がありません。ほとんど不要なファイルなので、ルートディレクトリに近い階層に
¥zombie.deleteme
移動させてしまいます。バックアップやサーバの移行などの際は、このディレクトリを除外して操作したり、フォルダごとリードオンリーや不可視ディレクトリにしてしまうのが良いでしょう。
共有サーバーにある mac のリソースフォークを削除する