Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何知道Linux中的下一个设备映射器?_Linux_Ansible_Sysadmin - Fatal编程技术网

我如何知道Linux中的下一个设备映射器?

我如何知道Linux中的下一个设备映射器?,linux,ansible,sysadmin,Linux,Ansible,Sysadmin,我正在尝试编写一个ansible playbook来自动扫描新磁盘,并将其放入现有VG中,然后对其进行扩展 不幸的是,我无法理解Linux如何知道下一个设备映射器(例如,/dev/sdc)来创建一个完美的ansible playbook来为我执行此任务 联机扫描新磁盘: echo 0 0 0 | tee /sys/class/scsi_host/host*/scan 有人知道这件事吗 - name: Find /sys/class/scsi_host hostX softlinks fin

我正在尝试编写一个ansible playbook来自动扫描新磁盘,并将其放入现有VG中,然后对其进行扩展

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

联机扫描新磁盘:

echo 0 0 0 | tee /sys/class/scsi_host/host*/scan
有人知道这件事吗

- 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

谢谢。

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

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

现在回答:

Linux对新设备使用“下一个可用字母”。不幸的是,内核和用户的“下一个可用”可能是另一回事。如果设备已拔下插头(或死机,或通过重置重新扫描),并且底层设备被标记为仍在使用,Linux将使用“下一个字母”,因此被回复的
/dev/sdc
可能显示为
/dev/sdd
,或者,如果
/dev/sdd
正忙,
/dev/sde
,则显示为
/dev/sdja
(我不知道它的结尾在哪里,但没有所谓的
/dev/sdzz
AFAIK)

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

我认为最后一个是最好的:如果您将设备插入同一插槽,它在
/dev/disk/by path
中将具有相同的名称,而不考虑供应商、id、现有文件系统和其他块设备的状态

以下是几个您可以在其中找到的名称示例:

  • pci-0000:00:1f.2-ata-3
    -ata磁盘#3连接到pci的特定控制器
  • pci-0000:08:00.0-sas-0x50030480013afa6c-lun-0
    -将WWN 0x50030480013afa6c连接到特定pci控制器的sas驱动器
  • pci-0000:01:00.0-scsi-0:2:1:0
    -“奇怪的”scsi设备#2连接到特定的pci控制器。在我的例子中,它是LSI的硬件RAID
如果您真的想处理新设备,而不管它们的名称如何,请查看Udev脚本,它允许对新设备做出反应。处理Udev可能很棘手,这里是Ceph项目中此类脚本的示例:它们根据Udev规则自动处理具有特定分区ID的所有磁盘:

这是怎么回事

- 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