UNIX-подобные операционные системы устроены так, что если в них что-то
ломается, то они не пытаются самовосстановиться, а честно сообщают о
случившемся. Дальнейшая судьба операционки зависит от квалификации владельца
компа: новичок сразу затеет переустановку, матерый же юниксоид спокойно
загрузится с LiveCD, наберет в терминале несколько команд и отправит комп на
перезагрузку, довольно усмехнувшись. Дизайн UNIX настолько прост и прямолинеен,
что ОС можно поднять с колен, в каком бы состоянии она ни находилась.

Всего существует шесть классов проблем, с которыми сталкиваются пользователи
никсов:

  1. Загрузка. Затертая запись MBR, забытый пароль root.
  2. Оборудование. Подвисания и самопроизвольная перезагрузка ОС, паника
    ядра.
  3. Винчестеры. Затертая таблица разделов, выход из строя жесткого диска.
  4. Графическая подсистема. Неправильная настройка xorg.conf, отсутствующий
    видеодрайвер, тормоза.
  5. Драйвера. Все, что связано с нераспознанным оборудованием.
  6. Сеть. Неправильная настройка сетевых интерфейсов, неработающий
    DNS-резолвинг.

Мы рассмотрим способы борьбы с каждой из этих проблем.

 

Когда пингвин отказывается выходить на старт

Проблема затертой записи MBR загрузчиком другой операционной системы уже
возведена в разряд запрещенной к обсуждению на многих тематических форумах,
попала в многочисленные FAQ и глубоко сидит в печенках опытных пользователей.
Нет в нашей стране новичка в Linux, который бы ни разу с ней не сталкивался. А
между тем, решение очень простое: достаточно загрузиться с любого Linux LiveCD,
открыть окно терминала и набрать заветную команду:

$ sudo grub-install /dev/sda

В большинстве ситуаций этой команды будет достаточно для возвращения
загрузчика на законное место. Но если вместо глубокомысленного молчания
grub-install разразится бранными ругательствами — дело плохо! Придется запустить
командную строку grub:

$ sudo grub

Команда "find /boot/grub/stage1", введенная в ответ на приглашение grub,
должна выдать на экран имя дискового раздела, содержащего каталог /boot/grub.
Далее все просто:

: root дисковый_раздел
: setup (hd0)
: quit

Куда реже страдают от проблемы затертого загрузчика пользователи FreeBSD, но
такое случается и в с ними. Алгоритм восстановления записи MBR тут несколько
иной:

  1. Загружаемся с первого или восстановительного диска FreeBSD.
  2. Выбираем пункт меню "Fixit", далее "CDROM/DVD".
  3. Набираем в открывшейся командной строке "boot0cfg -o packet ad0 && exit".
  4. Жмем на системном блоке кнопку Reset.

С MBR все. Теперь поговорим о забытом пароле пользователя root. Как же
юниксоиды любят выдумывать длинные, запутанные пароли, а потом с успехом их
забывать, и как же они радуются, узнав, что для восстановления пароля достаточно
выполнить всего два простых действия. А именно – загрузиться в
однопользовательском режиме и удалить пароль из базы пользователей с помощью
команды vipw.

В Linux вход в однопользовательский режим осуществляется за счет передачи
ядру опции single. Выбери в grub нужный пункт меню, нажми ‘e’, добавь в конец
появившейся строки слово single и нажми <Enter>. Ядро благополучно загрузится и
запустит /bin/sh от имени суперпользователя. Выполни команду vipw, сотри
звездочку в поле пароля пользователя root, выйди из редактора и набери exit.

Чтобы попасть в однопользовательский режим FreeBSD, требуется нажать ‘4’ в
ответ на загрузочное меню или набрать "boot -s" в командной строке загрузчика.

 

Железная болезнь

Часто ядро отказывается загружаться или корректно работать по причине кривой
реализации ACPI в чипсете или BIOS’е материнской платы. Разработчики
операционных систем уже устали ругаться по этому поводу; ядра Linux и FreeBSD
содержат даже не десятки, а сотни воркэраундов для материнских плат, обладающих
такой неприятной особенностью. Однако очевидно, что с момента поступления
материнской платы в продажу и до обнаружения в ней ошибок проходит какое-то
время, поэтому не стоит надеяться, что твоя свежекупленная бажная ASUS уже есть
в черных списках ядра.

Проблемы с ACPI и подконтрольным ему IO-APIC могут проявляться по-разному:
периодические зависания ОС, неработающая клавиатура и мышь, сообщения ядра "MP-BIOS
bug: 8254 timer not connected to IO-APIC", но чаще всего "железный баг" дает о
себе знать уже на этапе установки ОС. Инсталлятор просто входит в ступор во
время копирования файлов.

