差分
このページの2つのバージョン間の差分を表示します。
| — |
blog:2026:2026-05-23 [2026-05-23 17:15] (現在) Decomo 作成 |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== 256バイト以上のファイル名を持つZFSをFreeBSDにインポートしてみる ====== | ||
| + | 以前、[[blog: | ||
| + | |||
| + | FreeBSDで255バイト超のファイル名でファイルは作れないとして、Linuxで作った256バイト以上のファイル名を持つZFSをFreeBSDにインポートした場合、どうなるのだろうか。インポートできなかったり、クラッシュしたり、データセットが壊れるなんてことは流石にないと思うが、分からんってのが正直なところ。サクッと試してみよう。 | ||
| + | |||
| + | まずはLinux側でlongnameフィーチャーが有効なデータセットと、長いファイル名を持つファイルを作る。 | ||
| + | |||
| + | 環境はこんな感じ。Linuxと言いつつProxmox VEです。 | ||
| + | |||
| + | < | ||
| + | # pveversion | ||
| + | pve-manager/ | ||
| + | |||
| + | # zpool version | ||
| + | zfs-2.3.4-pve1 | ||
| + | zfs-kmod-2.3.4-pve1 | ||
| + | |||
| + | # zpool status zlongname | ||
| + | pool: zlongname | ||
| + | | ||
| + | config: | ||
| + | |||
| + | NAME STATE READ WRITE CKSUM | ||
| + | zlongname | ||
| + | zvol/ | ||
| + | |||
| + | errors: No known data errors | ||
| + | </ | ||
| + | |||
| + | データセットの文字コードはUTF-8にした。 | ||
| + | < | ||
| + | # zfs create -o utf8only=on zlongname/ | ||
| + | </ | ||
| + | |||
| + | UTF-8の場合、日本語1文字はおおむね3~4バイトでエンコードされるので、255バイト=全角85文字となる。255バイトと256バイトのファイル名でファイルを作ってみる。 | ||
| + | < | ||
| + | # touch ' | ||
| + | # touch ' | ||
| + | touch: cannot touch ' | ||
| + | </ | ||
| + | |||
| + | 256バイトの方はファイル名長すぎィと怒られた。longnameフィーチャーを有効にして再度試してみる。 | ||
| + | |||
| + | < | ||
| + | # zfs set longname=on zlongname/ | ||
| + | # touch ' | ||
| + | # ls | ||
| + | 123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345 | ||
| + | 123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345a | ||
| + | </ | ||
| + | |||
| + | 今度は当然ながら問題なく作成できた。このプールをFreeBSDに持っていく。 | ||
| + | |||
| + | FreeBSD側は以下のような感じ。ashiftの警告が出てるけど本質じゃないのでスルーで。 | ||
| + | |||
| + | < | ||
| + | $ freebsd-version -uk | ||
| + | 14.3-RELEASE-p2 | ||
| + | 14.3-RELEASE-p2 | ||
| + | |||
| + | $ zpool status zlongname | ||
| + | pool: zlongname | ||
| + | | ||
| + | status: One or more devices are configured to use a non-native block size. | ||
| + | Expect reduced performance. | ||
| + | action: Replace affected devices with devices that support the | ||
| + | configured block size, or migrate data to a properly configured | ||
| + | pool. | ||
| + | config: | ||
| + | |||
| + | NAME STATE READ WRITE CKSUM | ||
| + | zlongname | ||
| + | gptid/ | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | $ ls / | ||
| + | 123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345 | ||
| + | 123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345a | ||
| + | </ | ||
| + | |||
| + | 開こうとするとファイル名長すぎィと怒られた。 | ||
| + | |||
| + | < | ||
| + | $ cat '/ | ||
| + | cat: / | ||
| + | </ | ||
| + | |||
| + | 256バイトのファイル名でファイルを作ろうとしても、やっぱり長すぎィと怒られた。 | ||
| + | |||
| + | < | ||
| + | $ touch '/ | ||
| + | touch: / | ||
| + | </ | ||
| + | |||
| + | というわけで、ZFSのlongnameフィーチャーを有効にし256バイト以上のファイル名があるデータセットをFreeBSDに持っていくと、ファイルの存在は確認できるが、ファイル操作は不可というのが現状のようだ。 | ||