我们有使用多线程的linux服务器。
我们有一些我认为是多刀阔斧和mdadm之间的竞赛条件。
如果我们在powerpath设备上构建raid,比如/dev/mapper/mpathab。重新启动后,raid要么降级,要么在/dev/sdX等设备中降级,因此由于某种原因,它不保留初始配置。
我们安装了emc powerpath,因为san是一个vnx,并创建了如下所示的raid:
mdadm --verbose --create /dev/md0 --level=mirror --raid-devices=2 /dev/emcpowera /dev/emcpowerb
但是在重新启动之后,这是raid的状态:
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Jun 11 15:14:47 2018
Raid Level : raid1
Array Size : 419298304 (399.87 GiB 429.36 GB)
Used Dev Size : 419298304 (399.87 GiB 429.36 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Jun 12 15:25:02 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : unknown
Name : cjlnwp01:0 (local to host cjlnwp01)
UUID : d2779403:bd8d370b:bdea907e:bb0e3c72
Events : 567
Number Major Minor RaidDevice State
0 65 0 0 active sync /dev/sdq
1 8 160 1 active sync /dev/sdk
看起来像mdadm在重启时会找到第一个设备吗?
如何确保当设备是多路径的一部分时,它不会显示为单独的/dev/sdX设备。
在下面的lsblk输出中,每个安装设备sdc到sdq不应该出现。
sdc 8:32 0 400G 0 disk
sde 8:64 0 400G 0 disk
sdg 8:96 0 400G 0 disk
sdi 8:128 0 400G 0 disk
sdk 8:160 0 400G 0 disk
sdm 8:192 0 400G 0 disk
sdo 8:224 0 400G 0 disk
sdq 65:0 0 400G 0 disk
emcpowera 120:0 0 400G 0 disk
└─md0 9:0 0 399.9G 0 raid1
emcpowerb 120:16 0 400G 0 disk
└─md0 9:0 0 399.9G 0 raid1
mdadm和multipathing之间是否存在某种可以通过在systemd中添加依赖项来安排的竞赛条件?
作为记录,操作系统在HPE proliant DL380 G9服务器上为OEL7.5。
发布于 2018-06-13 16:02:51
您可以使用mdadm.conf
中的D1
条目使其只考虑特定的设备名称,而忽略其他所有内容。默认情况下,mdadm
接受/proc/partitions
中列出的所有块设备。
DEVICE /dev/emc*
不幸的是,这只能被认为是一个糟糕的解决办法。这仍然是一个巨大的混乱,因为有许多情况下,可能最终使用错误的设备。
这也是循环设备遇到的一个问题:
# losetup --find --show /dev/sdi2
/dev/loop4
现在,/dev/loop4
和/dev/sdc3
是相同的,这也意味着它们共享相同的UUID:
# blkid /dev/sdi2 /dev/loop4
/dev/sdi2: UUID="0a73725c-7e29-4171-be5d-be31d56bf8fe" TYPE="ext2"
/dev/loop4: UUID="0a73725c-7e29-4171-be5d-be31d56bf8fe" TYPE="ext2"
现在,当您使用mount UUID=0a73725c-7e29-4171-be5d-be31d56bf8fe
时,应该使用哪个设备?
# mount UUID=0a73725c-7e29-4171-be5d-be31d56bf8fe /mnt/tmp
# df -h /mnt/tmp
Filesystem Size Used Avail Use% Mounted on
/dev/loop4 2.0G 490M 1.4G 26% /mnt/tmp
在这种情况下,它最终选择了循环设备,这可能是我的意图,也可能不是我的意图。
复制像这样的设备是一个巨大的问题,因为突然之间,应该是唯一的UUID不再是唯一的,因此错误的设备可能会被使用。
LVM也在努力解决这个问题,在这里将详细描述:https://access.redhat.com/documentation/en-us/red_帽子_企业_linux/7/html/逻辑_体积_经理_行政/复本_光伏_多径。
不幸的是,这个文档也没有提供适当的解决方案,它只是建议一个设备过滤器的解决方案。
对于适当的解决方案,最好完全避免使用两个不同的块设备来表示相同的数据。通常情况下,这涉及到将数据放在偏移量处。我不知道默认情况下多路径是否具有偏移功能。
对于分区表mdadm、LUKS、LVM,您通常可以免费获得偏移量,因为这些表在父设备的开头有一个标头,并且它们提供的子块设备与此相抵消。
因此,在/dev/sdx上,您只看到分区表,/dev/sdx 1只看到mdadm头,/dev/md1只看到LUKS头,/dev/mapper/cryptomd1 1只看到LVM报头,而/dev/VG/LV只看到文件系统,因为这些设备都与其父数据相偏移。
如果您为您的多路径设置做了同样的事情,mdadm元数据只能在/dev/emcpowera
上可见,而在/dev/sdk
上是不可见的,而后者不可能错误地被组装成RAID。
https://unix.stackexchange.com/questions/449568
复制相似问题