Показаны сообщения с ярлыком Linux. Показать все сообщения
Показаны сообщения с ярлыком Linux. Показать все сообщения

среда, 27 апреля 2011 г.

mlabel - make an MSDOS volume label

Выставить метку тома на раздел флешки
mlabel -i /dev/sdf1 ::HDS

воскресенье, 7 ноября 2010 г.

Именованные каналы UNIX и синхронизация процессов

Почему-то не нашел примеров использования именованных каналов для синхронизации процессов. С их помощью можно легко написать скрипт для распараллеливания задач - просто на bash (например, для кодирования видео или архивации большого кол-ва файлов в несколько потоков, чтобы использовать все имеющиеся в наличии ядра CPU)!
В демонстрационных целях распараллеливать буду очередь из 10 команд sleep <случайное число> :))

#!/bin/bash

PipeFile="./task4all.pipe"
LogFile="./task4all.log"
MaxParallelTasks=3
TaskList=$(for i in {1..10} ; do echo $((RANDOM%12)) ; done); 

ParallelTasks=0

#Проверяем, нет ли уже созданного именованного канала, если нет - создаем
[ -p $PipeFile ] || mkfifo $PipeFile

#Основной цикл по задачам
for task in $TaskList ; do
#Если максимальное число потоков достигнуто - ждем завершения одного или нескольких
#из работающих процессов (или просто читаем сообщения о завершении работы,
#которые могли накопиться в канале).
 if [ $ParallelTasks -eq $MaxParallelTasks ] ; then
  taskscompleted=$(wc -l $PipeFile | cut -d' ' -f 1)
  ParallelTasks=$(($ParallelTasks-$taskscompleted))
 fi
#Увеличиваем число работающих потоков на 1 и стартуем работу в новом экземпляре shell.
#По завершении работы, порожденный shell запишет сообщение об этом в именованный канал
#и дождется прочтения этого сообщения родительским скриптом.
 ((ParallelTasks++))
 echo "start:$(date +%d%m%Y.%H%M%S):$task" >> $LogFile &&
 sleep $task &&
 echo "finish:$(date +%d%m%Y.%H%M%S):$task" | tee -a $PipeFile >> $LogFile &
done
echo "$(date +%d%m%Y.%H%M%S):All tasks started!" | tee -a $LogFile

#Ждем завершения последних рабочих процессов
while [ ! $(grep -c 'start:' $LogFile) -eq $(grep -c 'finish:' $LogFile) ] ; do
 cat ./task4all.pipe > /dev/null
done

echo "$(date +%d%m%Y.%H%M%S):All tasks finished!" | tee -a $LogFile

#Удаляем канал
rm $PipeFile

Подробная информация об именованных каналах в UNIX:
http://developers.sun.com/solaris/articles/named_pipes.html
Особенно рекомендуется 10 строк раздела "Reading From and Writing to a Named Pipe"
Там содержатся основные замечания, которые надо иметь ввиду, используя named pipes для синхронизации.

понедельник, 1 марта 2010 г.

Фрагментация ext3 снизила производительность ~ в 10 раз

Заметил потрясающе низкую скорость чтения с USB HDD:

cray ~ # dd if=/mnt/MobMedia/TorrentsDownloads/debian-503-amd64-DVD-1.iso of=/dev/null bs=1024k count=100

