Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。数台のサーバーの構成は問題ありませんが、数十台、さらには数百台のサーバーを構成する必要がある場合は、必然的に退屈でエラーが発生しやすくなります。デュアル ネットワーク カードのバインディング用のこの補助スクリプトを作成しました。これにより、Linux デュアル ネットワーク カードのバインディング作業を簡単に完了できます。もちろん、このスクリプトは主に小規模なシステム構成に使用されます。多数のサーバーを構成する必要がある場合は、スクリプト内のボンディング機能を抽出し、少し変更を加えることができます。試してみる価値があります。

1. 適用範囲

このシェル スクリプトは、次の Linux システムで複数の結合ネットワーク カードを作成できます。これは実稼働環境に適しています。

  • レッドハット5.x
  • 5.x の場合
  • カイリン 3.x
  • KUX2.x について

2. スクリプト機能

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

入力した情報:

最初のNIC: eth0
2番目のNIC: eth1
債券名: bond1
IPアドレス: 192.168.56.11
ネットマスク:255.255.255.0
結合モード:モード=1
プライマリNIC:なし
--------------------------------------------

大丈夫かどうか確認してください[y/n]:y

前述のように、スクリプトの使用中に、バインドするサブネット カードの名前、バインドされたネットワーク カードの名前、IP アドレスとサブネット マスク、バインド モード、プライマリ ネットワーク カードを指定するかどうかの入力が求められ、システムで使用可能なネットワーク カードを積極的に識別して一覧表示し、ユーザーが選択できるようにします。同時に、入力情報の正確性を判断して、デュアル ネットワーク カードのスムーズなバインドを保証します。

3. 使用方法

まず、スクリプトを Linux システム上の任意のディレクトリにアップロードし、root ユーザーとして実行します。

[root@node1 tmp]# sh ボンディング_v2.0.sh 

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

 
利用可能なネットワーク カードは 4 枚あります。
eth0 eth1 eth2 eth3
--------------------------------------------

最初のNICを入力してください:_

まず、スクリプトはシステム内で使用可能なネットワーク カードの数を一覧表示し、バインドする最初のサブネット カードの名前を入力するように求めます。ここでは eth2 と入力します。

入力エラーや重複入力などを心配する必要はありません。スクリプトは入力情報が正しいかどうかを自動的に判断します。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

利用可能なネットワーク カードは 4 枚あります。
eth0 eth1 eth2 eth3

入力した情報:
最初のNIC: eth2
--------------------------------------------

2番目のNICを選択してください:_

次に、バインドする 2 番目のネットワーク カードの名前 eth3 を入力します。間違って入力すると、対応するプロンプトが表示されます。たとえば、eth8 と間違って入力すると、再入力するように求められます。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

利用可能なネットワーク カードは 4 枚あります。
eth0 eth1 eth2 eth3

入力した情報:
最初のNIC: eth2
--------------------------------------------

eth8 は使用できません。別のものを入力してください。

2番目のNICを選択してください:_

バインドする必要がある 2 番目のネットワーク カード eth3 を正しく入力した後、Linux システムにバインドされたネットワーク カードがない場合、最初のバインドされたネットワーク カードのデフォルト名は bond0 になります。システムにバインドされたネットワーク カードがある場合、スクリプトは bondN (N は数字) を入力するように要求します。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

入力した情報:
最初のNIC: eth2
2番目のNIC: eth3
債券名: bond0
--------------------------------------------

デフォルトの最初の結合名は --bond0 です。

IPアドレスを入力してください:_

指示に従って、バインドするIPアドレス(10.1.1.1など)を入力します。

スクリプトは入力された IP アドレスの形式と範囲が正しいかどうかを自動的に判断するため、入力エラーを心配する必要はありません。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

入力した情報:
最初のNIC: eth2
2番目のNIC: eth3
債券名: bond0
IPアドレス: 10.1.1.1
--------------------------------------------

NETMASK[255.255.255.0]を入力してください:_

IP アドレスを入力すると、サブネット マスクを入力するように求められます。デフォルトは 255.255.255.0 です。Enter キーを押すだけです。カスタム サブネット マスクを入力することもできます。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

入力した情報:
最初のNIC: eth2
2番目のNIC: eth3
債券名: bond0
IPアドレス: 10.1.1.1
ネットマスク: 255.255.255.0
--------------------------------------------

ボンディングモードを入力してください[デフォルト:mode=1、アクティブバックアップ]:_

この手順では、ネットワーク カードのバインディング レベルを入力します。デフォルトはマスター スレーブ モードです: mode=1。Enter キーを押すだけです。カスタム バインディング レベル (mode=6 など) を入力することもできます。形式は次のとおりです。

モード={0,1,2,3,4,5,6}

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

入力した情報:

最初のNIC: eth2
2番目のNIC: eth3
債券名: bond0
IPアドレス: 10.1.1.1
ネットマスク:255.255.255.0
結合モード:モード=1
--------------------------------------------

1-eth2
2-eth3
3-なし
プライマリNICを設定するかどうかを選択します[デフォルト:3-なし]:_

このとき、スクリプトはプライマリ ネットワーク カードを設定するかどうかを尋ねます。プライマリ ネットワーク カードの機能は、すべてのサブ ネットワーク カードが正常な場合に、プライマリ ネットワーク カードが優先的にアクティブになることです。ここでは、プライマリ ネットワーク カードを設定しないのがデフォルトです。また、1 または 2 の数字を入力して、ネットワーク カードをプライマリ ネットワーク カードとして選択することもできます。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

入力した情報:

最初のNIC: eth2
2番目のNIC: eth3
債券名: bond0
IPアドレス: 10.1.1.1
ネットマスク:255.255.255.0
結合モード:モード=1
プライマリNIC:なし
--------------------------------------------

OKかどうか確認してください[y/n]:_

この時点で、すべての情報が入力されています。スクリプトは、入力したすべての情報が正しいかどうかを確認するように求めます。正しい場合は、y と入力して次の手順に進みます。そうでない場合は、n と入力して上記の情報を再入力します。

--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

完了!
ファイルバックアップディレクトリ: /etc/sysconfig/network-scripts/inspur_bak

ファイルを確認してから、ネットワーク サービスを再起動できます。

1) サービスネットワークの再起動
2) 終了
--------------------------------------------
選択してください:_

これが表示されると、ネットワーク カードにバインドされているすべての構成ファイルが変更されています。ネットワーク サービスを再起動するには 1 を入力し、スクリプトを直接終了するには 2 を入力します。

ネットワーク サービスを再起動することをお勧めします。ネットワーク サービスを再起動せずにスクリプトを直接終了すると、変更された構成ファイルが有効にならず、スクリプトを使用して次のバインドされたネットワーク カードを作成するときに表示される情報が異常になります (スクリプトは ifconfig コマンドを通じて現在のネットワーク カード情報を取得するため)。

ファイルを確認してから、ネットワーク サービスを再起動できます。

1) サービスネットワークの再起動
2) 終了
  --------------------------------------------
選択してください:1
インターフェース eth0 をシャットダウンしています: [ OK ]
インターフェース eth1 をシャットダウンしています: [ OK ]
インターフェース eth2 をシャットダウンしています: [ OK ]
インターフェース eth3 をシャットダウンしています: [ OK ]
ループバックインターフェースをシャットダウンします: [OK]
ループバックインターフェースをポップアップ: [OK]
ポップアップインターフェース bond0: RTNETLINK の回答: ファイルが存在します
bond0 にアドレス 10.1.1.1 を追加中にエラーが発生しました。
                              [もちろん]
ポップアップインターフェース eth0: [OK]
ポップアップインターフェース eth1: [OK]

ネットワーク サービスを初めて再起動すると、上記のようなエラー メッセージが表示される場合があります。心配しないでください。構成は実際には完了しています。ネットワーク サービスをもう一度再起動すると、正常に戻ります。

バインディング プロセス中に変更される構成ファイルは次のとおりです。

[root@node1 tmp]# cd /etc/sysconfig/network-scripts/
[root@node1 ネットワークスクリプト]# cat ifcfg-bond0 
デバイス=bond0
BOOTPROTO=なし
ONBOOT=はい
タイプ=イーサネット
USERCTL=いいえ
IPV6INIT=いいえ
ピアDNS=はい
IPアドレス=10.1.1.1
ネットマスク=255.255.255.0
BONDING_OPTS="miimon=100 モード=1"

[root@node1 ネットワークスクリプト]# cat ifcfg-eth2 
デバイス=eth2
BOOTPROTO=なし
#HWADDR=08:00:27:41:b4:16
ONBOOT=はい
タイプ=イーサネット
USERCTL=いいえ
IPV6INIT=いいえ
ピアDNS=はい
スレーブ=はい
マスター=ボンド0

[root@node1 ネットワークスクリプト]# cat ifcfg-eth3
デバイス=eth3
BOOTPROTO=なし
#HWADDR=08:00:27:6c:3d:0c
ONBOOT=はい
タイプ=イーサネット
USERCTL=いいえ
IPV6INIT=いいえ
ピアDNS=はい
スレーブ=はい
マスター=ボンド0

[root@node1 ネットワークスクリプト]# cat /etc/modprobe.conf
エイリアス scsi_hostadapter ata_piix
エイリアス scsi_hostadapter1 ahci
エイリアス net-pf-10 オフ
エイリアス IPv6 オフ
オプション ipv6 無効=1
エイリアス snd-card-0 snd-intel8x0
オプション snd-card-0 インデックス=0
オプション snd-intel8x0 インデックス=0
snd-intel8x0 を削除します { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0
エイリアス eth0 e1000
エイリアス eth1 e1000
エイリアス eth2 e1000
エイリアス eth3 e1000
エイリアス bond0 結合

ネットワーク構成情報は次のとおりです。

[root@node1 tmp]# ifconfig 
bond0 リンク encap:イーサネット HWaddr 08:00:27:41:B4:16 
     inet アドレス:10.1.1.1 Bcast:10.1.1.255 マスク:255.255.255.0
     アップブロードキャスト実行中マスターマルチキャストMTU:1500メトリック:1
     RXパケット:1197 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
     TXパケット:125 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
     衝突:0 送信キュー:0 
     RX バイト: 106338 (103.8 KiB) TX バイト: 16662 (16.2 KiB)

eth0 リンク カプセル化:イーサネット HWaddr 08:00:27:35:B4:81 
     inet アドレス:192.168.56.11 Bcast:192.168.56.255 マスク:255.255.255.0
     アップブロードキャスト 実行中マルチキャスト MTU:1500 メトリック:1
     RXパケット:1487 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
     TXパケット:1190 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
     衝突:0 トランザクションキュー数:1000 
     RX バイト: 146576 (143.1 KiB) TX バイト: 151787 (148.2 KiB)

eth1 リンク カプセル化:イーサネット HWaddr 08:00:27:72:08:46 
     inet アドレス:10.1.1.11 Bcast:10.1.1.255 マスク:255.255.255.0
     アップブロードキャスト 実行中マルチキャスト MTU:1500 メトリック:1
     RXパケット:193 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
     TX パケット:455 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
     衝突:0 トランザクションキュー数:1000 
     RX バイト:31434 (30.6 KiB) TX バイト:22657 (22.1 KiB)

eth2 リンク カプセル化:イーサネット HWaddr 08:00:27:41:B4:16 
     アップブロードキャスト 実行中 スレーブマルチキャスト MTU:1500 メトリック:1
     RXパケット:591 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
     TXパケット:93 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
     衝突:0 トランザクションキュー数:1000 
     RX バイト:55217 (53.9 KiB) TX バイト:10511 (10.2 KiB)

eth3 リンク カプセル化:イーサネット HWaddr 08:00:27:41:B4:16 
     アップブロードキャスト 実行中 スレーブマルチキャスト MTU:1500 メトリック:1
     RXパケット:606 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
     TXパケット:32 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
     衝突:0 トランザクションキュー数:1000 
     RX バイト:51121 (49.9 KiB) TX バイト:6151 (6.0 KiB)

lo リンクカプセル化:ローカルループバック 
     inet アドレス:127.0.0.1 マスク:255.0.0.0
     アップループバック実行中 MTU:16436 メトリック:1
     RXパケット:3297 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
     TXパケット:3297 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
     衝突:0 送信キュー:0 
     RX バイト:4725726 (4.5 MiB) TX バイト:4725726 (4.5 MiB)

デュアル ネットワーク カードのバインディング情報:

[root@node1 tmp]# cat /proc/net/bonding/bond0 
イーサネット チャネル ボンディング ドライバー: v3.4.0-2 (2008 年 10 月 7 日)

ボンディングモード: フォールトトレランス (アクティブバックアップ)
プライマリスレーブ: なし
現在アクティブなスレーブ: eth2
MII ステータス: アップ
MII ポーリング間隔 (ミリ秒): 100
アップ遅延(ミリ秒): 0
ダウン遅延 (ms): 0

スレーブインターフェース: eth2
MII ステータス: アップ
速度: 1000 Mbps
デュプレックス:フル
リンク失敗回数: 0
永続的な HW アドレス: 08:00:27:41:b4:16

スレーブインターフェース: eth3
MII ステータス: アップ
速度: 1000 Mbps
デュプレックス:フル
リンク失敗回数: 0
永続的な HW アドレス: 08:00:27:6c:3d:0c

4. スクリプトコード

#!/bin/bash
# 日付:2018-11-26 14:28:45
# 著者:張建
# メール:[email protected]
# 機能:ネットワークボンディングの設定
# バージョン:2.0
#V1.6 バージョンの更新: ボンディング モード mode=x は、modprobe.conf ファイルに書き込まれなくなり、ifcfg-bond に書き込まれるようになりました。これは、modprobe.conf ファイルでモードが変更された場合、ネットワーク サービスを再起動しても有効にならない可能性があるためです。
#V2.0 バージョンアップデート: プライマリネットワークカードをオプション項目として設定します。

trap "tput clear;tput cup 3;echo '質問がある場合は、QQ 1037509307 にメッセージを送信してください。';tput cup 6;exit" 2 3
[[ -n $1 ]]の場合
 猫 <<EOF

ネットワーク構成アシスタント
          --- ネットワークボンディングv1.5の設定

使用法:

    0ドル
    chmod +x $0 && ./$0

終了
終了 0
フィ

[[ $UID -ne 0 ]]の場合
 クリアする
 tputカップ6 20
 echo -e "次のユーザーを使用する必要があります: \033[31mROOT\033[0m"
 カップ10
 出口
フィ

エラー(){
カップに$1 $2を入れる;edを入れる
echo '入力エラーです。もう一度お試しください。'
echo -e '続行するには ENTER キーを押してください..._\b\c'
入力Aを読み込む
}

Check_BakFile(){
#ファイルバックアップ機能#使用方法:
#Check_BakFile バックアップするファイル名、バックアップディレクトリ -x (どの時間形式でバックアップするか)
ケース${3}
  -d ) #日次バックアップ Bak_Date=`date '+%Y-%m-%d'`
    ;;
  -H ) # 1時間ごとのバックアップ Bak_Date=`date '+%Y-%m-%d_%H'`
    ;;
  -M ) # 分単位でバックアップ Bak_Date=`date '+%Y-%m-%d_%H:%M'`
    ;;
  -m ) #月次バックアップ Bak_Date=`date '+%Y-%m'`
    ;;
  -Y ) #年次バックアップ Bak_Date=`date '+%Y'`
    ;;
  * ) # デフォルトのバックアップは分単位 Bak_Date=`date '+%Y-%m-%d_%H:%M'`
    ;;
エサック
#Bak_Date=`日付 '+%Y-%m-%d-%H:%M'`

[[ -d ${2}/${Bak_Date} ]] || mkdir -p ${2}/${Bak_Date}
cp -ra ${1} ${2}/${Bak_Date}
}

ボンディング_pre(){
#デュアルネットワークカードバインディングリーディング機能により、ネットワークカード、IP などの正当性を判断し、ユーザーがパラメータを正しく入力できるようにガイドします。
#すべての実際のネットワークカード NIC_NAME_all=`ifconfig -a | awk '/\<Ethernet\>/ {print $1}' | grep -wEv '^bond[0-9]+'`
#既存の結合ネットワークカード NIC_NAME_bond=`ifconfig -a | awk '/^\<bond[0-9]+\>/ {print $1}'`

#すでにスレーブになっているネットワーク カードを出力します NIC_NAME_slave=`ifconfig -a | sed -n '/SLAVE/{g;1!p;};h' | awk '{print $1}'`
NIC_NAME_スレーブ=${NIC_NAME_スレーブ:=NULL}
# 利用可能なネットワーク カードを出力します NIC_NAME_free=`echo "$NIC_NAME_all" | grep -Fwv "$NIC_NAME_slave"`
#利用可能なネットワークカードの数 NIC_NAME_free_nu=`echo "$NIC_NAME_free" | wc -w`

NIC_LISTを宣言する
NIC_LIST=($NIC_NAME_空き)

情報印刷(){
クリアを入れる; カップ2を入れる
猫 <<EOF
--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------
終了
tputカップ7
[[ -n ${1} ]]の場合
 echo -e "システムに既に存在するチャネル ボンディング インターフェイス:\n\033[31m${1}\033[0m\n"
フィ
}

[[ "$NIC_NAME_free_nu" -gt 1 ]]の場合
 情報印刷
 echo -e "\033[031m$NIC_NAME_free_nu\033[0m のネットワーク カードが使用可能です:"
 echo -e "\033[31m${NIC_LIST[@]}\033[0m"
 echo -e "----------------------------------------------\n"
 #最初のネットワークカードの名前を入力します。trueの場合、
  echo -e "\n最初の NIC を入力してください:_\b\c"
  NIC1を読む
  echo ${NIC_LIST[@]} | grep -Fw "$NIC1" &> /dev/null
  [[ $? -eq 0 ]]の場合
   情報印刷
   echo -e "\033[031m$NIC_NAME_free_nu\033[0m 使用可能なネットワーク カード:\n\033[31m${NIC_LIST[@]}\033[0m"
   echo -e "\n入力した情報:\n最初の NIC: $NIC1"
   echo -e "----------------------------------------------\n"
   壊す
  それ以外
   情報印刷
   echo -e "\033[031m$NIC_NAME_free_nu\033[0m 使用可能なネットワーク カード:\n\033[31m${NIC_LIST[@]}\033[0m"
   echo -e "----------------------------------------------\n"
   echo -e "\033[31m${NIC1}\033[0m は使用できません。別のものを入力してください。"
  フィ
 終わり
 #2番目のネットワークカードの名前を入力します。trueの場合、
  echo -e "\n2 番目の NIC を選択してください:_\b\c"
  NIC2を読み込む
  [[ ${NIC1} != ${NIC2} ]]の場合
   echo ${NIC_LIST[@]} | grep -Fw "${NIC2}" &> /dev/null
   [[ $? -eq 0 ]]の場合
    info_print "${NIC_NAME_bond}"
    echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}"
    echo -e "----------------------------------------------\n"
    壊す
   それ以外
    情報印刷
    echo -e "\033[031m$NIC_NAME_free_nu\033[0m 使用可能なネットワーク カード:\n\033[31m${NIC_LIST[@]}\033[0m\n\n入力した情報:\n最初の NIC: ${NIC1}"
    echo -e "----------------------------------------------\n"
    echo -e "\033[31m${NIC2}\033[0m は使用できません。別のものを入力してください。"
   フィ
  それ以外
   情報印刷
   echo -e "\033[031m${NIC_NAME_free_nu}\033[0m 使用可能なネットワーク カード:\n\033[31m${NIC_LIST[@]}\033[0m\n\n入力した情報:\n最初の NIC: ${NIC1}"
   echo -e "----------------------------------------------\n"
   echo -e "\033[31m${NIC2}\033[0m は最初の NIC です。別の NIC を入力してください。"
  フィ
 終わり

 #結合されたNIC名を入力し、妥当性チェックを実行します if [[ -z ${NIC_NAME_bond} ]]; then
  NAME_bond=ボンド0
  情報印刷
  echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}"
  echo -e "----------------------------------------------\n"
  echo "デフォルトの最初の結合名は -- bond0 です。"
 それ以外
  真実である一方、
   echo -e "\n債券名[bonN]を入力してください:_\b\c"
   NAME_bondを読む
   #入力形式が債券+数値形式であるかどうかを確認します。
   echo "${NAME_bond}" | grep -wE '^bond[[:digit:]]+$' &> /dev/null
   [[ $? -eq 0 ]]の場合
    echo "${NIC_NAME_bond}" | grep -Fw "${NAME_bond}" &> /dev/null
    [[ $? -ne 0 ]]の場合
     info_print "${NIC_NAME_bond}"
     echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}"
     echo -e "----------------------------------------------\n"
     壊す
    それ以外
     info_print "${NIC_NAME_bond}"
     echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}"
     echo -e "----------------------------------------------\n"
     echo "既存の名前は使用できません: ${NAME_bond}"
     echo -e "\033[31m${NAME_bond}\033[0m は使用できません。--bondN のような別のものを入力してください。"
    フィ
   それ以外
    info_print "${NIC_NAME_bond}"
    echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}"
    echo -e "----------------------------------------------\n"
    echo -e "\033[31m${NAME_bond}\033[0m は使用できません。--bondN のような別のものを入力してください。"
   フィ
  終わり
 フィ

 #trueのときにIPアドレスを設定する。
  echo -e "\nIP アドレスを入力してください:_\b\c"
  IP_bondを読む
  echo "${IP_bond}" | grep -owE '^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\.){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})$' &> /dev/null
  [[ $? -eq 0 ]]の場合
   情報印刷
   echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}\nIP アドレス: ${IP_bond}"
   echo -e "----------------------------------------------\n"
   壊す
  それ以外
   情報印刷
   echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}"
   echo -e "----------------------------------------------\n"
   echo -e "IP アドレス: \033[31m${IP_bond}\033[0m 形式エラー。再入力してください。"
  フィ
 終わり
 #ネットマスクを設定する
 真実である一方、
  echo -e "\nNETMASK[255.255.255.0]を入力してください:_\b\c"
  NETMASK_bondを読む
  NETMASK_bond=${NETMASK_bond:="255.255.255.0"} #変数NETMASK_bondが空の場合は、デフォルト値255.255.255.0を割り当てます
  echo "$NETMASK_bond" | grep -owE '^(128|192|224|240|248|252|254|255)\.((0|128|192|224|240|248|252|254|255)\.){2}(0|128|192|224|240|248|252|254|255)$' &> /dev/null
  [[ $? -eq 0 ]]の場合
   情報印刷
   echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}\nIP アドレス: ${IP_bond}\nネットマスク: ${NETMASK_bond}"
   echo -e "----------------------------------------------\n"
   壊す
  それ以外
   情報印刷
   echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}\nIP アドレス: ${IP_bond}"
   echo -e "----------------------------------------------\n"
   echo -e "入力エラー。\n正しいネットマスクを入力するか、ENTER キーを押して 255.255.255.0 を使用してください。\n"
  フィ
 終わり
