您如何在CentOS 6 / RedHat中自动检测到新的网卡?


46

我在虚拟环境中使用CentOS 6。克隆虚拟版本的CentOS时,将“删除”旧的eth适配器,并用新的适配器和网络MAC地址替换。但是,ifcfg-ethn文件仍然存在。我试图弄清楚如何让CentOS像安装时一样自动重新扫描并重新创建网络适配器/ eth文件。

否则,我将面临如下所述的繁琐过程:http : //www.centos.org/docs/5/html/Installation_Guide-zh-CN/s1-s390info-addnetdevice.html

我知道在GUI中有一种快速的方法,但是我们使用的是服务器,因此GUI在这种情况下不适用。救命?

编辑:@OldWolf建议使用Kudzu,但是从Centos 5起Kudzu已被删除,所以我宁愿避免这种情况。Linux会在初始安装时运行一个过程-有人可以帮助我弄清楚是什么,以便我手动触发它吗?

Answers:


52

现在,使用CentOS 6,udev可以处理所有事情。进入/etc/udev/rules.d并删除70-persistent-net.rules文件,然后重新启动。如果您用双手先打开它,最有可能将原始NIC MAC列为eth0,将新NIC MAC列为eth1

现在,您需要编辑/etc/sysconfig/network-scripts/ifcfg-eth0并手动更新到新NIC卡的MAC。

删除该文件将强制检测过程在启动时再次运行,而克隆过程即旧的NIC MAC地址不会遗留任何行李。

我必须一直使用VMware ESXi 4.1上的CentOS 6克隆进行此操作。以前,kudzu只能使用以前的版本来处理它。


2
听上去很棒,但它却没有像您描述的那样起作用。旧的ifcfg-eth0文件仍然存在,但具有原始MAC地址等信息,而不是正确的新MAC地址。
约书亚

2
对不起,我忘记了。您还必须手动更新ifcfg-eth0中的mac地址。这将使其工作。也许有一种更简单的方法,但我还没有找到...
Tracy Carlton

这是一个好的开始。在启动时似乎可以编写一个脚本来自动完成该过程,甚至是描述的手动位。问题是仅在克隆/移动计算机后才激活脚本。仍然没有完整的答案...
Joshua

5
进入/etc/udev/rules.d并删除70-persistent-net.rules文件,不要重启。进入/etc/sysconfig/network-scripts/ifcfg-eth0并手动更新到新NIC卡的MAC。重新启动,网络应恢复活动状态。

2
@ user151091而不是重新启动,start_udev然后service network restart为我工作。
doshea

5

您也可以使用此工具(这不是GUI工具,它的TUI工具是基于文本的用户界面)

[root @ localhost〜]#system-config-network-tui

输入以上命令并按Enter

然后将出现此屏幕

在此处输入图片说明

选择设备配置,然后按Enter

然后将出现此屏幕

在此处输入图片说明

这里eth0是指 /etc/sysconfig/network-scripts/ifcfg-eth0

所做的任何修改eth0都会影响ifcfg-eth0文件


尽管这对于某些人/案例可能是一个有用的答案,但其目标是编写脚本或自动执行网络适配器的配置,而这不能通过TUI / GUI来完成。阅读原始文章:“我试图弄清楚CentOS如何像安装时一样自动重新扫描并重新创建网络适配器/ eth文件。”
2012年

@Joshua对不起... + 1
最高

@max,system-config-network似乎也打开了此界面。
Acumenus 2013年

2
@QiFan尝试使用此命令yum install system-config-network-tui
最高

1
@QiFan要找出哪个软件包包含该命令,请尝试执行此操作yum whatprovides */system-config-network-tui
最多

4

删除持久性规则文件:

rm /etc/udev/rules.d/70-persistent-net.rules

编辑ifcfg-eth0:

nano /etc/sysconfig/network-scripts/ifcfg-eth0

HWADDR完全删除该行(或更改它以匹配新NIC的MAC地址)。