К счастью, это легко обходится через явное отключение APIC и/или ACPI в ядре.
Для Linux необходимо выбрать нужный пункт меню в загрузчике grub, нажать ‘e’,
добавить в конец появившейся строки слово noapic и нажать ‘b’. Для фиксации
изменений открываем файл /boot/grub/grub.conf и добавляем noapic ко всем
строкам, начинающимся со слова kernel. Если и это не поможет, полностью
отключаем ACPI через опцию "acpi=off".

Для FreeBSD достаточно нажать клавишу ‘2’, когда появится меню загрузчика, а
затем зафиксировать изменения, добавив строку "hint.apic.0.disabled=1" в
loader.conf:

# echo "hint.apic.0.disabled=1" >> /boot/loader.conf

Периодические подвисания операционной системы или постоянные уходы ядра в
панику могут свидетельствовать о том, что оперативная память дышит на ладан.
Если подвисания случаются с периодичностью раз в час или тридцать минут, скорее
всего, погорели только некоторые ячейки одной из планок. В случае выхода из
строя всего модуля памяти ядро уйдет в панику при следующей же загрузке!

Проверить память на сбойность не составляет труда. Самый примитивный способ —
запаковать и распаковать большой объем данных, например, дерево исходных текстов
ядра:

$ tar -czf ~/src.tar.gz /usr/src && tar -xzf ~/src.tar.gz

Сбойные ячейки памяти вызовут коллизии при сверке контрольных сумм, и
архиватор без замедления сообщит об этом.

Другой (более правильный) способ проверки заключается в использовании
профессионального инструмента memtest86. Это самодостаточная программа, которая
не требует операционной системы для своей работы. Она изначально присутствует в
меню grub многих дистрибутивов и LiveCD Linux. Просто перезагрузи машину и
выбери пункт меню memtest86. Проверка памяти начнется автоматически.

Программа memtest86 использует множество различных алгоритмов тестирования,
поэтому проверка может затянуться надолго. Рекомендую запустить memtest86 на
ночь, лечь спать, а утром проверить, нет ли в выводе красных строчек,
сигнализирующих о сбойных ячейках.

Частые самопроизвольные перезагрузки машины, особенно во время запуска
тяжелых приложений или игр, — следствие перегрева процессора или видеокарты.
Проверь работоспособность кулеров и, в случае необходимости, замени их. Если
времени на эту процедуру нет, а работать надо, попробуй снизить частоту
процессора или чипа видеокарты.

Многие современные процессоры и материнские платы позволяют изменять тактовую
частоту процессора "на лету", без перезагрузки компа. Обычно для этого
предоставляется специальный интерфейс, расположенный в недрах каталога /sys в
Linux или в одной из ветвей sysctl во FreeBSD.

Для манипулирования частотой и другими характеристиками видеопроцессора
принято использовать кроссплатформенную утилиту nvclock. Запусти ее с флагом ‘-s’,
чтобы узнать текущую частоту GPU:

# nvclock -s

А затем снизь ее примерно на 100 МГц:

# nvclock -n 300

 

Винты посыпались

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

Чтобы не попасть впросак, специалисты рекомендуют периодически проверять
состояние жесткого диска, используя утилиты для отображения статистики S.M.A.R.T.,
специального чипа, встроенного в жесткий диск. В *nix-системах тоже есть такие
утилиты, самая известная из которых именуется smartctl.

Пакет smartmontools, содержащий программу smartctl, предустановлен почти в
любом дистрибутиве Linux, а во FreeBSD доступен через систему портов (sysutils/smartmontools).

Запустим smartctl:

# smartctl -A /dev/sda

В появившейся на экране таблице нас интересуют только две строки:
Reallocated_Sector_Ct и Temperature_Celsius. В последней колонке первой из них
отражено количество переназначенных секторов. Значение, отличное от нуля,
говорит о проблемах. Диск начинает сыпаться, и число переназначенных секторов
будет только расти. Последняя колонка строки Temperature_Celsius содержит
текущую температуру жесткого диска, которая не должна превышать 50-ти градусов
(36-45 градусов — идеальные условия).

Значения S.M.A.R.T. — это всего лишь цифры, которые далеко не всегда имеют
связь с реальным состоянием жесткого диска. Более того, исследования,
проведенные компанией Google, показали, что в 60% процентах случаев вероятность
гибели дисков никак не связана со значениями S.M.A.R.T., а единственный
более-менее достоверный показатель — это количество переназначенных секторов.

