差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

blog:2026:2026-05-23 [2026-05-23 17:15] (現在)
Decomo 作成
行 1: 行 1:
 +====== 256バイト以上のファイル名を持つZFSをFreeBSDにインポートしてみる ======
  
 +以前、[[blog:2025:2025-09-13|FreeBSDではlongnameフィーチャーは使えない]]という話をした。
 +
 +FreeBSDで255バイト超のファイル名でファイルは作れないとして、Linuxで作った256バイト以上のファイル名を持つZFSをFreeBSDにインポートした場合、どうなるのだろうか。インポートできなかったり、クラッシュしたり、データセットが壊れるなんてことは流石にないと思うが、分からんってのが正直なところ。サクッと試してみよう。
 +
 +まずはLinux側でlongnameフィーチャーが有効なデータセットと、長いファイル名を持つファイルを作る。
 +
 +環境はこんな感じ。Linuxと言いつつProxmox VEです。
 +
 +<code>
 +# pveversion
 +pve-manager/9.1.4/5ac30304265fbd8e (running kernel: 6.17.4-2-pve)
 +
 +# zpool version
 +zfs-2.3.4-pve1
 +zfs-kmod-2.3.4-pve1
 +
 +# zpool status zlongname
 +  pool: zlongname
 + state: ONLINE
 +config:
 +
 +        NAME                      STATE     READ WRITE CKSUM
 +        zlongname                 ONLINE               0
 +          zvol/zvm/vm-100-disk-0  ONLINE               0
 +
 +errors: No known data errors
 +</code>
 +
 +データセットの文字コードはUTF-8にした。
 +<code>
 +# zfs create -o utf8only=on zlongname/longname
 +</code>
 +
 +UTF-8の場合、日本語1文字はおおむね3~4バイトでエンコードされるので、255バイト=全角85文字となる。255バイトと256バイトのファイル名でファイルを作ってみる。
 +<code>
 +# touch '123456789~1~123456789~2~1234 56789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345'
 +# touch '123456789~1~123456789~2~1234 56789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345a'
 +touch: cannot touch '123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345a': File name too long
 +</code>
 +
 +256バイトの方はファイル名長すぎィと怒られた。longnameフィーチャーを有効にして再度試してみる。
 +
 +<code>
 +# zfs set longname=on zlongname/longname
 +# touch '123456789~1~123456789~2~1234 56789~3~123456789~4~123456789~5~123456789~6~123456 789~7~123456789~8~12345a'
 +# 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
 +</code>
 +
 +今度は当然ながら問題なく作成できた。このプールをFreeBSDに持っていく。
 +
 +FreeBSD側は以下のような感じ。ashiftの警告が出てるけど本質じゃないのでスルーで。
 +
 +<code>
 +$ freebsd-version -uk
 +14.3-RELEASE-p2
 +14.3-RELEASE-p2
 +
 +$ zpool status zlongname
 +  pool: zlongname
 + state: ONLINE
 +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                                     ONLINE               0
 +          gptid/737d89da-f0e3-6c4d-a86d-426d41479aa8  ONLINE                block size: 512B configured, 4096B native
 +</code>
 +
 +''ls''では普通に255バイト超のファイル名も表示された。ちょっと意外。
 +
 +<code>
 +$ ls /zlongname/longname/
 +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
 +</code>
 +
 +開こうとするとファイル名長すぎィと怒られた。
 +
 +<code>
 +$ cat '/zlongname/longname/123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345a'
 +cat: /zlongname/longname/123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345a: File name too long
 +</code>
 +
 +256バイトのファイル名でファイルを作ろうとしても、やっぱり長すぎィと怒られた。
 +
 +<code>
 +$ touch '/zlongname/longname/123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345b'
 +touch: /zlongname/longname/123456789~1~123456789~2~123456789~3~123456789~4~123456789~5~123456789~6~123456789~7~123456789~8~12345b: File name too long
 +</code>
 +
 +というわけで、ZFSのlongnameフィーチャーを有効にし256バイト以上のファイル名があるデータセットをFreeBSDに持っていくと、ファイルの存在は確認できるが、ファイル操作は不可というのが現状のようだ。
  • blog/2026/2026-05-23.txt
  • 最終更新: 2026-05-23 17:15
  • by Decomo