|
|
|
blog:2025:2025-09-13 [2025-09-13 18:30] Decomo 作成 |
blog:2025:2025-09-13 [2025-09-14 11:56] (現在) Decomo |
| ====== FreeBSD 14.3ではZFSのlongnameフィーチャーは事実上非対応っぽい? ====== | ====== FreeBSD 14.3ではZFSのlongnameフィーチャーは事実上非対応っぽい? ====== |
| |
| [[https://github.com/openzfs/zfs/releases/tag/zfs-2.3.0|OpenZFS 2.3.0]]で、ファイル名・ディレクトリ名(以後、省略してファイル名と記述する)の最大長を1023バイトに拡張する[[https://openzfs.github.io/openzfs-docs/man/master/7/zpool-features.7.html#longname|longnameフィーチャー]]がリリースされた。 | [[https://github.com/openzfs/zfs/releases/tag/zfs-2.3.0|OpenZFS 2.3.0]]で、個人的に待望の[[https://openzfs.github.io/openzfs-docs/man/master/7/zpool-features.7.html#longname|longnameフィーチャー]]がリリースされた。 |
| |
| UNIX系のファイル名の最大長は伝統的には255バイトとされており、''NAME_MAX''マクロで定義されている。FreeBSDの場合は[[https://github.com/freebsd/freebsd-src/blob/releng/14.3/sys/sys/syslimits.h#L55|/usr/src/sus/sys/syslimits.h]]に実体がいる。なお、ここで注意が必要なのは、ファイルパスの最大長は''PATH_MAX''と別に定義されており、FreeBSDの場合は1023バイトとなっている。本記事で取り扱うのは、あくまでファイル名の最大長の方である。 | ZFSにおけるファイル名・ディレクトリ名(以後、まとめてファイル名と表記する)の最大長は、UNIX系の習わし(?)に沿って255 bytesとなっているが、longnameフィーチャーを有効にすると、その制約を打ち破って1023 bytesまで使えるようになる。単純に上限が固定的に引き上げられるといったものではなく、255 bytes超の名前があると機能がアクティブとなり、無くなれば非アクティブになるといった、動的な挙動となっているようだ。 |
| |
| 現代的なUNIX系のファイルシステムでは、必ずしもこの制限に縛られることはないようだが、有名どころの[[https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits|FSは大抵255バイトが上限]]で、我らがZFSもご多分に漏れずそうなっている。 | この255バイトという伝統的な値は''NAME_MAX''マクロに由来し、FreeBSDの場合は[[https://github.com/freebsd/freebsd-src/blob/releng/14.3/sys/sys/syslimits.h#L55|/usr/src/sus/sys/syslimits.h]]で定義されている。厳密にいうと、ZFSでの制約は自身が定義している定数由来なのだが、''NAME_MAX''を意識した値であろうと思われる。なお、ここで注意が必要なのは、ファイルパスの最大長は''PATH_MAX''と別に定義されており、FreeBSDの場合は1023バイトとなっている。本記事で取り扱うのは、あくまでファイル名の最大長の方である。 |
| | |
| | 現代的なUNIX系のファイルシステムでは、必ずしもこの制限に縛られることはないようだが、有名どころの[[https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits|FSは大抵255バイトが上限]]となっている。 |
| |
| 255**バイトも**あって何が不満かと言われれば、ファイル名の文字エンコーディングにUTF-8を採用すると、最大文字数がだいぶ心許ないってこと。UTF-8の場合、日本語の文字は大半が3バイト、場合によっては4バイトで表現されるため、いわゆる全角換算で85~63文字に目減りしちゃうんですな。この問題はとりわけWindowsとファイル共有した時に顕在化しやすい。というのも、Windowsの主要FSの最大長はUTF-16で255**文字**((UNCは話がややこしくなるので考慮しない))なので、つい長い名前つけちゃって、FreeBSD+Sambaな共有フォルダにコピーしようとして失敗、なんてことが年に数回起きる。これが1023バイトならUTF-8でも341~255文字となり、大変都合がいいわけですよ。 | 255**バイトも**あって何が不満かと言われれば、ファイル名の文字エンコーディングにUTF-8を採用すると、最大文字数がだいぶ心許ないってこと。UTF-8の場合、日本語の文字は大半が3バイト、場合によっては4バイトで表現されるため、いわゆる全角換算で85~63文字に目減りしちゃうんですな。この問題はとりわけWindowsとファイル共有した時に顕在化しやすい。というのも、Windowsの主要FSの最大長はUTF-16で255**文字**((UNCは話がややこしくなるので考慮しない))なので、つい長い名前つけちゃって、FreeBSD+Sambaな共有フォルダにコピーしようとして失敗、なんてことが年に数回起きる。これが1023バイトならUTF-8でも341~255文字となり、大変都合がいいわけですよ。 |
| |
| そんなわけで、[[blog:2024:2024-03-20|個人的にlongnameフィーチャーには大変期待していた]]のだが、どうもFreeBSD 14.3-RELEASE時点では事実上使えないようだ。 | そんなわけで、longnameフィーチャーには大変期待していたのだが、どうもFreeBSD 14.3-RELEASE時点では事実上使えないようだ。 |
| |
| ZFS自体の255バイト制限はなくなったものの、FreeBSDの[[https://github.com/freebsd/freebsd-src/blob/5982521fe3dd3f1627bbe29ee8c3b190a24e3963/sys/kern/vfs_lookup.c#L1134|VFSレイヤーに255バイト制限が残っていて]]、この影響を受ける模様。実際、PortsからOpenZFS 2.3.0入れて試してみたが255バイト制限は突破できなかった…。Sambaは''NAME_MAX''等の直接的な制限は受けないようだし、[[https://note.com/pure_crab3639/n/nc97d3d2610ff|Linux+Sambaでは問題なく機能している]]ようだし、やはりFreeBSD側の制限の可能性が大。 | ZFS自体の255バイト制限はなくなったものの、FreeBSDの[[https://github.com/freebsd/freebsd-src/blob/5982521fe3dd3f1627bbe29ee8c3b190a24e3963/sys/kern/vfs_lookup.c#L1134|VFSレイヤーに255バイト制限が残っていて]]、この影響を受ける模様。実際、PortsからOpenZFS 2.3.0入れて試してみたが255バイト制限は突破できなかった…。Sambaは''NAME_MAX''等の直接的な制限は受けないようだし、[[https://note.com/pure_crab3639/n/nc97d3d2610ff|Linux+Sambaでは問題なく機能している]]ようだし、やはりFreeBSD側の制限の可能性が大。 |