AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1163715
Accepted
gcb
gcb
Asked: 2024-08-10 00:13:41 +0800 CST2024-08-10 00:13:41 +0800 CST 2024-08-10 00:13:41 +0800 CST

mdadm:无法将值“arch1:2021”设置为 devname。原因:与 POSIX 不兼容。忽略值

  • 772

我把一个旧的 raid 阵列插入到一个新的系统并在尝试用它做任何事情时都会出现这个错误mdadm。

# mdadm --detail --scan 
ARRAY /dev/md/arch1:2021 metadata=1.2 UUID=c4c7cbde:5f6913a9:eb1c82ff:8fe6cd45

# mdadm --detail 
mdadm: Value "arch1:2021" cannot be set as devname. Reason: Not POSIX compatible. Value ignored.
mdadm: No devices given.

一切仍然正常。我可以安装和使用阵列。“不合规”的名称可以正常显示为设备文件

 # ls -la /dev/md/
total 0
drwxr-xr-x  2 root root   60 2024-08-09 03:16 .
drwxr-xr-x 20 root root 4580 2024-08-09 03:16 ..
lrwxrwxrwx  1 root root    8 2024-08-09 03:16 arch1:2021 -> ../md127

我可以使用的设备文件

 # mdadm --detail /dev/md/arch1\:2021 
/dev/md/arch1:2021:
           Version : 1.2
     Creation Time : Wed Jul  7 06:29:08 2021
        Raid Level : raid1

以最安全的方式更新名称的最佳方法是什么?

raid
  • 2 2 个回答
  • 227 Views