Но что, если диск уже почти умер, а информация не может быть восстановлена
из-за повторяющихся ошибок чтения или перемещения головки? Тогда при попытке
копирования файлов ядро завалит dmesg сообщениями I/O error, а команда cp просто
возвратит ошибку. Для начала следует попробовать отмонтировать раздел и слить
информацию с помощью dd на другой жесткий диск (здесь и далее /dev/sda —
сыплющийся диск, /dev/sdb — новый диск):

# dd if=/dev/sda of=/dev/sdb conv=noerror,sync

Если количество сбойных секторов на диске невелико, то dd скопирует диск,
заполнив проблемные участки нулями. После этого останется только выполнить fsck
для всех файловых систем и жить дальше с новым диском.

К сожалению, трюк с применением dd срабатывает не всегда. В некоторых
ситуациях диск оказывается поврежденным настолько, что сбойные участки
простираются на сотни тысяч или даже миллионы секторов подряд! Завершения
отработки dd придется ждать несколько дней, за которые подопытный вполне может
скончаться.

Лучшие умы планеты советуют использовать специальную утилиту dd_rescue, с
помощью которой можно провести копирование диска с двух сторон: первый проход с
начала диска, второй — с конца. В результате на новом диске окажется вся
информация за исключением проблемного участка.

Делаем первый проход:

# dd_rescue -v -y 1G -l sda.log -o sda.bb \
/dev/sda /dev/sdb

Когда диск начнет безумно шелестеть, нажмем <Ctrl+C>, чтобы завершить
копирование, и запускаем процесс копирования с конца:

# dd_rescue -r -v -y 1G -l sda.log -o sda.bb \
/dev/sda /dev/sdb

Останавливаем процесс копирования после продолжительного шелеста диска и
отключаем умирающего.

Другая проблема — утрата таблицы разделов, которую еще совсем недавно было
принято решать с помощью шестнадцатеричного редактора. Сегодня же проще
применить утилиту gpart:

# gpart -W /dev/sda /dev/sda

Альтернатива gpart — testdisk, более мощная и гибкая программа с
псевдо-графическим интерфейсом.

 

Причуды мистера X

За последнее время X.org стал на порядок интеллектуальнее, и проблемы с ним
уже не являются серьезным препятствием. Теперь X-сервер умеет автоматически
находить устройства ввода, подбирать правильные разрешение и частоту обновления
для монитора. Во многих дистрибутивах настраивать его вообще не нужно,
установочные скрипты сами генерируют правильную конфигурацию.

Но время от времени X-сервер дает сбои. Причем, зачастую виновным оказывается
сам пользователь или система обновления пакетов. Если после загрузки вместо
привычного окна логина ты видишь скучную черную консоль, значит, процедура
запуска сервера завершилась с ошибками. Этому может быть сотня приин, начиная от
отсутствия необходимого драйвера и заканчивая проблемами с каталогом /tmp. Самое
разумное, что можно сделать – попробовать повторно запустить X-сервер командой
startx и посмотреть, какие ошибки она выдаст на экран. В большинстве случаев
этого оказывается достаточно для диагностики проблемы, но если причины сбоя
остаются загадкой, следует обратиться за более подробным разъяснением к файлу /var/log/Xorg.0.log:

# grep EE /var/log/Xorg.0.log

Записывая логи, X-сервер помечает все ошибки маркером "(EE)", так что
приведенная команда выведет только записи, сигнализирующие о проблемах.

Если чувствуешь, что ошибки самостоятельно тебе не исправить, просто выполни
команду "X -configure", которая сгенерирует новый конфигурационный файл X.org.

Кроме сбоев, X-сервер может элементарно тормозить. В этом случае винить
следует уже не пользователя или дистрибутив, а видеодрайвер. Современные
графические тулкиты и некоторые среды рабочего стола (KDE4, например) практикуют
перекладывание части работ по отрисовке графики на плечи графического
ускорителя. Выливается это в скверные показатели производительности в системах,
видеодрайвера которых не поддерживают функции 2D/3D-ускорения. В частности, этим
страдает стандартный nvidia-драйвер nv. Чтобы решить проблему, зайди на сайт
nvidia.com и скачай последний драйвер для своей ОС или сделай то же самое через
систему управления пакетами.

 

Потерянный драйвер

