ip別名刪除第一個,其餘別名就自動刪除的分析

上課作業有一個腳本,是批量添加ip別名,批量刪除ip別名,腳本如下

[root@loadblance scripts]# cat ip.sh
#!/bin/bash
function up {
        for i in `seq 1 16`;do
            if [ $i -eq 10 ];then
                continue
            fi
            ifconfig eth0:$i 10.0.2.$i  netmask 255.255.255.0 up
        done
}
function down {
        for i in `seq 1 16`;do
            if [ $i -eq 10 ];then
                continue
            fi
            ifconfig eth0:$i down
        done
}
case $1 in
    up)up
        #ifconfig eth0:0 down
       ;;
    down)down;;
esac

腳本執行批量添加沒有什麼問題,但在執行批量刪除時出現如下報錯

[root@loadblance scripts]# bash ip.sh down
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address

後來分析發現是在批量刪除的for循環執行第一次循環 ifconfig eth0:1 down的時候,就把所有的ip別名給刪除了,導致後面的循環都會報錯。

但是爲什麼執行ifconfig eth0:1 down就會把所有的別名ip都給down掉了呢,後來查了一下,翻到了redhat的bugzilla裏面有篇記錄,大體翻譯如下:

新添加的ip地址如果是和原有的ip的子網相同,那麼新添加的ip都將成爲原有ip的secondary ,原有的ip稱爲primary address。當primary被刪除後,secondary都會被刪除。而如果只刪除某個secondary,不會影響其他的ip地址。查看這些信息,建議用ip addr命令。

再看看我們的環境(如下),由於新添加的eth0:1和eth0並不是同一個子網,所以新添加的eth0:1是一個新的primary address,其他的eth0:2-eth0:16是eth0:1的secondary,正因爲如此,按照上面理論,當刪除eth0:1時,其他ip別名都會自動被幹掉。



[root@loadblance scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:29:3f:fd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.9/24 brd 192.168.1.255 scope global eth0
    inet 10.0.2.1/24 brd 10.0.2.255 scope global eth0:1
    inet 10.0.2.2/24 brd 10.0.2.255 scope global secondary eth0:2
    inet 10.0.2.3/24 brd 10.0.2.255 scope global secondary eth0:3
    inet 10.0.2.4/24 brd 10.0.2.255 scope global secondary eth0:4
    inet 10.0.2.5/24 brd 10.0.2.255 scope global secondary eth0:5
    inet 10.0.2.6/24 brd 10.0.2.255 scope global secondary eth0:6
    inet 10.0.2.7/24 brd 10.0.2.255 scope global secondary eth0:7
    inet 10.0.2.8/24 brd 10.0.2.255 scope global secondary eth0:8
    inet 10.0.2.9/24 brd 10.0.2.255 scope global secondary eth0:9
    inet 10.0.2.11/24 brd 10.0.2.255 scope global secondary eth0:11
    inet 10.0.2.12/24 brd 10.0.2.255 scope global secondary eth0:12
    inet 10.0.2.13/24 brd 10.0.2.255 scope global secondary eth0:13
    inet 10.0.2.14/24 brd 10.0.2.255 scope global secondary eth0:14
    inet 10.0.2.15/24 brd 10.0.2.255 scope global secondary eth0:15
    inet 10.0.2.16/24 brd 10.0.2.255 scope global secondary eth0:16


解決方法:修改腳本,把所有新添加的ip別名的都設成和eth0一個網段的,這樣所有新加ip別名都是eth0的secondary了,任意刪除一個secondary不會影響其他的ip別名。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章