易理解剧本的问题



下面的剧本运行良好,但如果我运行lsscsi命令,/u01始终是LUN 0(/dev/sdc(,/ora01应该是LUN1(/dev/sdd(,/data应该是LUN2(/dev/sde(。这里的问题是有时它会被交换。即/ora01将是LUN2&数据将是LUN1。请对此提出建议。。

tasks:
- name: vgcreate
lvg:
vg: "{{ item.vgname }}"
pvs: "{{ item.pvsdisk }}"
with_items:
- { vgname: u01, pvsdisk: /dev/sdc }
- { vgname: ora01, pvsdisk: /dev/sdd }
- { vgname: data, pvsdisk: /dev/sde }
- name: lvcreate
lvol:
vg: "{{ item.vgname }}"
lv: "{{ item.lvname }}"
size: 100%VG
with_items:
- { vgname: u01, lvname: lgvol_1 }
- { vgname: ora01, lvname: lgvol_2 }
- { vgname: data, lvname: lgvol_3 }

- name: create file system
filesystem:
fstype: ext4
dev: /dev/{{ item.vgname }}/{{ item.lvname }}
with_items:
- { vgname: u01, lvname: lgvol_1 }
- { vgname: ora01, lvname: lgvol_2 }
- { vgname: data, lvname: lgvol_3 }
- name: mount logical volume
mount:
name: /{{ item.vgname }}
src: /dev/{{ item.vgname }}/{{ item.lvname }}
fstype: ext4
state: mounted
with_items:
- { vgname: u01, lvname: lgvol_1 }
- { vgname: ora01, lvname: lgvol_2 }
- { vgname: data, lvname: lgvol_3 }

它不是Ansible。您遇到的问题是设备名称"/dev/sda"等不是永久性的。它们是按照出现的顺序分配的,所以如果这个顺序不同,设备就会以不同的名称列出。IRL"sda"方法还有更多的问题,例如,如果某个设备因错误而断开连接(ISCSI的情况下为超时(,然后重新连接,它可以获得一个新名称(例如/dev/sdg(。在内核内部深处,将有/dev/sda(不可见但被占用(和/dev/sdg——同一个设备,具有不同的名称。

TL;DR;如果顺序对您来说很重要,请不要依赖/dev/sd*表示法。将其视为分配了随机名称的磁盘"集合"。

如果你需要选择特定的设备,你需要找到不变量(设备肯定有(。少数选项:

  1. SCSI路径
  2. 插槽编号(如果是机柜中的真实设备(
  3. 文件系统的UUID
  4. 设备的零件号和/或供应商指定的序列号

其中一些标识可以通过/dev/disk/by-*进行:

  • 通过id/
  • 按零件标签/
  • 按路径/
  • 按标签/
  • 通过分娩液/
  • 通过uuid/

有些需要经过深思熟虑的搜索过程(通过识别进行探测(。你可能想看看几个工具的输出:

  • blkid
  • isscsi
  • iscsiadm-m会话

甚至可以窥探每个设备中的/sys/block和符号链接。

基本上,这个问题就像有人把你的硬盘随机插入新电脑一样。哪个驱动器是用来做什么的?

最新更新