重新启动系统:

reboot

如果再次更改NIC,只需重复步骤1和3。


您真的需要重启吗?为什么不重启网络服务呢?
vgoff 2012年

尽管这对于某些人/案例可能是一个有用的答案,但其目的是编写或自动配置网络适配器。从原始帖子中得出:“我试图弄清楚如何让CentOS像安装时一样自动重新扫描并重新创建网络适配器/ eth文件。”
2012年

@vgoff是的,显然重新启动网络服务的正常工作:)也许他指的重新启动网络设备本身,如“ifup eth0的时候”等等
约书亚

可能是这样,但是他说“系统”不是“设备”。
vgoff 2012年

我可能是错的,但是我认为“服务网络重新启动”将不会导致在删除持久性规则文件后重命名适配器,并且需要重新启动或“ start_udev”才能重命名它们。
doshea

4

在克隆后修改文件对我的用例不起作用,因此我解决了以下问题。

您需要编辑两个文件,删除每个文件中对Mac地址的引用:

/etc/sysconfig/network-scripts/ifcfg-eth0 -删除HWADDR =行。

/etc/udev/rules.d/70-persistent-net.rules -从ATTR {address} ==删除,直到并包括下一个逗号。

现在,当您克隆VM并更改Mac地址时,网络将可以正常工作,因为Mac地址永远不会写入任何一个文件。


这对我有用-如前所述,MAC地址永远不会写回到任何一个文件,因此您可以继续对其进行更改,并且您的接口将使用相同的配置保持“ eth0”。不过,这似乎仅在您具有一个网络适配器的情况下才有效,否则,在“启动udev:”时会有很长的启动延迟,而我的第二个设备称为“ rename3”,这可能是因为规则建议将两个设备都称为“ eth0” ”。
doshea

1个适配器的可行解决方案。同样不要忘记在网络设置中将连接类型设置为网桥。
樱桃

3

我创建和删除了这么多的CentOS 6虚拟机,并在VirtualBox中进行克隆时写了一些Bashfu来修复eth0。

   [root@jp-xm-base ~]# cat fixeth0.sh
if grep -q eth1 /etc/udev/rules.d/70-persistent-net.rules; then
   sed -i '/eth0/d' /etc/udev/rules.d/70-persistent-net.rules;
   sed -i 's/eth1/eth0/g' /etc/udev/rules.d/70-persistent-net.rules;
   ETHERNET=`grep eth0 /etc/udev/rules.d/70-persistent-net.rules | awk -F"," '{print $4}' | awk -F"\"" '{print $2}'`;
   echo Ethernet Addr: $ETHERNET;
   sed -i 's/HWADDR=".*"/HWADDR="'$ETHERNET'"/' /etc/sysconfig/network-scripts/ifcfg-eth0;
   /sbin/start_udev
   /sbin/service network restart;
fi

1

如果您唯一的问题是mac地址,则可以运行类似于

TEST=`ifconfig | grep eth | awk '{ print $5}'`; sed "s/HWADDR.*/HWADDR\=$TEST/g" ifcfg-eth0 > TMP; mv TMP ifcfg-eth0

更新HWADDR条目。

编辑:由于看起来问题出在虚拟硬件中的实际更改,您可以尝试以下操作。(从这里开始未经参考)

编辑/ etc / sysconfig / hwconf并删除对先前NIC的所有引用,然后重新运行kudzu以查看其是否检测到新硬件。您可能需要重新启动。


例如,我尝试手动更改eth0上的MAC地址,但仍然无法正常工作。随后对“服务网络强制重新加载”,“ ifup eth0”等的尝试总是以“设备eth0似乎不存在...”结束。帮助?
约书亚

您正在使用哪种类型的虚拟化以及如何克隆系统?
OldWolf 2011年

VirtualBox,但我认为虚拟化并不重要。这应该像关闭物理机箱,删除现有的网络适配器并添加其他适配器一样。
约书亚