2 个回答

  • Voted
  1. Nikita Kipriyanov
    2024-08-10T12:28:52+08:002024-08-10T12:28:52+08:00

    此冒号将所属主机名与阵列名称分隔开: 。它作为字段<hostname>:<name>存储在MD 1.x 超级块中(DDF 外部元数据格式也支持此字段)。它是超级块(有关阵列名称的唯一真实来源),而不是。后者中的条目必须与超级块中存储的内容一致,系统才能激活阵列。生成正确条目的最简单方法是使用的输出。或者只是在条目中省略该名称参数,而使用,并且仅依赖于文件系统 UUID 或 LVM 或阵列上的任何更高级别的结构。set_namemdadm.confmdadm --examine --scanARRAY /dev/mdN UUID=...

    创建时,您只需提供后面的“名称”部分,而主机名是自动获取的,但您也可以强制执行:

    mdadm --create /dev/mdxxx --name=2021 --homehost=arch1 ...
    

    将存储arch1:2021。

    在激活期间,如果当前系统主机名与存储的主机名相同,则 中的符号链接会/dev/md/省略主机名(看起来就像/dev/md/<name>),否则会包含主机名,就像您的情况一样。您可以HOMEHOST hostname在 中设置mdadm.conf,以使用该主机名从存储在超级块中的名称中删除,而不是当前系统主机名。

    另请参阅这个精彩的答案

    • 3
  2. Best Answer
    frostschutz
    2024-09-14T16:55:10+08:002024-09-14T16:55:10+08:00

    mdadm: Value "arch1:2021" cannot be set as devname. Reason: Not POSIX compatible. Value ignored.

    此错误消息是在 mdadm v4.3 中引入的。尽管开发人员承认在某些情况下这是一种倒退,但他们也明确表示它不会消失,所以 — — 我想,只能接受它了。

    除了名称中的特殊字符外,mdadm v4.3 还会对大于 127 的数字产生影响。在最近的补丁中,这个数字被慷慨地扩展到 1024 — 然而在 mdadm v4.3 之前,您最多可以使用 1048575(内核限制)。


    在您的情况下, ifarch1:2021并非旨在表示/dev/md2021,而是使用 2021 作为名称,不幸的是,mdadm 在其元数据link1 link2中不区分主机名、编号(首选次要)或名称。所有这些都进入同一个 32 字节字符串,并由解释决定。

    因此,如果您希望使用 mdadm 名称,则名称应避免使用所有特殊字符,也应避免使用数字。因此,如果可能的话,请仅使用 az。如果您必须使用数字,请确保它不是名称中的第一个字符(使用foo123而不是仅使用123)。


    mdadm 名称(在元数据中)只能在组装时更改。如果阵列已在运行,则必须先停止它,这只有在不使用时才能完成,因此除非您启动救援系统,否则永远都无法停止。

    那么它应该是这样的,但是...:

    # mdadm --stop /dev/md42
    # mdadm --assemble --update=name --name=myraid /dev/md42
    Segmentation fault (core dumped)
    

    分段错误???嗯,这显然是不应该发生的HOMEHOST <none>... 这个错误(已在 git 中修复)仅当你在 mdadm.conf 中设置或你的主机名为空时才会触发。

    因此,在此修复程序发布之前,您或多或少只能将mdadm主机名包含在数组名称中。除非hostname:arrayname长度超过 32 个字节,因为元数据无法存储更长的字符串。

    因此,您可以通过传递长度为 32 字节的主机名来作弊:

    # mdadm --assemble --update=name --name=myraid --homehost=thequickbrownfoxjumpsoverthelazydog /dev/md42
    

    其结果如下:

    # mdadm --detail /dev/md42
                  Name : myraid
    

    因此,如果您想摆脱arch1:自己的名下的一切,那么这是目前唯一的方法。


    将您的样式更改/etc/mdadm.conf为使用/dev/md0(数字样式,数字在范围内,0-127因为较大的数字会无缘无故被拒绝)。或者使用(符号链接)命名样式/dev/md/name和非数字名称。

    # numeric style:
    ARRAY  /dev/md42  UUID=cad97e3d:197232e1:b595f6f6:f14a0b9d
    
    # named style:
    ARRAY  /dev/md/name  UUID=cad97e3d:197232e1:b595f6f6:f14a0b9d
    

    在组装命名数组时,mdadm将自行选择一个数字。对于每个数字,mdadm 都会进行解析/proc/mdstat以检查它是否已被使用,直到找到一个空闲的数字 — 这对于组装 3 个数组来说还算可以,但对于组装 300 个数组来说就不太合适了,因为那时 mdstat 会被解析数千次。

    /dev/md/name然后将是一个符号链接/dev/md127(或其他数字)。命名数组也将显示为/dev/md127下方/proc/mdstat,并且这些数字可能会发生变化,因此在管理多个数组时请考虑到这一点。


    还有第三种命名风格:

    CREATE  names=yes
    ARRAY  /dev/md_name  UUID=cad97e3d:197232e1:b595f6f6:f14a0b9d
    

    这会将名称直接放入设备名称中/dev/md_name。这很不寻常,因为没有其他设备驱动程序这样做。这也是唯一一种以名称/proc/mdstat而不是数字显示的样式。

    但是这种风格在 中完全没有记录man 4 md。并且man 5 mdadm.conf不鼓励使用它,因为其他工具可能不需要这种风格。所以应该避免使用它。


    总而言之,mdadm它对名称的支持非常差。您无法设置它们,无法更改它们,除非经过很多麻烦,实用mdadm程序不会使用它们,甚至不会显示它们。事实上,它什么也不显示,你应该看看/proc/mdstat,因为mdadm它本身甚至不能向您显示一个漂亮的数组及其状态列表。

    这与其他实用程序实际上帮助您管理事物并在执行过程中显示名称的方式相差甚远,甚至没有人关心数字。

    • 1

相关问题

  • Windows 文件服务器性能调优

  • SSD TRIM 的硬件 RAID 控制器支持

  • 了解磁盘队列长度

  • 使用混合磁盘突袭 0?

  • Windows Server 2008 Hyper-V 虚拟化服务器的最佳 RAID 配置?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve