我正试图编写一个合理的手册来自动扫描新磁盘并将其放入现有的VG并将其扩展。我如何知道Linux中的下一个设备映射器?
不幸的是,我无法弄清楚Linux如何知道下一个设备映射器(例如/ dev/sdc),以便为我执行这个任务创建一个完美可靠的剧本。
扫描新盘在线:
echo 0 0 0 | tee /sys/class/scsi_host/host*/scan
有人对此有什么想法?
谢谢。
我正试图编写一个合理的手册来自动扫描新磁盘并将其放入现有的VG并将其扩展。我如何知道Linux中的下一个设备映射器?
不幸的是,我无法弄清楚Linux如何知道下一个设备映射器(例如/ dev/sdc),以便为我执行这个任务创建一个完美可靠的剧本。
扫描新盘在线:
echo 0 0 0 | tee /sys/class/scsi_host/host*/scan
有人对此有什么想法?
谢谢。
您正在使用混淆的术语。设备映射程序是LVM使用的框架,偶尔可以使用device mapper
作为由使用设备映射程序的应用程序创建的设备的名称。它们通常可以在/ dev/mapper中找到。
/dev/sdc(和allo other /dev/sd[a-z][a-z]?
)只是块设备。它们可以被LVM用来创建PV(物理卷),但它们不是“设备映射器”。
我们答案:
Linux使用新设备“在字母开头下一个可用”。不幸的是,内核和用户的“下一个可用”可能是另一回事。如果设备已被拔出(或死亡或重新扫描)并且基础设备被标记为仍被使用,则Linux将使用'下一个字母',因此重新插入的/dev/sdc
可能显示为/dev/sdd
,或者如果/dev/sdd
忙,则/dev/sde
到/dev/sdja
(我不确定它在哪里结束,但是没有这样的东西,例如012AIAFAIK)。
如果你想识别你的设备,你可以使用udev提供的符号链接。它们存在于/dev/disk
和反映了不同的方法来识别的设备: - 每个驱动 通过生成UUID独特 - 在磁盘上 通过现有分区的UUID - - by-uuid
by-id
- 设备ID用于(通常名称和供应商) - by-partuuid
- by-path
- 由它的逻辑位置。
我最后一件事情是最好的:如果您将设备插入同一个插槽,它将在/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
- 连接到特定PCI控制器的'奇怪'scsi设备#2。在我的情况下,它是LSI的硬件RAID。如果您真的想要处理新设备而不考虑其名称,请查看Udev脚本,以便在新设备上作出反应。处理udev可能会非常棘手,这里是Ceph项目中的这种脚本示例:他们通过udev规则自动处理所有具有特定分区ID的磁盘:https://github.com/ceph/ceph/tree/master/udev
这是怎么回事?
- 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