1. 程式人生 > 其它 >優先順序對執行緒執行素的影響——T1144

優先順序對執行緒執行素的影響——T1144

技術標籤:linuxlinux運維

一.問題描述

公司有100-150臺伺服器安裝RHEL7.4&中標麒麟7.4系統,為方便編輯配置網絡卡,使用指令碼方式配置為biosname=0,ifname=0,目的是為將en1o2p此類長字元網絡卡名稱規範為傳統的eth*,使用傳統的網絡卡識別方式,但安裝完成後配置IP,BOND雙網絡卡存在網路漂移現象,現象即重啟網絡卡後所有網口均發生變化導致網路不通

二.原理說明

  • 在/usr/lib/udev/rules.d/60-net.rules中有一條規則指示udev助手實用程式/lib/udev/rename_device檢視所有的/etc/sysconfig/network-scripts/ifcfg字尾檔案。如果它發現一個帶有HWADDR條目的ifcfg檔案與一個介面的MAC地址匹配,它將該介面重新命名為DEVICE指令在ifcfg檔案中給出的名稱。

  • 在/usr/lib/udev/rules.d/71-biosdevname.rules中指示biosdevname根據其命名策略重新命名介面, 前提是在前面的步驟中沒有重新命名介面,安裝了biosdevname,並且在引導命令列上沒有將biosdevname =0作為核心命令給出。

  • 在/lib/udev/rules.d/75-net-description.rules中的規則指示udev通過檢查網路介面裝置來填充 內部udev裝置屬性值id_net_name_board、ID_NET_NAME_SLOT、ID_NET_NAME_PATH、ID_NET_NAME_MAC 。注意,有些裝置屬性可能是未定義的。

  • 在/usr/lib/udev/rules.d/80-net-name-slot.rules中有一條規則指示udev重新命名介面(前提是在 第1步或第2步中沒有重新命名介面)和核心引數net。根據以下優先順序:id_net_name_board、ID_NET_NAME _SLOT、ID_NET_NAME_PATH,沒有指定ifnames=0。如果其中一個未設定,則它將進入列表中的下一個。 如果沒有設定這些引數,則不會重新命名介面。

  • 步驟2實際執行的是biosdevname的policy 步驟3和4實際執行的是Scheme1、2、3

三.處理步驟

由於在實際場景中,使用的是biosdevname=0 ifname=0的配置,實際影響的檔案為在/usr/lib/udev/rules.d/60-net.rules檔案,隨即在該配置檔案中使用了以下設定:

在使用此設定後,RHEL7.4系統問題徹底解決,經過近20次左右的測試,網口不會漂移。但是在中標麒麟7.4系統中,使用次配置後在網口狀態不變的情況下不會發生任何漂移,但是如果隨機拔掉其中一個網口,所有的網口會全部變化
隨後用udevadm test命令進行測試,此命令可以根據網絡卡名回溯是哪條策略生效,從輸出結果看RHEL7.4&中標麒麟7.4系統全部顯示60-rules規則已經生效,但是在中標麒麟中仍然存在漂移問題。 經過文件查詢,和進一步替換測試,基本可確定此問題為系統差異導致

四.解決方案

在使用systemd的命名規則時候,網絡卡名類似en1o2p3,此種命令可以準確的指出網絡卡來自主機板上的哪一個pci槽位哪一條匯流排,以及具體的口。Systemd的命名方式雖然可讀性差,但是本身就是為了解決此問題而做出的改變,建議同一為systemd方式使用長格式網絡卡名。
還原指令碼如下:

#! /bin/bash
#  redhat還原指令碼
cd /etc/sysconfig/network-scripts/
mv ifcfg- bak/
mv ifcfg-eth* bak/
mv ifcfg-bond0 bak/
cd /etc/sysconfig
cp grub  /home/grub.bak
sed -i "s/ net.ifnames=0/ /g" grub
sed -i "s/ biosdevname=0/ /g" grub
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
cd /boot/efi/EFI/redhat/
cp grub.cfg /home/grub.cfg.bak
sed -i "s/ net.ifnames=0/ /g" grub.cfg
sed -i "s/ biosdevname=0/ /g" grub.cfg
sleep 5
sync
sync
sync
reboot
#! /bin/bash
# 中標麒麟還原指令碼
cd /etc/sysconfig/network-scripts/
mv ifcfg- bak/
mv ifcfg-eth* bak/
mv ifcfg-bond0 bak/
cd /etc/sysconfig
cp grub  /home/grub.bak
sed -i "s/net.ifnames=0/ /g" grub
sed -i "s/biosdevname=0/ /g" grub
grub2-mkconfig -o /boot/efi/EFI/neokylin/grub.cfg
cd /boot/efi/EFI/neokylin/
cp grub.cfg /home/grub.cfg.bak
sed -i "s/ net.ifnames=0/ /g" grub.cfg
sed -i "s/ biosdevname=0/ /g" grub.cfg
sleep 5
sync
sync
sync
reboot

轉載請標明出處:
1.部落格中標註原創的文章,版權歸原作者 heardic 所有;
2.未經原作者允許不得轉載本文內容,否則將視為侵權;
3.轉載或者引用本文內容請註明來源及原作者;
4.對於不遵守此宣告或者其他違法使用本文內容者,本人依法保留追究權等。