#:<<!zhushi! #バッチコメント、バッチコメントが有効になっている場合、デフォルトモード=1
 真実である一方、
  echo -e "\nbonding_mode[default:mode=1,active-backup]を入力してください:_\b\c"
  読み取りモード_bond
  mode_bond=${mode_bond:="mode=1"} #変数mode_bondが空の場合は、デフォルト値1を割り当てます
  [[ ! ${mode_bond} =~ "mode=[0-6]" ]]の場合
   情報印刷
   echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}\nIP アドレス: ${IP_bond}\nネットマスク: ${NETMASK_bond}"
   echo -e "----------------------------------------------\n"
   echo "無効な回答: ${mode_bond}"
   echo "例: mode={0,1,2,3,4,5,6}"
  それ以外
   情報印刷
   echo -e "入力した情報:\n"
   echo -e "最初の NIC:${NIC1}\n2 番目の NIC:${NIC2}\n結合名:${NAME_bond}\nIP アドレス:${IP_bond}\nネットマスク:${NETMASK_bond}\n結合モード:${mode_bond}"
   echo -e "----------------------------------------------\n"
   壊す
  フィ
 終わり
#!ずしっ!

 #プライマリネットワークカードを設定するかどうかを選択します。trueの場合、
  エコー「1-${NIC1}」
  エコー「2-${NIC2}」
  エコー「3-なし」
  echo -e "プライマリ NIC を設定するかどうかを選択します[デフォルト:3-なし]:_\b\c"
  get_primary_NIC を読み取り
  get_primary_NIC=${get_primary_NIC:="なし"}
    ${get_primary_NIC}の場合
    1 )
     get_primary_NIC=${NIC1}
     #echo "--$get_primary_NIC"
     壊す
     ;;
    2 )
     get_primary_NIC=${NIC2}
      #echo "--$get_primary_NIC"
     壊す
     ;;
    3 )
     get_primary_NIC=なし
      #echo "--$get_primary_NIC"
     壊す
     ;;
    なし )
     壊す
     ;;
    * )
      #echo "--$get_primary_NIC"
     情報印刷
     echo -e "入力した情報:\n最初の NIC: ${NIC1}\n2 番目の NIC: ${NIC2}\n結合名: ${NAME_bond}\nIP アドレス: ${IP_bond}\nネットマスク: ${NETMASK_bond}"
     echo -e "----------------------------------------------\n"
     echo "無効な回答: ${get_primary_NIC}"
     echo "{1,2,3} に数字を入力するか、ENTER キーを押してプライマリ NIC をなしに設定します。"
     続く
     ;;
   エサック

   情報印刷
   echo -e "入力した情報:\n"
   echo -e "最初の NIC:${NIC1}\n2 番目の NIC:${NIC2}\n結合名:${NAME_bond}\nIP アドレス:${IP_bond}\nネットマスク:${NETMASK_bond}\n結合モード:${mode_bond}\nプライマリ NIC:${get_primary_NIC}"
   echo -e "----------------------------------------------\n"
   壊す
 終わり

 #最後に確認情報を入力します。trueの場合、
  情報印刷
  echo -e "入力した情報:\n"
  echo -e "\033[31m最初の NIC:${NIC1}\n2 番目の NIC:${NIC2}\n結合名:${NAME_bond}\nIP アドレス:${IP_bond}\nネットマスク:${NETMASK_bond}\n結合モード:${mode_bond}\nプライマリ NIC:${get_primary_NIC}\033[0m"
  echo -e "----------------------------------------------\n"
  echo -e "OK かどうか確認してください[y/n]:_\b\c"
  入力を読み込む
  ケース${input}
   [Yy]|[Yy][Ee][Ss] )
    ボンディング "$NIC1" "$NIC2" "$NAME_bond" "$IP_bond" "$NETMASK_bond"
    壊す
    ;;
   [ん]|[ん][おお] )
    結合前
   ;;
   * )
    tputカップ7;tputed
    エラー 7 10
   ;;
  エサック
 終わり
それ以外
  情報印刷
  echo -e "\033[031m${NIC_NAME_free_nu}\033[0m のネットワーク カードが使用可能です:\n"
  #強調表示された「NIC名」を赤でマークします echo -e "\033[31m${NIC_LIST[@]}\033[0m\n"
  echo -e "ボンディングを行うにはネットワーク カードが \033[31m 足りません\033[0m"
  echo -e "確認してください.....\n"
  echo -e '終了するには ENTER キーを押してください..._\b\c'
  回答を読む
  出口1
フィ
}

ボンディング(){
[[ $# -lt 5 ]]の場合
それから
 echo '結合に失敗しました! 十分な情報を提供してください!'
 echo -e "\n使用方法:\n sh bonding.sh <NIC1_name> <NIC2_name> <bond_name> <IP> <NETMASK>\n\n"
 出口1
フィ
#デバイス名とIP情報を取得する
SLAVE1_DEV="$1" #SLAVE1_DEV=ethx
SLAVE2_DEV="$2" #SLAVE2_DEV=ethx
BOND_DEV="$3" #BOND_DEV=bondx
SLAVE1=ifcfg-"$1"
SLAVE2=ifcfg-"$2"
BOND=ifcfg-"$3"
BOND_IPADDR="$4"
BOND_NETMASK="$5"
BOND_DIR=/etc/sysconfig/ネットワークスクリプト
[ -e $BOND_DIR/$BOND ]の場合
それから
 echo $BOND_DIR/$BONDはすでに存在します
それ以外
 #ファイルのバックアップ
 Check_BakFile "${BOND_DIR}/ifcfg-*" "${BOND_DIR}/inspur_bak" "-M"

#MACアドレスを取得
 SLAVE1_MAC=`grep 'HWADDR' ${BOND_DIR}/${SLAVE1}`
 SLAVE2_MAC=`grep 'HWADDR' ${BOND_DIR}/${SLAVE2}`

 # $BONDを変更する
 $BOND_DIR/$BOND をタッチする
 echo "DEVICE=${BOND_DEV}" >> $BOND_DIR/$BOND
 echo "BOOTPROTO=none" >> $BOND_DIR/$BOND
 echo "ONBOOT=yes" >> $BOND_DIR/$BOND
 echo "TYPE=Ethernet" >> $BOND_DIR/$BOND
 echo "USERCTL=no" >> $BOND_DIR/$BOND
 echo "IPV6INIT=no" >> $BOND_DIR/$BOND
 echo "PEERDNS=yes" >> $BOND_DIR/$BOND
 echo "IPADDR=${BOND_IPADDR}" >> $BOND_DIR/$BOND
 echo "NETMASK=${BOND_NETMASK}" >> $BOND_DIR/$BOND
 [[ ${get_primary_NIC} == none ]]の場合
   echo "BONDING_OPTS=\"miimon=100 ${mode_bond}\"" >> $BOND_DIR/$BOND
 それ以外
   echo "BONDING_OPTS=\"miimon=100 ${mode_bond} primary=$(echo ${SLAVE1} | cut -d'-' -f2)\"" >> $BOND_DIR/$BOND
 フィ

 # $SLAVE1 を変更する
 > $BOND_DIR/$SLAVE1
 echo "DEVICE=${SLAVE1_DEV}" >> $BOND_DIR/$SLAVE1
 echo 'BOOTPROTO=none' >> $BOND_DIR/$SLAVE1
 #cat $BOND_DIR/../ifcfg-bak/$SLAVE1 |grep HWADDR >> $BOND_DIR/$SLAVE1
 echo "#$SLAVE1_MAC" >> $BOND_DIR/$SLAVE1
 ONBOOT=yes をエコー >> $BOND_DIR/$SLAVE1
 エコー TYPE=イーサネット >> $BOND_DIR/$SLAVE1
 echo USERCTL=no >> $BOND_DIR/$SLAVE1
 エコー IPV6INIT=no >> $BOND_DIR/$SLAVE1
 echo PEERDNS=yes >> $BOND_DIR/$SLAVE1
 echo SLAVE=yes >> $BOND_DIR/$SLAVE1
 MASTER=$BOND_DEVをエコー >> $BOND_DIR/$SLAVE1

 # SLAVE2を変更する
 > $BOND_DIR/$SLAVE2
 echo "DEVICE=$SLAVE2_DEV" >> $BOND_DIR/$SLAVE2
 echo BOOTPROTO=none >> $BOND_DIR/$SLAVE2
 #cat $BOND_DIR/../ifcfg-bak/$SLAVE2 |grep HWADDR >> $BOND_DIR/$SLAVE2
 echo "#$SLAVE2_MAC" >> $BOND_DIR/$SLAVE2
 ONBOOT=yes をエコー >> $BOND_DIR/$SLAVE2
 エコー TYPE=イーサネット >> $BOND_DIR/$SLAVE2
 echo USERCTL=no >> $BOND_DIR/$SLAVE2
 エコー IPV6INIT=no >> $BOND_DIR/$SLAVE2
 echo PEERDNS=yes >> $BOND_DIR/$SLAVE2
 echo SLAVE=yes >> $BOND_DIR/$SLAVE2
 MASTER=$BOND_DEVをエコー >> $BOND_DIR/$SLAVE2

 [[ -e /etc/modprobe.conf.bak ]] && cp /etc/modprobe.conf /etc/modprobe.conf.bak.new || cp /etc/modprobe.conf /etc/modprobe.conf.bak
 echo "alias $BOND_DEV ボンディング" >> /etc/modprobe.conf

真実である一方、
 クリアを入れる; カップ2を入れる
猫 <<EOF
--------------------------------------------
------ ネットワーク構成アシスタント ------
--------------------------------------------

完了!
ファイルバックアップディレクトリ: ${BOND_DIR}/inspur_bak

ファイルを確認してから、ネットワーク サービスを再起動できます。

1) サービスネットワークの再起動
2) 終了
--------------------------------------------
終了
  echo -e "選択してください:_\b\c"
  回答を読む
   ケース${answer}
    1 )
     サービスネットワークの再起動
     終了 0
     ;;
    2 )
     終了 0
     ;;
   エサック

 終わり
