我怎么知道Linux中的下一个设备映射器?

问题描述 投票:0回答:2

我正在尝试编写一个ansible playbook来自动扫描新磁盘并将其放入现有的VG中而不是扩展它。

不幸的是我无法弄清楚Linux如何知道下一个设备映射器(例如/ dev / sdc),以创建一个完美的ansible playbook来为我执行这个任务。

在线扫描新磁盘:

echo 0 0 0 | tee /sys/class/scsi_host/host*/scan

有人对此有任何想法吗?

谢谢。

linux ansible sysadmin
2个回答
1
投票

您使用的是令人困惑的术语。设备映射器是LVM使用的框架,偶尔可以使用device mapper作为由使用设备映射器的应用程序创建的设备的名称。它们通常可以在/ dev / mapper中找到。

/ dev / sdc(和allo其他/dev/sd[a-z][a-z]?)只是块设备。它们可以被LVM用于创建PV(物理卷),但它们不是“设备映射器”。

现在回答:

Linux使用“next alphabet in alphabet letter”作为新设备。不幸的是,内核和用户的“下一个可用”可能是另一回事。如果设备已被拔出(或死亡,或重置后重新扫描)并且底层设备被标记为仍然使用,则Linux将使用“下一个字母”,因此重新插入的/dev/sdc可能显示为/dev/sdd,或者,如果/dev/sdd忙,/dev/sde,down到/dev/sdja(我不知道它在哪里结束,但没有像/dev/sdzz AFAIK这样的东西)。

如果要识别设备,可以使用udev提供的符号链接。它们存在于/dev/disk中并反映了识别设备的不同方式: - by-id - 使用设备ID(通常是名称和供应商) - by-partuuid - 由磁盘上现有分区的UUID - by-uuid - 由每个驱动器生成的UUID生成 - by-path - by这是合乎逻辑的位置。

我最后一个是最好的:如果你将你的设备插在同一个插槽中,它将在/dev/disk/by-path中具有相同的名称,无论供应商,id,现有文件系统和其他块设备的状态如何。

在这里您可以找到几个名称的例子:

  • pci-0000:00:1f.2-ata-3 - 连接到PCI特定控制器的ATA磁盘#3。
  • pci-0000:08:00.0-sas-0x50030480013afa6c-lun-0 - 连接到特定PCI控制器的WWN 0x50030480013afa6c的SAS驱动器。
  • pci-0000:01:00.0-scsi-0:2:1:0 - '奇怪'的scsi设备#2连接到特定的PCI控制器。就我而言,它是LSI的硬件RAID。

如果您真的想要处理新设备,无论其名称如何,请查看Udev脚本,它允许对新设备做出反应。处理udev可能很棘手,这里是Ceph项目中此类脚本的示例:它们通过udev规则自动处理具有特定分区ID的所有磁盘:https://github.com/ceph/ceph/tree/master/udev


0
投票

那这个呢?

- name: Find /sys/class/scsi_host hostX softlinks
  find:
    path: '/sys/class/scsi_host'
    file_type: link
    pattern: 'host*'
  register: _scsi_hosts

- name: Rescanning for new disks
  command: 'echo "- - -" > {{ item }}/scan'
  changed_when: false
  with_items: _scsi_hosts.files.path
© www.soinside.com 2019 - 2024. All rights reserved.