根据此 Oracle 文档有关可设置的 ZFS 属性,casesensitivity
应该是 ZFS 池创建后可设置的属性,但无论我提供什么值,我都会得到“只读”响应:
$ sudo zfs set casesensitivity=caseinsensitive rpool/USERDATA
[sudo] password for kolin:
cannot set property for 'rpool/USERDATA': 'casesensitivity' is readonly
我知道在现有数据集上改变大小写听起来很疯狂,但当前的需求大于潜在的危险。
答案1
在多次阅读您链接到的文档的区分大小写部分后,我没有看到任何句子暗示文件系统的区分大小写可以在设置后进行更改。
Ubuntu 20.04 使用OpenZFS 0.8.3默认情况下,这使得casesensitivity
在创建池后更改值变得很困难。甚至规定在 Ubuntu 的 ZFS 管理中:
The following three properties cannot be changed after the file system is created, and
therefore, should be set when the file system is created. If the properties are not set
with the zfs create or zpool create commands, these properties are inherited from the
parent dataset. If the parent dataset lacks these properties due to having been created
prior to these features being supported, the new file system will have the default values
for these properties.
casesensitivity=sensitive | insensitive | mixed
Indicates whether the file name matching algorithm used by the file system should be
case-sensitive, case-insensitive, or allow a combination of both styles of matching.
The default value for the casesensitivity property is sensitive. Traditionally, UNIX
and POSIX file systems have case-sensitive file names.
The mixed value for the casesensitivity property indicates that the file system can
support requests for both case-sensitive and case-insensitive matching behavior.
Currently, case-insensitive matching behavior on a file system that supports mixed
behavior is limited to the Solaris CIFS server product. For more information about the
mixed value behavior, see the Solaris ZFS Administration Guide.
casesensitivity
由于多种原因,不允许更改属性。假设文件系统原来是sensitive
或mixed
,然后突然设置为insensitive
,则可能会发生名称冲突:
$ ll
-rw-r--r-- 1 jason jason 220 Feb 25 2020 doc.txt
-rw-r--r-- 1 jason jason 3812 Mar 24 2021 DOC.txt
-rw-r--r-- 1 jason jason 220 Feb 25 2020 Doc.txt
设置为 后insensitive
,会返回哪个文件?默认情况下,insensitive
索引会以小写形式存储所有内容,这意味着您将无法访问DOC.txt
哪个文件更大、哪个文件更新以及大概您想要的文本文件。
另一个原因是整体性能。如果文件系统需要处理可以随意更改大小写的情况,则需要跟踪和管理每次文件交互中的大小写冲突,即使使用 ZFS 的人无意更改该casesensitivity
属性。禁止更改有助于开发团队优化索引以保持快速查找。
最后一个原因(我将提到)与人有关,而不是与技术有关。我们——作为一个物种——擅长制造自己的问题,并将随之而来的麻烦归咎于其他人。与其在一个又一个的论坛上抱怨整个关键数据目录都无法访问,有时最好是预先禁止某种行为。真的想要改变大小写敏感性将学习如何访问隐藏.zfs
目录并手动修改属性,并在 ZFS 池崩溃时感到恐慌,但对于其他人来说,他们必须以不同的方式做事,这也是我建议你做的。
与其更改当前 ZFS 池的大小写敏感度,不如省去很多麻烦,创建一个新的 ZFS 池并为其分配一些存储空间。确保从一开始就将其设置为不区分大小写,这样就没问题了。
例如:
sudo rpool create isamba /dev/sdc -o casesensitivity=insensitive