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 / 问题 / 750764
Accepted
user121391
user121391
Asked: 2016-01-22 05:41:15 +0800 CST2016-01-22 05:41:15 +0800 CST 2016-01-22 05:41:15 +0800 CST

如果 cfgadm 状态为断开连接,如何在 Solaris 中自动检测插入的 SATA 磁盘?

  • 772

我的目标是结合 SATA 磁盘在小型 OpenSolaris NAS(在 HP Microserver N54L 上运行 OmniOS + napp-it)上自动执行备份例程。

背景:

我安装了其中一个 5.25" -> 3.5" 无托架 HDD 托盘,其中包含一个简单的 SATA 或 SAS/SATA 背板,带有一个端口、一个电源按钮和一些 LED(电源和 HDD 活动)。zfs send/recv当我手动启动它时,这个脚本工作正常。

我想进一步自动化该过程,因为 NAS 没有直接连接 VGA 或串行控制台,插入磁盘、返回桌面系统、登录 Web 界面或 SSH 并手动启动脚本很繁琐. 通过 cron 作业定时启动不是一个选项,因为备份的天数可能略有不同(忘记磁盘、假期等)。所以备份应该在插入磁盘后立即开始。

问题:

在我cfgadm用来连接 + 配置和稍后取消配置 + 断开磁盘的脚本中。如果我只插入磁盘并且它旋转起来,我无法知道磁盘在那里。我已经考虑过的可能解决方案:

  1. cfgadm -f -c connect通过使用和检查错误结果,每 x 分钟连续探测一个新磁盘和 zpool 。不是很优雅。
  2. 每 x 分钟检查/var/adm/messages一次并查找设备路径或 AHCI。不可能,因为只有在手动连接设备时才会写入消息。
  3. 使用iostat -En. 显示磁盘,但我必须使用 grep 获取确切的序列号,因为它没有列出端口信息。还需要每 x 分钟完成一次。
  4. 使用cfgadmwith SELECT 语法过滤容器状态。不起作用,因为插入不会触发任何事情(也许背板太便宜了)。
  5. 识别机箱的电源开/关。没关系,但我不知道如何做到这一点。
  6. 重新映射电源按钮或向机器添加另一个按钮。可以工作,但我也不知道该怎么做。

我想我需要两件事:

  • 结合识别磁盘和端口状态的可靠方法(因此仅检测到正确插槽中的正确磁盘)
  • 一种注册此检测并触发事件的方法(启动 shell 脚本)

这可能吗?如果没有,您会建议什么替代方案?

最终解决方案(2015-01-26 更新):

对于将来遇到类似问题的任何人:

  1. 在 OmniOS 中启用 AHCI 热插拔,如 gea接受的答案中所述。
  2. 使用我自己的答案syseventadm中的详细说明在磁盘联机时触发备份脚本。
  3. 确保您的电缆、控制器和磁盘没有故障并且可以正常运行(我在使用 WD SE 4TB 磁盘和板载 AHCI SATA 控制器时遇到问题,导致WARNING: ahci0: ahci_port_reset port 5 the device hardware has been initialized and the power-up diagnostics failed系统日志中出现随机消息)。
hard-drive
  • 3 3 个回答
  • 1660 Views

3 个回答

  • Voted
  1. Best Answer
    gea
    2016-01-23T02:05:58+08:002016-01-23T02:05:58+08:00

    板载 Sata/AHCI 支持热插拔,但默认情况下在 OmniOS 中禁用此功能:要启用将以下行添加到 /etc/system

    设置 sata:sata_auto_online=1

    • 3
  2. ewwhite
    2016-01-22T05:51:08+08:002016-01-22T05:51:08+08:00

    有趣的问题...有点科学实验,因为我可能只是使用 USB 或远程发送或按计划进行...

    但是在您的情况下,我根本不会尝试通过cfgadm或日志解析方式“查找”磁盘。那是不可扩展的。

    我只是用一个独特的 ZFS 池名称和脚本逻辑来命名可移动磁盘zpool import。在 Linux 下的 ZFS 中,池导入进程是一个系统服务/守护进程。但是定期运行它是没有成本的。它将检测驱动器和关联的池。

    我希望您在完成备份后也导出池。这将涵盖驱动器在服务器中保留多个备份周期的情况。就像在其驱动器中留下备份磁带一样。

    • 1
  3. user121391
    2016-01-23T05:36:09+08:002016-01-23T05:36:09+08:00

    我将添加此答案以记录我发现的有关监视事件的内容(在其他情况下也可能有用):

    在尝试在 unix/linux.SE 上提问时,我注意到一个关于在 Linux 上使用来监视内核事件的有用线程。udev作为 Solaris 的等效工具,我偶然发现了使用syseventadmwhich watch for sysevents 和 triggers defined actions/scripts 的建议。


    起初,除了手册页的副本和一些关于 Xen Hypervisor 问题的讨论之外,我没有找到太多内容,但支持的事件列在/usr/include/sys/sysevent/eventdefs.h(或在线/usr/src/uts/common/sys/sysevent/eventdefs.h的各种 repos)和该目录中的其他文件中。

    使用手册页中的第一个示例,syseventadm add -c EC_zfs -s ESC_ZFS_scrub_start /path/to/script.sh \$pool_name我成功地测试了一个示例事件,该事件在每次启动清理时触发并将池名称作为第一个参数返回。


    经过反复试验,我找到了监视新添加磁盘的正确方法:

    syseventadm add -c EC_dev_add -s disk /path/to/script.sh \$version \$dev_name \$phys_path \$driver_name \$instance
    syseventadm restart
    

    之后的所有disk内容都是可选的,并直接$1作为$5.

    现在只要新添加的磁盘上线,就会触发脚本,脚本可以检查设备ID是否正确(可选),然后按名称导入池。

    • 1

相关问题

  • 总大小(磁盘)与总大小(媒体)

  • Linux:“发现重复的 PV XXXXYYYYY:用户 /dev/sdb1 而不是 /dev/sda1”

  • Windows C:驱动器大小

  • 了解磁盘队列长度

  • md5sum 重复为同一台机器上的同一文件提供不同的校验和

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