フィ
}

主要(){
 真実である一方、
  結合前
 終わり
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux システムのデュアル ネットワーク カード バインディング構成の実装
  • Linuxはデュアルネットワークカードボンドとドライバーインターフェースを使用する
  • Linux でのデュアル ネットワーク カードの Firewalld の設定プロセス (推奨)
  • 負荷分散を実現するための Linux デュアル ネットワーク カード バインディングの詳細な説明
  • Linux でデュアル ネットワーク カードを設定する方法
  • Linux システムでのデュアル ネットワーク カード構成の実践の概要
  • Linuxは、単一のIPをバインドするためにデュアルネットワークカードを実装するためにボンドを使用します。サンプルコード

<<:  mysql5.7.14 解凍版インストールグラフィックチュートリアル

>>:  WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分

推薦する

Linux で MySQL 5.6 X64 バージョンをインストールする詳細な手順

環境: 1. CentOS6.5 X64 2.mysql-5.6.34-linux-glibc2.5...

HTML フォーム送信アクションと URL ジャンプアクションの違い

フォームのアクションは URL ジャンプとは異なります。フォームはバックグラウンドにデータを渡すこと...

JavaScriptでページスクロールアニメーションを実装する

目次レイアウトを作成するCSSスタイルを追加するJavaScript で要素を操作する対象要素を取得...

Vueデータプロキシの詳細な説明

目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...

N キロメートル以内のデータを検索する MySQL の簡単な例

地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメ...

VMware kali仮想マシン環境の設定方法

1|0 カーネルをコンパイルする(1)uname -rコマンドを実行してカーネルバージョンを表示しま...

ユーザーのニーズがマーケティング指向のデザインにつながる

<br />それぞれのトピックについて、チーム内でメールで議論します。議論が白熱するにつ...

MysqlチューニングExplainツールの詳細な説明と実践的な演習(推奨)

MySQL チューニング ツールの詳細な説明と実践的な演習の説明 ツールの紹介の説明 分析例の説明...

Dockerコンテナとローカルマシン間でファイルを転送する方法

ホストとコンテナ間でファイルを転送するには、コンテナの完全な ID が必要です。取得方法は以下の通り...

CentOS 6 および 7 での MySQL 5.7 の詳細なインストール チュートリアル

開発には常にデータが必要です。サーバーとしての Linux では、テスト データを格納するためのデー...

Linux seqコマンドの使い方

1. コマンドの紹介seq (シーケンス) コマンドは、指定されたステップ サイズに従って、開始番号...

jsは古典的なマインスイーパゲームを実装します

この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

ネイティブjsは9マスグリッドのドラッグアンドドロップを実現します

ネイティブJSを使用して9つの正方形のグリッドを記述し、9つのグリッドの位置をドラッグして変更する効...

Tomcat プロセスの CPU 使用率が高い場合の解決策

目次場合コンテキスト切り替えのオーバーヘッド?要約するCPU は多くの場合、システム パフォーマンス...