Современные версии Linux и FreeBSD под завязку набиты драйверами даже для
самого экзотического оборудования. Дни, когда для этих операционных систем
приходилось индивидуально подбирать конфигурацию компа, прошли. Сегодня Linux и
FreeBSD легко встают на любой современный сервер, домашний компьютер или лэптоп
и не требуют специального конфигурирования. Загвоздка лишь в том, что драйвера
для "железных новинок" появляются с некоторым опозданием, что вполне
закономерно, но неприятно.

Если твоя свежекупленная железка никак не проявляет работоспособность,
значит, ядро не подхватило ее во время загрузки. Такое может произойти в двух
ситуациях: либо драйвер не был загружен во время инициализации системы, либо
драйвера для такого устройства нет в ядре или модуле. В любом случае следует
опросить шину PCI на предмет найденных устройств и загруженных драйверов. Для
этого можно использовать утилиту lspci в Linux или pciconf во FreeBSD:

linux# lspci -v
freebsd# pciconf -l -v

На экране ты увидишь все найденные во время инициализации ядра устройства и
закрепленные за ними модули (драйвера). В первом случае имя модуля будет указано
в строке "Kernel modules:", во втором — в первой строке каждого устройства.

В моем примере слово nfe0 в самом начале отражает имя устройства (сетевая
карта) и закрепленный за ним драйвер nfe. Если вместо имени ты увидишь слово "none"
— значит, ядро не загрузило соответствующий драйвер, и пора отправляться на его
поиски. Введи полное имя устройства и название операционной системы в строку
поиска google, и ты найдешь имя необходимого модуля или сообщение о том, что
данное устройство пока не поддерживается ядром.

Если поиск драйвера не принес результатов, остается одно — ждать выхода новой
версии ядра/ОС и надеяться, что в нем появится поддержка твоего оборудования.
Владельцы неподдерживаемых сетевых адаптеров могут попытать счастья с
фреймворком NDISWrapper, который представляет собой модуль ядра Linux. Он
реализует прослойку для работы драйверов NDIS (Network Driver Interface
Specification), предназначенных для Windows.

Установи пакет ndiswrapper, скопируй с диска каталог с официальным драйвером
для Windows, найди в нем INF-файл и выполни эту команду:

# ndiswrapper -i driver.inf

Проверь, загрузился ли драйвер:

# ndiswrapper -l

Все в порядке? Загружай модуль и конфигурируй сеть:

# modprobe ndiswrapper

 

Латаем сети

Проблемы с подключением к сети — бич новичков в Linux. Большинство
дружелюбных к пользователю дистрибутивов находят сетевые интерфейсы сами и
пытаются настроить их средствами DHCP. Срабатывает это далеко не всегда.
Перво-наперво запусти команду "dmesg | less" в Linux или "less /var/run/dmesg.boot"
во FreeBSD и найди в ее выводе сетевой адаптер, который ты используешь для
выхода в интернет или локальную сеть. Например:

nfe0: <NVIDIA nForce2 MCP2 Networking Adapter> port …

Первое слово — это название сетевого интерфейса (в Linux он будет именоваться
eth0 или eth1). Запусти команду ifconfig без аргументов и найди в ее выводе это
название. Если его нет — значит, интерфейс неактивен, если же в выводе нет
строки inet — значит, ему не присвоен IP-адрес. Активировать интерфейс можно
командой:

# ifconfig интерфейс inet IP-адрес netmask сетевая-маска up

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

# route add default gw IP-шлюза

Твой провайдер может использовать PPPoE или PPTP-сервер для предоставления
доступа к интернету. Настройка подобных подключений была подробно описана в
статье "Прорыв сквозь
PPP
", опубликованной в
майском номере ][ за
2008 год
. За сим я прощаюсь. Удачи!

 

INFO

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

Чтобы убрать загрузочный экран и увидеть процесс инициализации Linux во всей
красе, удали опции quiet и splash из строки, доступной по клавише ‘e’ в
загрузчике grub.

 

WWW

Спасательный загрузочный диск —
www.sysresccd.org.
Восстановитель таблицы разделов gpart —
www.brzitwa.de/mb/gpart.

Testdisk — универсальная утилита для восстановления всего и вся —

www.cgsecurity.org/wiki/TestDisk
.
Спасатель данных dd_rescue —

www.garloff.de/kurt/linux/ddrescue
.
Утилита nvclock —
www.linuxhardware.org/nvclock
.
Прослойка NDISWrapper для запуска сетевых драйверов Windows —

sourceforge.net/projects/ndiswrapper
.

Оставить мнение

Check Also

Безумный олдскул. Самые необычные приставки и игровые аксессуары из прошлого

Если ты думаешь, что Guitar Hero, Kinect или Wii Remote — это странно, то спешим тебя заве…