Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。数台のサーバーの構成は問題ありませんが、数十台、さらには数百台のサーバーを構成する必要がある場合は、必然的に退屈でエラーが発生しやすくなります。デュアル ネットワーク カードのバインディング用のこの補助スクリプトを作成しました。これにより、Linux デュアル ネットワーク カードのバインディング作業を簡単に完了できます。もちろん、このスクリプトは主に小規模なシステム構成に使用されます。多数のサーバーを構成する必要がある場合は、スクリプト内のボンディング機能を抽出し、少し変更を加えることができます。試してみる価値があります。 1. 適用範囲 このシェル スクリプトは、次の Linux システムで複数の結合ネットワーク カードを作成できます。これは実稼働環境に適しています。
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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: mysql5.7.14 解凍版インストールグラフィックチュートリアル
>>: WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分
この記事では、React Native の基本をすでに理解していることを前提とし、ネイティブと Ja...
1. VMware Workstation 上の Linux: 1. ソースの更新(オプション) v...
まとめプロジェクトの説明形式<img src="..."> H2+ ...
コンポジション継承組み合わせ継承は、疑似古典的継承とも呼ばれます。これは、昨日説明したプロトタイプ ...
導入今日は、MySQL の sum 関数の使い方を紹介します。この関数は、MySQL データベースを...
基礎トランザクションは、SQL ステートメントのグループに対するアトミック操作です。つまり、グループ...
Linux で実行可能プログラムまたは so の依存ライブラリを表示します。 Linux の実行可能...
チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...
この記事では、Reactでダブルスライダークロススライドを実装するための具体的なコードを参考までに共...
ログインを提供し、ユーザー情報データインターフェースを取得するapi/user.js内 '@...
1. ファイアウォールをオフにし、Tomcatのインストールに必要なソフトウェアパッケージを/opt...
1: dockerにmongodbをインストールするステップ1: dockerにmongodbをイン...
MySQLをダウンロード5.1.1.1 より前のバージョン私のコンピュータは64ビットなので、Win...
今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...
この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...