Tôi có thẻ HBA HPE SN1100Q 2 cổng 16G trên máy chủ gen10 hpe proliant được kết nối với bộ lưu trữ HPE 3par đính kèm trực tiếp. Và một số điều kỳ lạ xảy ra. Tôi đang sử dụng trình điều khiển qla2xxx phiên bản 10.01.00.19-k được tích hợp sẵn trong Ubuntu 20.04. Khi máy chủ của tôi khởi động lại, kết nối giữa máy chủ của tôi và 3par không thể truy cập được. Nhưng khi tôi đặt lại fc_ports của mình bằng lệnh này thì kết nối có thể truy cập lại được.
tiếng vang 1 > /sys/class/fc_host/host7/issue_lip
tiếng vang 1 > /sys/class/fc_host/host9/issue_lip
Vì vậy, tôi muốn đặt lại các cổng này trước khi máy chủ thử gắn các đường dẫn. Tôi đã viết một dịch vụ systemd và tập lệnh reset-hba cho việc này. Nhưng nhiều đường đang cố truy cập các đường dẫn trước khi tập lệnh của tôi đặt lại các cổng. Làm thế nào tôi có thể khắc phục vấn đề này?
Đây là dịch vụ systemd của tôi:
[Đơn vị]
Mô tả=Đặt lại cổng hba khi khởi động
Before=multipathd.service
[Dịch vụ]
Loại=oneshot
ExecStartPre=/sbin/modprobe -a qla2xxx
ExecStart=/bin/bash -c "/opt/hpe-hba/reset_hba_ports.sh"
[Cài đặt]
WantedBy=sysinit.đích
Và tập lệnh thiết lập lại của tôi:
#/bin/bash
FC_HOST_PATH="/sys/class/fc_host"
modprobe qla2xxx
cho đến khi [ ! -z "$(ls $FC_HOST_PATH)" ]
làm
ngủ 1
echo "Đang chờ FC host..."
xong
echo "Đặt lại cổng HBA trong tiến trình..."
cho máy chủ trong $(ls $FC_HOST_PATH);do
RPORT=$(ls $FC_HOST_PATH/$host/device/ | grep rport)
TPPORT=$(ls $FC_HOST_PATH/$host/device/$RPORT | mục tiêu grep)
nếu [ -z "${TPORT}" ]
sau đó
echo "$host không được kết nối. Đang đặt lại cổng FC"
tiếng vang 1 > /sys/class/fc_host/$host/issue_lip;
fi
xong
echo "Đang đợi giao tiếp FC được thiết lập."
try_count=0
trong khi [ $try_count -le 3 ]
làm
lỗi = 0
cho máy chủ bằng $(ls $FC_HOST_PATH)
làm
RPORT=$(ls $FC_HOST_PATH/$host/device/ | grep rport)
TPPORT=$(ls $FC_HOST_PATH/$host/device/$RPORT | mục tiêu grep)
echo "Cổng đích cho $host là $TPORT"
nếu [ -z "${TPORT}" ]
sau đó
echo "Cổng HBA FC chưa sẵn sàng. Chưa có mục tiêu! Đang chờ 10 giây..."
lỗi = 1
ngủ 5
fi
xong
nếu [ $err -eq 0 ]
sau đó
nghỉ
fi
((try_count++))
xong
echo "Cổng FC init đã được biên dịch!"
NGÀY=$(/usr/bin/ngày)
tiếng vang $DATE >> /opt/hpe-hba/last_run.txt