@Josh您正在编辑的ifcfg- *文件在哪里,因为可能有三组-检出/ etc / sysconfig / network-scripts和/ etc / sysconfig / networking / devices和/ etc / sysconfig / networking / profiles / default(是的,我知道-这似乎与您用来设置适配器的工具有关。第一个应该是与众不同的,但您可能也需要与其他人打交道。
Linker3000 2011年

1
我问及虚拟化类型很重要的原因是它决定了克隆过程的样子。除非您告知,否则同一主机上的VMware克隆不会更改虚拟网络硬件。就您而言,问题不在于mac地址或克隆过程,而是您正在更改虚拟硬件。
OldWolf 2011年

1

我没有使用Vmware,而是将KVM与virsh一起使用-这就是我所做的。

使用CentOS 6.4创建了一个“基本”映像,这是我所有克隆的来源。第一次启动后,我创建了一个像这样的脚本

cat /etc/init.d/manglemac 
#!/bin/bash
#
# manglemac        This starts and stops mangle-mac
#
# chkconfig: 2345 11 88
# description: This obtains tha mac of eth0 and writes into ifcfg

mac=$(grep -H . /sys/class/net/*/address | grep eth0 | cut   -d ':' -f2-10)
match_mac=$(grep $mac /etc/sysconfig/network-scripts/ifcfg-eth0)

if [ -z "$match_mac" ];
then
   echo HWADDR=$mac >> /etc/sysconfig/network-scripts/ifcfg-eth0
fi

将其添加到init中

chkconfig --add manglemac

将所有引用删除到HWADDR或UUID的/ etc / sysconfig / network-scripts / ifcfg-eth0中,还从/etc/udev/rules.d/70-persistent-net.rules中删除udev规则。

此时,我关闭了计算机并开始克隆。一切正常。我制作的脚本非常简单,但是可以正常工作,但是它对网络设置(仅适用于eth0)进行了一些假设。

希望能对您有所帮助。


0

我正在处理多个NIC,但以上内容对我都不起作用(VMware Fusion 7 / VMware 6及以下版本),因此我编写了一个脚本。压缩包在这里

这是README它附带的:

  • 该压缩包和相关脚本将更改您最近克隆的VMware CentOS 6或以下版本计算机(无systemd)的MAC地址。
  • 您仅需一次克隆即可在计算机上完成的所有操作:

    1. 安装 lshw
    2. /etc/sysconfig/network-scripts/ifcfg-eth?用MACDADDY num替换您所有人中的MAC地址, 其中num是网络接口的编号。您需要遵循文件的命名模式。
    3. 跑:

      chckconfig change_mac_address on
      

      这应该在文件中指定的正确运行级别上添加符号链接。

    4. 正常克隆机器并启动它。它应该更改每个ifcfg-eth?文件中的MAC地址,
      • 删除udev文件,
      • 重新扫描您的e1000设备,
      • 并重新启动网络

问题:

  • 不知道为什么,但是有时您需要第二次重新启动网络才能识别所有NIC:

    /etc/init.d/network restart
    

    通过将a sleep 20放在开头来解决此问题/etc/init.d/network

  • 这对我来说不是问题,但是脚本依赖于lshw以与以下相同的顺序返回NICifcfg-eth?
  • 假定您的NIC设备为e1000。VMware标准?
  • 可能有必要切换ifcfg-eth?文件的编号,以便lshw在万一无法正常工作并且您正在使用许多NIC的许多机器上发生这种情况的情况下,使文件的编号与所返回的内容相匹配。
  • 使用一个NIC,它应该可以正常工作。
  • 首次启动后,将/usr/bin/change_mac_address.pl其移至/usr/bin/change_mac_address.pl.old
  • 即使没有MACDADDY,它也不会执行任何操作,这将使它无法在每次重新启动时运行。在你的ifcfg-eth?
  • 您也可以并且可能应该运行

    chkconfig change_mac_address off
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.