Как вы автоматически обнаруживаете новую сетевую карту в CentOS 6 / RedHat?


46

Я использую CentOS 6 в виртуальной среде. При клонировании виртуальной версии CentOS старые адаптеры eth «удаляются» и заменяются новыми и сетевыми MAC-адресами. Однако файлы ifcfg-ethn все еще существуют. Я пытаюсь выяснить, как заставить CentOS автоматически сканировать и заново создавать файлы сетевых адаптеров / eth, как это делалось при установке.

В противном случае мне остается утомительный процесс, как описано здесь: http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-s390info-addnetdevice.html

Я знаю, что есть быстрый способ сделать это в графическом интерфейсе, но мы используем сервер, поэтому в этом случае графический интерфейс не применяется. Помогите?

Редактировать: @OldWolf предложил Kudzu, однако Kudzu был удален с Centos 5, поэтому я бы предпочел этого избежать. Существует процедура, которую Linux запускает при первоначальной установке. Может ли кто-нибудь помочь мне понять, что это такое, чтобы я мог запустить его вручную?

Ответы:


52

С CentOS 6 все теперь обрабатывается udev. Зайдите в /etc/udev/rules.dи удалите 70-persistent-net.rulesфайл и перезагрузите компьютер. Если вы откроете его перед рукой, вы, скорее всего, увидите в списке оригинальный MAC-адрес NIC eth0и новый eth1.

Теперь вам нужно отредактировать /etc/sysconfig/network-scripts/ifcfg-eth0и вручную обновить MAC своей новой сетевой карты.

Удаление файла заставляет процесс обнаружения снова запускаться при загрузке без остатка багажа от процесса клонирования, а именно старого MAC-адреса NIC.

Я должен делать это с моими клонами CentOS 6 на VMware ESXi 4.1 все время. Это боль, кудзу просто справится с этим в предыдущих версиях.


2
Звучит прекрасно, Трейси, но это не сработало, как вы описали. Старый файл ifcfg-eth0 все еще был там, с оригинальным MAC-адресом и т. Д. Вместо правильного нового.
Иисус Навин

2
Извините, да, я забыл. Вы также должны вручную обновить MAC-адрес в ifcfg-eth0, а также извините. Это заставит это работать. Возможно, есть более простой способ, но я еще не нашел его ...
Трейси Карлтон,

Это было хорошее начало. Кажется, что можно было бы написать сценарий, который автоматизирует процесс - даже описанные вручную биты - при загрузке. Проблема заключается в активации сценария только после того, как машина была клонирована / перемещена. Все еще нет полного ответа на это ...
Джошуа

5
Зайдите /etc/udev/rules.dи удалите 70-persistent-net.rulesфайл и НЕ перезагружайтесь. Зайдите /etc/sysconfig/network-scripts/ifcfg-eth0и вручную обновите MAC своей новой сетевой карты. Перезагрузка и сеть должна ожить.

2
@ user151091 вместо перезагрузки, start_udevзатем service network restartработал для меня.
доша

5

Вы также можете использовать этот инструмент (это не инструмент с графическим интерфейсом, его инструмент TUI, текстовый интерфейс пользователя)

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

Введите вышеуказанную команду и нажмите Enter

Тогда этот экран появится

введите описание изображения здесь

Выберите конфигурацию устройства и нажмите Enter

Тогда этот экран появится

введите описание изображения здесь

Здесь eth0 относится /etc/sysconfig/network-scripts/ifcfg-eth0

Какое бы редактирование в eth0этом не сказалось на ifcfg-eth0файле


Хотя это может быть полезным ответом для некоторых людей / случаев, цель этого состояла в том, чтобы создать сценарий или автоматизировать настройку сетевых адаптеров, что невозможно сделать с помощью TUI / GUI. Прочитайте оригинальный пост: «Я пытаюсь выяснить, как заставить CentOS автоматически повторно сканировать и воссоздавать файлы сетевых адаптеров / eth, как это делалось при установке».
Джошуа

@ Джошуа, извини, понял ... + 1
максимум

@max, просто system-config-networkтакже, кажется, открыть этот интерфейс.
Acumenus

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линию в целом (или измените ее в соответствии с MAC-адресом вашего нового сетевого адаптера).

Перезагрузите вашу систему:

reboot

Если вы снова измените NIC, просто повторите шаги № 1 и № 3.


Вам действительно нужно перезагрузить компьютер? Почему бы просто не перезапустить сетевой сервис?
vgoff

Хотя это может быть полезным ответом для некоторых людей / случаев, цель этого состояла в том, чтобы создать сценарий или автоматизировать настройку сетевых адаптеров. Из исходного поста: «Я пытаюсь выяснить, как заставить CentOS автоматически повторно сканировать и воссоздавать файлы сетевых адаптеров / eth, как это делалось при установке».
Джошуа

@vgoff да, перезапуск сетевого сервиса, очевидно, работает нормально :) Возможно, он имеет в виду перезагрузку самого сетевого устройства, например, «ifup eth0» и т. д.
Джошуа

Это может быть, но он говорит «система», а не «устройство».
vgoff

Я могу ошибаться, но я думаю, что «перезапуск сервисной сети» не приведет к переименованию ваших адаптеров после того, как вы удалили файл постоянных правил, и что для их переименования требуется перезагрузка или «start_udev».
доша

4

Изменение файлов после клонирования не будет работать для моего варианта использования, поэтому я решил проблему следующим образом.

