Архів мітки: udev

Міграція гостьових Debian у VirtualBox та проблеми з мережею NAT

Нещодавно я скопіював усі свої гостьові операційні системи з одного комп’ютера на інший. Через OVL формат – це тривіальні задача. Хоча, якщо назви у віртуальних машин однакові (а саме назви файлів для дисків), то це не виходить зробити за один раз. Доводиться кожну таку машину окремо.

Так от, всі машини запустились без проблем, а старенька Debian 4.0 – ні. Точніше вона начебто працювала нормально, але без мережевого інтерфейсу eth0:

$ /sbin/ifconfig
lo        Link encap:Local Loopback  
 inet addr:127.0.0.1  Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING  MTU:16436  Metric:1
 RX packets:8 errors:0 dropped:0 overruns:0 frame:0
 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)

Спроба запустити його вручну закінчилась нічим:

# ifup eth0
Internet Systems Consortium DHCP Client V3.0.4
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

SIOCSIFADDR: No such device
eth0: ERROR while getting interface flags: No such device
eth0: ERROR while getting interface flags: No such device
Bind socket to interface: No such device
Failed to bring up eth0.

Файл /etc/network/interfaces післе переносу не редагувався і містив стандартні рядки:

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

Трохи погугливши вияснив, що проблема в udev. А ще точніше – у файлі /etc/udev/rules.d/z25_persistent-net.rules. На різних версіях Debian-оподібних операційних систем він може мати інші префікси, але persistent-net.rules буде присутнє. Файл мав такий зміст:

# This file was automatically generated by the
# /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules
# file.
#
# You can modify it, as long as you keep each rule on a single line.
# MAC addresses must be written in lowercase.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="08:00:27:a5:c0:ff",
 NAME="eth0"

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="08:00:27:97:b2:6b",
 NAME="eth1"

Як я зрозумів, при міграції гостьової Debian, було змінено MAC адресу мережевого адаптеру. І система udev чомусь подумала, що це новий адаптер. Мені залишилось лише видалити інформацію про eth0 (перший рядок) та змінити в другому eth1 на eth0:

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="08:00:27:97:b2:6b",
 NAME="eth0"

Після перезапуску віртуальної машини – мережа піднялась автоматично.