我如何知道Linux中的下一个设备映射器?
我正在尝试编写一个ansible playbook来自动扫描新磁盘,并将其放入现有VG中,然后对其进行扩展 不幸的是,我无法理解Linux如何知道下一个设备映射器(例如,/dev/sdc)来创建一个完美的ansible playbook来为我执行此任务 联机扫描新磁盘:我如何知道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
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、现有文件系统和其他块设备的状态
以下是几个您可以在其中找到的名称示例:
-ata磁盘#3连接到pci的特定控制器pci-0000:00:1f.2-ata-3
-将WWN 0x50030480013afa6c连接到特定pci控制器的sas驱动器pci-0000:08:00.0-sas-0x50030480013afa6c-lun-0
-“奇怪的”scsi设备#2连接到特定的pci控制器。在我的例子中,它是LSI的硬件RAIDpci-0000:01:00.0-scsi-0:2:1: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