Вам нужно отредактировать два файла, удалив ссылки на адреса Mac в каждом:

/etc/sysconfig/network-scripts/ifcfg-eth0 - удалите строку HWADDR =.

/etc/udev/rules.d/70-persistent-net.rules - удалить из ATTR {адрес} == до следующей запятой.

Теперь, когда вы клонируете виртуальную машину и измените MAC-адрес, сеть будет работать, так как MAC-адрес никогда не будет записан ни в один файл.


Это сработало для меня - как уже было отмечено, MAC-адрес никогда не записывается обратно ни в один файл, поэтому вы можете продолжать изменять его, и ваш интерфейс останется «eth0» с той же конфигурацией. Похоже, это работает, только если у вас есть один сетевой адаптер, в противном случае я получил длинную задержку загрузки в «Запуск udev:», и мое второе устройство называлось «rename3», вероятно, потому что правила предлагали, чтобы оба устройства назывались «eth0». ».
доша

Работоспособное решение для 1 адаптера. Также не забудьте сделать тип подключения как Bridge в настройках сети.
Черри

3

Я создаю и удаляю столько виртуальных машин CentOS 6, что написал Bashfu для исправления eth0 при клонировании в VirtualBox.

   [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, чтобы увидеть, обнаруживает ли оно новое оборудование. Вам может потребоваться перезагрузка.


Я попытался вручную изменить MAC-адрес на eth0, например, но он все еще не работал. Последующие попытки «принудительной перезагрузки сети обслуживания», «ifup eth0» и т. Д. Всегда будут заканчиваться словами «Устройство eth0, по-видимому, отсутствует ...» Помощь?
Джошуа

Какой тип виртуализации вы используете и как вы клонировали систему?
OldWolf

VirtualBox, но я не думаю, что виртуализация имеет значение. Это должно быть похоже на выключение физического блока, удаление существующих сетевых адаптеров и добавление различных.
Джошуа

@Josh Где находятся файлы ifcfg- *, которые вы редактируете, так как, возможно, есть три набора - извлеките / etc / sysconfig / network-scripts и / etc / sysconfig / network / devices и / etc / sysconfig / network / profile / default ( да, я знаю - похоже, что-то связано с тем, какие инструменты вы используете для настройки адаптеров). Первыми должны быть те, которые имеют значение, но вам, возможно, придется иметь дело и с другими.
Linker3000

1
Причина, по которой я спросил, и что тип виртуализации имеет значение, заключается в том, что он определяет, как выглядит процесс клонирования. Клон VMware на том же хосте не изменит аппаратное обеспечение виртуальной сети, если вы не попросите его об этом. В вашем случае проблема не в MAC-адресе и не в процессе клонирования, а в том, что вы меняете виртуальное оборудование.
OldWolf

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

Удалил все ссылки в / etc / sysconfig / network-scripts / ifcfg-eth0 HWADDR или UUID, а также удалил правила udev из /etc/udev/rules.d/70-persistent-net.rules.

В этот момент я выключил машину и начал клонировать. Все работает отлично. Сценарий, который я сделал, очень прост, но работает нормально, однако он делает несколько предположений относительно вашей настройки сети (только для eth0).

Надеюсь поможет.


0

Я имел дело с несколькими сетевыми картами, и ничто из вышеперечисленного не работало для меня (VMware Fusion 7 / VMware 6 и ниже), поэтому я написал сценарий. Тарбол здесь .

Вот то, READMEчто идет с этим:

  • Этот tar-архив и связанные с ним сценарии изменят MAC-адрес вашего недавно клонированного компьютера VMware CentOS 6 или ниже (без systemd.)
  • Все, что вам нужно сделать на машине, вы будете клонировать только один раз:

    1. устанавливать lshw
    2. замените MAC-адрес во всех ваших устройствах /etc/sysconfig/network-scripts/ifcfg-eth?на MACDADDY num, где num - номер сетевого интерфейса. Вы должны следовать шаблону именования для файла.
    3. бегать:

      chckconfig change_mac_address on
      

      Это должно добавить ссылки sym на правильных уровнях выполнения, указанных в файле

    4. Клонируйте машину как обычно и запустите ее. Это должно изменить MAC-адрес в каждом из ваших ifcfg-eth?файлов,
      • стереть файл udev,
      • повторно просканируйте ваше устройство e1000,
      • и перезагрузите сеть

Проблемы:

  • Не знаю почему, но иногда вам нужно перезапустить сеть во второй раз, чтобы все сетевые карты были распознаны:

    /etc/init.d/network restart
    

    Исправлено это, поставив sleep 20в начале/etc/init.d/network

  • Это не было проблемой для меня, но сценарий полагается на lshwвозврат сетевых карт в том же порядке, что иifcfg-eth?
  • Это предполагает, что ваши устройства NIC e1000. Стандарт VMware?
  • Возможно, стоит изменить нумерацию ваших ifcfg-eth?файлов, чтобы они соответствовали тому lshw, что возвращается в маловероятном случае, если это не сработает, и вы работаете на большом количестве машин с большим количеством сетевых карт.
  • С одним NIC это должно просто работать.
  • После первого запуска /usr/bin/change_mac_address.plперемещается/usr/bin/change_mac_address.pl.old
  • Это будет препятствовать запуску при каждой перезагрузке, даже если он не будет ничего делать, если нет MACDADDY? в вашейifcfg-eth?
  • Вы также можете и, вероятно, должны бежать

    chkconfig change_mac_address off
    
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.