我试图编写一个ansible playbook来自动扫描新磁盘并将其放入现有的VG中而不是扩展它。
不幸的是,我无法弄清楚Linux如何知道下一个设备映射器(例如/ dev / sdc),以创建一个完美的ansible playbook来为我执行此任务。
在线扫描新磁盘:
var httpWebRequest =(HttpWebRequest)WebRequest.Create("http://localhost:53989/FileShareService.svc/UploadFile/WTM");
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
httpWebRequest.ContentLength = 0;
httpWebRequest.GetRequestStream();
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
有人对此有任何想法吗?
感谢。
答案 0 :(得分:1)
您使用的是令人困惑的术语。设备映射器是LVM使用的框架,偶尔可以使用device mapper
作为由使用设备映射器的应用程序创建的设备的名称。它们通常可以在/ dev / mapper中找到。
/ dev / sdc(以及allo其他/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
中,反映了识别设备的不同方式:
- by-id
- 使用设备ID(通常是名称和供应商)
- by-partuuid
- 通过磁盘上现有分区的UUID
- by-uuid
- 为每个驱动器生成唯一的UUID
- by-path
- 按逻辑位置排列。
我最后一个是最好的:如果您将设备插入同一个插槽,它将在/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的所有磁盘:https://github.com/ceph/ceph/tree/master/udev
答案 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