100+0 записей считано
100+0 записей написано
скопировано 104857600 байт (105 MB), 38,4114 c, 2,7 MB/c
cray ~ # mount | grep MobMedia
/dev/sdh3 on /mnt/MobMedia type ext3 (rw,noexec,nosuid,nodev,noatime)
cray ~ # dd if=/dev/sdh3 of=/dev/null bs=1024k count=100
100+0 записей считано
100+0 записей написано
скопировано 104857600 байт (105 MB), 3,8945 c, 26,9 MB/c
cray ~ # fsck -y -f /dev/sdh3
fsck from util-linux-ng 2.16.2
e2fsck 1.41.9 (22-Aug-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
MobMedia: 765/6045696 files (88.1% non-contiguous), 22266376/24155735 blocks

Откуда такая большая фрагментация?
Ответ прост: данный жесткий диск был подключен к Dlink DIR-320 с DD-WRT и торрент клиентом на борту. Т.к. памяти у роутера "кот наплакал", кэша файловой системы практически не было. Данные (параллельная загрузка множества файлов) сразу писались на диск.
Лечится перемещением файлов на другой раздел и обратно (онлайн дефрагментаторов под ext3 нет).


четверг, 18 февраля 2010 г.

GRUB: Cannot mount selected partition

Если grub не находит /boot раздел


проще всего найти свой /boot набрав
grub> root
root
(hd0,0): Filesystem type is ext2fs, partition type 0x83


или по-другому

grub> find (hd[tab]
покажет все установленные диски на машине

grub> find (hd0,[tab]
покажет все возможные разделы на диске и их тип

на знакомых загрузчику разделах можно поискать /grub/grub.conf и таким образом обнаружить root (т.е. тот, который /boot)
grub> find (hd0,0)/grub/grub.conf
(hd0,0)

теперь можно определить /boot
grub> root (hd0,0)

и прочитать grub.conf
grub> cat (hd0,0)/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/rootvg/rootvol
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-164.10.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.10.1.el5 ro root=/dev/rootvg/rootvol rhgb quiet
initrd /initrd-2.6.18-164.10.1.el5.img
title CentOS (2.6.18-164.10.1.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-164.10.1.el5
module /vmlinuz-2.6.18-164.10.1.el5xen ro root=/dev/rootvg/rootvol rhgb quiet
module /initrd-2.6.18-164.10.1.el5xen.img

и определить, какое ядро, initrd (если нужно) и корневой каталог использовать для загрузки (собственно, так же как они указаны в конфиг файле)
После успешной загрузки нужно отредактировать и перезаписать grub в mbr:
$ vi /boot/grub/grub.conf

$ grub
grub> root (hd0,0) (указание расположения раздела с /boot)
grub> setup (hd0) (установка GRUB в MBR)
grub> quit (выход из оболочки GRUB)

http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?part=1&chap=10#doc_chap2

среда, 13 января 2010 г.

Enable remote XDMCP on RHEL5 & CentOS5

# vi /etc/gdm/custom.conf

[security]
AllowRemoteRoot=true

[xdmcp]
Enable=true

or gui

# gdmsetup

and

# gdm-restart

open udp port 177 on iptables

пятница, 6 марта 2009 г.

Замена seq в коммерческих UNIX.

Замечали, что в Solaris и AIX нет seq?
Неудобно писать цикл так:

$ for (( (i=0) ; (i<10) ; (i++) )) ; do echo $i ; done

Но можно и так :)

$ for i in {0..9} ; do echo $i ; done

Работает в bash, sh, ksh. В остальных не проверял.

воскресенье, 25 января 2009 г.

Эмулятор терминала rxvt-unicode, он же urxvt


rxvt-unicode - просто мечта: легкий, шустрый, поддержка юникода и вкладок!

Переключение по вкладкам - шифт+курсоры влево/вправо, шифт+курсор вниз - новая вкладка. контрл+курсоры - менять вкладки местами.

Конфиг хранит в ~/.Xdefaults
После правки конфига для вступления изменений в силу:
# xrdb -merge ~/.Xdefaults

Мой конфиг:
URxvt*perl-ext: tabbed
URxvt*scrollBar: False
URxvt*saveLines: 5000
URxvt.font: xft:Terminus:style=Regular:size=10
URxvt*geometry: 98x30

URxvt*background: Black
URxvt*foreground: #BBBBBB

URxvt*color0: #000000
URxvt*color1: #aa0000
URxvt*color2: #00aa00
URxvt*color3: #aa5500
URxvt*color4: #0000aa
URxvt*color5: #aa00aa
URxvt*color6: #00aaaa
URxvt*color7: #aaaaaa
URxvt*color8: #555555
URxvt*color9: #ff5555
URxvt*color10: #55ff55
URxvt*color11: #ffff55
URxvt*color12: #5555ff
URxvt*color13: #ff55ff
URxvt*color14: #55ffff
URxvt*color15: #ffffff

yeahconsole*term: urxvt
yeahconsole*restart: 1
yeahconsole*toggleKey: None+Menu
yeahconsole*keyFull: Alt+F12
yeahconsole*aniDelay: 10
yeahconsole*foreground: grey
yeahconsole*background: black
yeahconsole*xOffset: 200
yeahconsole*screenWidth:1200
yeahconsole*consoleHeight:27

См. также
# man urxvtperl

yeahconsole тоже жжет.

http://blackdiv.livejournal.com/33285.html
http://tom.azatom.info/blog/index.php/post/2007/12/30/x11-terms/yeahconsole-Quake-like-xterm

http://bugs.gentoo.org/show_bug.cgi?id=120112
http://sisyphus.ru/srpm/Sisyphus/yeahconsole/get

пятница, 9 января 2009 г.

Напильник для Fedora 10 (Russian Fedora) под ноутбук Dell D430

1. Установка

Скачать: http://russianfedora.ru/rf10-announcement
Russian Fedora, т.к. у нее сразу встроены репы rpmfusion и tigro, а также есть профиль установки XFCE-десктопа без сети (его я и ставил).
После установки сделал
# yum update

2. Отключение pc speaker

Ищем модуль поддержки этого чуда:
# lsmod | grep sp
pcspkr 6272 0

Чтобы не пищал в текущей сессии:
# rmmod pcspkr

Чтобы модуль не загружался при запуске ОС:
#vi /etc/modprobe.d/blacklist
blacklist pcspkr

3. Отключение графической загрузки.

В Федоре 10 по умолчанию используется графическая загрузка средствами plymouth. Идея этого графического загрузчика, конечно, хороша: после старта ядра экран переключается в нужный режим и более, даже при старте X, не мерцает, а показывает симпатичную заставку.
Но, для работы plymouth необходим DRM kernel modesetting driver. Судя по всему, он есть только для некоторых ATI и Intel. Для моего Intel'а (945GM/GMS/GME) - нет.

Сразу скажу, что для плимута есть кучка тем, как графических (их дополнительно можно ставить yum'ом), так и текстовых. Если плимуту не удается стартануть с графической темой (solar by default - там про планету что-то - можно на ютубе посмотреть :), то он запускается с текстовой (text - внизу экрана ползет трёхцветная полосочка с надписью Fedora 10).
Все темы лежат в каталоге /usr/lib/plymouth/ в виде .so:
# ls -l /usr/lib/plymouth/
total 64
lrwxrwxrwx 1 root root 10 2009-01-06 23:17 default.so -> details.so
-rwxr-xr-x 1 root root 9292 2008-11-17 23:52 details.so
-rwxr-xr-x 1 root root 7068 2008-11-17 23:52 label.so
-rwxr-xr-x 1 root root 29768 2008-11-17 23:52 solar.so
-rwxr-xr-x 1 root root 10344 2008-11-17 23:52 text.so

Так вот, у меня, конечно, плимут показал полосочку, что меня огорчило, т.к. олдскульный экран с запуском служб куда эффектней :). Олдскульная тема плимута тоже есть. Она называется details.

Поменять тему плимута можно так:
#plymouth-set-default-plugin
И обновить initrd:
#/usr/libexec/plymouth/plymouth-update-initrd

Да, включить графическую загрузку можно и без поддержки DRM kernel modesetting, если выставить видео режим framebuffer'а с помощью параметра ядра vga=... (будет работать почти у всех т.к. VESA поддерживает большинство видеокарт). Посмотреть как это сделать можно по ссылкам ниже. У меня такая загрузка заработала, но экран, конечно, при запуске X, мерцал и загрузка шла немного дольше - от такого варианта я отказался.

Далее, хотелось бы на пару секунд все же видеть меню grub и логи ядра при запуске.
Для этого, нужно подправить /boot/grub/grub.conf:

закомментировать hiddenmenu (чтобы показывалось меню), выставить timeout=2 (показывать меню 2 секунды) и убрать из строчки kernel параметр quiet (чтобы были видны логи загрузки ядра)

Ссылки по теме plymouth:
http://www.my-guides.net/en/content/view/125/26/1/12/
http://spoilt.blogsite.org/wordpress/index.php/2008/12/23/fedora-10-graphical-bootloader-plymouth

4. Отключение IMSETTINGS.

Честно говоря, не совсем понял архитектуру этой новой системы контроля методов ввода. Но то, что я понял, позволило сделать вывод, что эта штука мне не нужна :) Т.к. я пользуюсь только двумя языками, оба языка с алфавитом и письмом слева направо.

# vi /etc/X11/xinit/xinitrc.d/50-xinput.sh
DISABLE_IMSETTINGS=true

См.: http://crossonline.blogspot.com/2008/11/howto-stop-imsetting-daemon-im-info.html

5. Отключение SELINUX

В Русской Федоре он, правда, и так в режиме Permissive, но я им не умею пользоваться абсолютно (пока не умею) - поэтому просто его выключил.

#vi /etc/selinux/config
SELINUX=disabled

6. Настройка wifi с WPA и без NetworkManager.

Да, у меня wifi карточка Broadcom Corporation BCM4311 802.11b/g WLAN (rev 01) -- из lspci.
Для нее нужен микрокод (firmware) от производителя, который придется скачать и извлечь из проприетарных дров самостоятельно.

Пока микрокод не загружен в карточку, wpa_supplicant отвечал ошибкой:
SIOCSIFFLAGS: No such file or directory
Could not set interface 'wlan0' UP

А в логи ядра сыпались ошибки:

kernel: firmware: requesting b43/ucode5.fw
kernel: b43-phy0 ERROR: Firmware file "b43/ucode5.fw" not found
kernel: b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/b43#devicefirmware and download the latest fi
rmware (version 4).
firmware.sh[2229]: Cannot find firmware file 'b43/ucode5.fw'

По url: http://linuxwireless.org/en/users/Drivers/b43#devicefirmware есть подробная инструкция как выдрать Firmware.
Вкратце:
# mkdir b43firmware
# cd b43firmware/
# export FIRMWARE_INSTALL_DIR="/lib/firmware"
# wget http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2
# tar xjf broadcom-wl-4.150.10.5.tar.bz2
# cd broadcom-wl-4.150.10.5/driver
# b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta_mimo.o

Бинарь b43-fwcutter из пакета b43-fwcutter. Если он не стоит - нужно проинсталлировать yum'ом.

Все, микрокод есть!

Я не люблю NetworkManager.

# yum erase NetworkManager
и зависимости туда же

Но мне нужен wifi.
Для настройка wifi с wpa в федоре нужно поправить 3 файла и запустить демон wpa_supplicant.

/etc/sysconfig/wpa_supplicant - конфигурационный файл демона wpa_supplicant:

# Use the flag "-i" before each of your interfaces, like so:
# INTERFACES="-ieth1 -iwlan0"
INTERFACES="-iwlan0"

# Use the flag "-D" before each driver, like so:
# DRIVERS="-Dwext"
DRIVERS="-Dwext"

# Other arguments
# -u Enable the D-Bus interface (required for use with NetworkManager)
# -f Log to /var/log/wpa_supplicant.log
OTHER_ARGS="-u -f /var/log/wpa_supplicant.log"

Тут вроде все интуитивно понятно. Указать беспроводные интерфейсы и тип драйвера (wext - использовать драйверы из ядра? :)

Добавить wpa_supplicant в нужные уровни запуска:
# chkconfig wpa_supplicant on

/etc/wpa_supplicant/wpa_supplicant.conf - конфигурация беспроводных сетей:
Всех параметров не помню. По-русски можно почитать на доках гентушников (сам из них :)
http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?part=4&chap=4#doc_chap2

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
ap_scan=1

network={
ssid="SSID_WLAN"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk="P@$$w0rD"
priority=2
}

/etc/sysconfig/network-scripts/ifcfg-wlan0 - конфигурационный файл сетевого интерфейса:

DEVICE=wlan0
HWADDR=you_mac
ONBOOT=no
BOOTPROTO=dhcp
DHCP_HOSTNAME=my_laptop
TYPE=Wireless
ESSID=SSID_WLAN
MODE=Managed
RATE=Auto
USERCTL=yes
IPV6INIT=no
NM_CONTROLLED=no
WPA=yes

Ноутбук получает параметры сети по dhcp от точки доступа.

Что-то не работает? Как проверить где проблема?
1. Остановить wpa_supplicant
# service wpa_supplicant stop
2. Поубивать работающие экземпляры wpa_supplicant
# killall wpa_supplicant
3. Запустить wpa_supplicant вручную
# wpa_supplicant -B -Dwext -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
Он останется висеть в консоли. Вылетает с ошибками? Проблема, видимо, с драйверами. М.б. микрокод? dmesg в помощь.
4. Из другого терминала посмотреть настройки iwconfig.
Подхватилась ли сетка на уровне wifi? Назначился ли ESSID, Encryption key?
Если нет, значит проблема в настройках wpa (/etc/wpa_supplicant/wpa_supplicant.conf).
5. Если да, то получаем по dhcp/назначаем параметры ip сети и пробуем работать.

7. [НЕ] Приятные мелочи.

a. Выключаю PakageKit апплет (все равно софт ставлю из консоли yum'ом)
# xfce4-autostart-editor
или копать в сторону ~/.config/autostart/ и /etc/xdg/autostart/ - это для всех
opendesktop.org совместимых DE

b. Нравятся мне murrine-based темы
# yum install gtk-murrine-engine

c. Terminus = True
# yum install terminus-font-console terminus-font-x11

d. MS corefonts - особо не нужны, но вдруг...
# wget http://www.my-guides.net/en/images/stories/fedora9/msttcore-fonts-2.0-2.noarch.rpm
# rpm -ivh msttcore-fonts-2.0-2.noarch.rpm

e. PgUp/PgDown - поиск в истории bash по введенной части команды - "попробуй - полюбишь"

# vi /etc/inputrc
добавить куда-нибудь перед последним $endif:

# mappings for "page up" and "page down" to step to the beginning/end
# of the history
"\e[5~": history-search-backward
"\e[6~": history-search-forward

f. Хочется, что б scroll lock загорался на русской раскладке... а xorg.conf - то отсутствует... (Актуально для XFCE. Переключалка еще не умеет зажигать светодиод)
Ну и не нужен он (хотя, при желании - можно создать).
setxkbmap -layout "us,ru" -model "pc105" -option "grp:ctrl_shift_toggle,grp_led:scroll"
в автозапуск DE.
Хм... может, это можно было сделать средствами отключенного мной X INPUT METHOD?

g. Мне нужна Sun Java.

В репе tigro есть JDK (устанавливается в /usr/java). Можно поставить ее (ок 80Мб) и сконфигурить по инструкции http://www.fedoralinux.ru/content/view/102/50/#23_2_sunjava
Либо все сделать по этой инструкции :) - т.е. самостоятельно скачать JDK/JRE, распаковать и настроить.

воскресенье, 21 декабря 2008 г.

JAVA плагин для firefox в Gentoo

В Gentoo симлинк для подключения java плагина к firefox лежит немного в необычном месте.
/usr/lib/nsbrowser/plugins/javaplugin.so
Сами библиотеки (а точнее симлинки на них - используется java-config-2 :) находятся тут:
/usr/share/java-config-2/nsplugin/sun-jdk-1.6-javaplugin.so - эта для любого ff
/usr/share/java-config-2/nsplugin/sun-jdk-1.6-plugin2-javaplugin.so - эта только для ff3 (у меня он как-то криво работал)

cray ~ # ln -s /usr/share/java-config-2/nsplugin/sun-jdk-1.6-javaplugin.so /usr/lib/nsbrowser/plugins/javaplugin.so

пятница, 27 июня 2008 г.

Регулирование громкости Creative X-Fi X-MOD USB

Приобрел звуковуху Creative X-Fi X-MOD USB.
Подключил - звук пашет нормально (ядерный модуль snd_usb_audio).
Есть на ней аппаратный регулятор громкости, который на самом деле просто генерирует событие, которое можно отловить в системе, как нажатие на кнопку.

Для прикручивания использовал xbindkeys и amixer.
В домашний каталог необходимо поместить файл .xbindkeysrc (~/.xbindkeysrc), настроить его, и засунуть xbindkeys в автозапуск окружения рабочего стола.
Конфигурационный файл .xbindkeysrc имеет простой синтаксис:

"команда для запуска"
связанная клавиша

Коды клавиш смотрим командой xev, нажимая на них.
У меня получилось:
вращение по часовой стрелке - m:0x10 + c:176
вращение против часовой стрелке - m:0x10 + c:174
нажатие - m:0x10 + c:160
Файл настроек получился таким:

"amixer -c 0 get PCM | grep off > /dev/null; if [ $? = 1 ]; then amixer -q -c 0 set PCM mute; else amixer -q -c 0 set PCM unmute; fi;"
m:0x10 + c:160

"pgrep amixer; if [ $? = 1 ]; then amixer -c 0 set PCM 3dB+; fi;"
m:0x10 + c:176

"pgrep amixer; if [ $? = 1 ]; then amixer -c 0 set PCM 3dB-; fi;"
m:0x10 + c:174

-с 0 -- это параметр передающий номер звуковухи с которой работаем (у меня нуль т.к. она в системе единственная)
Верхняя команда выполняет проверку состояния mute и производит переключение на противоположное значение.
Еще две командные строки - управление громкостью. Они несколько усложнены проверкой наличия amixer в таблице процессов. Это обусловлено там, что быстрый поворот регулятора вызвал бы множественный одновременный запуск amixer, что повлекло бы несколько неадекватную регулировку из-за асинхронности вызовов на чтение и установку значения громкости (ничего страшного, но неприятно).
Можно убедиться в вышесказанном, попробовав использовать просто amixer -c 0 set PCM 3dB+ и amixer -c 0 set PCM 3dB- соответственно.
pgrep отрабатывает значительно быстрее amixer, что позволяет практически отвергать попытки запустить дубли процессов изменения громкости (теоретически, это, конечно, возможно т.к. pgrep операция отнюдь не атомарная, а bash-код тем более).

P.S.
~ $ time amixer -c 0 set PCM 3dB+ > /dev/null
real 0m0.228s
user 0m0.000s
sys 0m0.000s
~ $ time pgrep amixer
real 0m0.007s
user 0m0.000s
sys 0m0.004s

среда, 11 июня 2008 г.

Установка словарей StarDict

Берем отсюда.

Распаковываем и ФАЙЛЫ (не каталоги) кучкой кидаем в

/usr/share/stardict/dic

(хотя, должны работать и каталоги, но у меня не получилось)

Активно обсуждается тут.

воскресенье, 8 июня 2008 г.

Fedora 9 boot without graphics (text mode startup)

В Fedora 9, как и в прошлых версиях, процесс запуска служб во время загрузки отображается в графическом режиме. Я, как большой любитель Gentoo, категорически против этого :)
Изменяется данное положение дел в файле

/etc/sysconfig/init

необходимо выставить параметр

GRAPHICAL=no

понедельник, 10 сентября 2007 г.

nVidia nForce2 Ethernet Controller MAC 00:00:00:00:00:00, Linux и Udev

Обнаружилась проблема с MAC адресом встроенной сетевухи материнки Abit NF7 - он состоит их одних нулей что, понятное дело, недопустимо.

Проявилось под Linux'ом это так: после очередной перезагрузки номер сетевого интерфейса соответствующего карте увеличивался на единицу - т.е. особо при загрузке интерфейсы не поподнимаешь.

Дело оказалось в том, что ядро, обнаруживая при загрузке недопустимый MAC присваивала сетевухе случайный адрес, а udev идентифицируя карточку как раз по мак-адресу, думала, что это новая сетевуха и создавала для нее новый интерфейс.
Вылечилось методом добавления udev правила, которое привязывало бы интерфейс не к мак, а к модели сетевухи (учитывая, что она встроенная, второй такой в системе быть не может):

В /etc/udev/rules.d/ я создал новый файл, который назвал 71-persistent-net.rules (В каталоге уже был файл 70-persistent-net.rules, в котором и содержалась немеряная куча правил о присвоении больной сетевухе новых интерфейсов, а также запись о моей второй карточке. Инфу о второй карточке оставил - остальное удалил.) и добавил в него строку:
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{device}=="0x0066", NAME="eth0"
Это означает, что если есть сетевое устройство, под него есть драйвера и оно имеет ID 0x0066, то нужно привязать его к eth0.

Узнать ID можно так:
> cat /sys/class/net/eth{Номер интерфейса в данный момент}/device/device

например:
> cat /sys/class/net/eth12/device/device

По поводу правил udev - читаем man udev