ZFS 区分大小写应该在创建后设置,但它是“只读”的

ZFS 区分大小写应该在创建后设置,但它是“只读”的

根据此 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由于多种原因,不允许更改属性。假设文件系统原来是sensitivemixed,然后突然设置为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

相关内容