Admin

Материал из MediaWiki
Перейти к навигации Перейти к поиску

Как перейти на ядро 2.6? У меня не грузятся модули на ядре 2.6, проблемы ядер 2.6 (QM_MODULES)

Читаем

[1]

[2]

Как провести тонкую настройку использования памяти?

Помогут эти статьи:

Описание параметров и значений

О выставлении параметров

Как сделать, чтобы Linux на ядре 2.6+ не так интенсивно использовал файл подкачки (swap)?

Указать где-нибудь при загрузке (например, в /etc/rc.d/rc.local):

echo 20 > /proc/sys/vm/swappiness

Изменять параметр swappiness также можно через интерфейс /etc/sysctl

Ключ называется vm.swappiness

На машинах, выполняющих, например, кодирование видео, можно порекомендовать значение 0, поскольку во-первых, это более отвечает поведению ядра 2.4, а во-вторых позоляет избежать так называемой пробуксовки, когда постоянно активен процесс своппинга. Единственное исключение - машины с менее чем 128М памяти.

Есть еще ключ vm.vfs_cache_pressure, который рекомендуется повысить хотя бы до 1000

Тем, кому интересно, могут прочитать обсуждение на lkml: [3]

А также обсуждения патча Con Kolivas'а по регулированию этого параметра "на лету" [4].

За дополнение спасибо annoynimous.

Ставлю программу в rpm, а она не ставится, rpm висит или выдает ошибку обращения к базе. Как лечить?

Лечить достаточно просто.

1. Логинимся под root'ом.

2. Заходим в /var/lib/rpm и удаляем файлики __db.001, __db.002 и __db.003.

3. После чего даем команду rpm --rebuilddb

Как узнать конфигурацию установленного ядра?

Ядра по-умолчанию можно увидеть во всей красе в пакете из дистрибутива.

Также можно поискать в /boot файл конфигурации (нечто вроде config-2.6.9-1.681_FC3.mppe), или (если есть) в файле /proc/config.gz.

Собрал ядро. Запускаю. Kernel panic: no init found. или Unable to find root fs. Что делать?

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

1-й случай. Смотрим как собрали поддержку корневой файловой системы. Если она собрана модулем, то у вас должен быть создан initrd (и лежать в папке /boot) и прописан в вашем загрузчике. Данный файл должен создаваться на новое ядро ЗАНОВО!

В загрузчике запись об initrd выглядит примерно так для lilo:

/etc/lilo.conf:

initrd = /boot/initrd-2.6.3-prep5.img

и так для grub:

initrd /boot/initrd-2.6.3-prep5.img

Дело в том, что в этом файле находятся модули ядра и при загрузке ядро в состоянии обратиться к ним в отличие от модулей, что лежат в /lib и не могут быть подключены, т.к. ядро не видит раздел (потому что нет соответствующего модуля - замкнутый круг).

2-й случай. Тут все несколько сложнее. Дело в параметрах загрузчика. Если вы собираете поддержку корневой файловой системы не модулем, то не нужно передавать ядру параметр root=/ или root=LABEL=/ (кстати, root можно прописать отдельно, а не как параметр, например, так: root = /dev/hda2 ) - все эти вещи нужны системе, чтобы нормально запуститься после установки.

Для grub стоит проверить правильность записи о корневом разделе, т.е. наличие строчки вроде такой:

root (hd0,1)

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

Общий совет: Если вы не собираетесь таскать систему с винта на винт, проще собрать поддержку корневой файловой системы в ядре и обойтись без указывания корневого раздела (root =) и создания и использования initrd.

Где узнать список параметров, которые можно передать ядру при загрузке?

man bootparam

Как включить acpi в lilo или grub?

Передать параметр acpi=force. Для систем с Hyper-Threading Technology или многопроцессорных лучше передать параметр acpismp=force. Например, для lilo:

image=/boot/vmlinuz-2.4.22-1.2135.2
        label=Stable
        read-only
        append="hdc=ide-scsi acpi=force"

Для grub

title Fedora Core (2.6.8-1.598)
        root (hd0,1)
        kernel /vmlinuz-2.6.8-1.598.2 ro acpi=force

Как устанавливать/загружать модули?

user@linux$ man insmod
user@linux$ man modprobe
user@linux$ man modules.conf

ну и

depmod -A

Кроме информации о авторе, лицензии и проч., если модуль может принимать некие параметры, они будут описаны строками вида

parm:       debug int, description "3c59x debug level (0-6)"
parm:           ...
parm:           ...

Как обновить glibc в rpm-based дистрибутиве?

Обновляем следующие пакеты (версии взяты для примера):

  • glibc-2.3.2-27.9.i386.rpm
  • glibc-utils-2.3.2-27.9.i386.rpm (а вы как думали, без утилит?)
  • glibc-common-2.3.2-27.9.i386.rpm (люблю, когда locales есть и time-zones)
  • glibc-profile-2.3.2-27.9.i386.rpm (он вам нужен?)

Если вы планируете собирать программы:

  • glibc-devel-2.3.2-27.9.i386.rpm
  • glibc-kernelheaders-2.4-8.10.i386.rpm

Вообще, обычно умные люди делают сначала `rpm -qa | grep glibc`, дабы посмотреть, какие пакеты из glibc у них установлены, а потом уже их обновляют.

После этого, можно смело перегружаться.

Примечание - бывает, что сначала требуется обновить rpm, к rpm вполне возможно потребуется обновление db4 и cpio и точно придется обновлять popt. Например, при обновлении последних glibc под Red Hat.

Можно ли поставить дистрибутив xxx на SATA?

Скорее всего можно, если ядро дистрибутива не ниже 2.4.22

Рекомендуется прочитать статью о том, как поставить ASP Linux на SATA и проверить список поддерживаемого оборудования

Как найти нужный файл во множестве rpm?

Можно вот так:

user@linux# for i in *.rpm; do rpm -qpl $i | grep /filename >/dev/null 2>&1 && echo $i; done

или (говорят, быстрее)

user@linux# find -name '*.rpm' -print0 | xargs -0 rpm -qpil | sed -ne '/^Name/h;/filename/{H;x;p;}' | uniq

Последний позволяет искать файлы, чьи имена содержат пробел.

Как установить программу из rpm?

Есть два вида rpm: src.rpm (или srpm) и бинарный rpm (типа i386.rpm, i686.rpm и т.п.).

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

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

root@localhost# rpm -ihv

Возможно, что программа не установится, сказав, что не хватает зависимостей.

Зависимости - это пакеты, требующиеся для работы данного пакета. Если мы считаем, что некоторые функции, реализуемые данными зависимости, нам не нужны (например, для пакета kdepim есть зависимость pilot-link, но мы не будем пытаться использовать связь с КПК), тогда для установки программы мы можем добавить ключ --nodeps.

В случае, если пакет обновляется на более свежую версию, тогда команда выглядит так:

root@localhost# rpm -Uhv

Далее читайте man rpm.

Как найти в манах нужную команду по ключевому слову?

Простой пример:

user@localhost$ man -k 'disk space' 

Как отформатировать дискету?

Воспрользоваться программой fdformat. Пользователи KDE могут использовать программу KFloppy.

Если в системе используется supermount, могут возникнуть проблемы, поэтому есть еще ряд способов:

  • С помощью mkfs:
      root@localhost# mkfs -t msdos /dev/fd0 

или

      root@localhost# mkfs -t msdos /dev/fd0 1440
  • Если установлен mtools, то:
      user@localhost$ mformat a: 

Как создать загрузочную дискету? Как создать спасательную дискету (rescue)?

Загрузочная дискета создается с помощью утилиты mkbootdisk (rawrite.exe под ОС от MS).

user@localhost$ mkbootdisk -device /dev/fd0 2.4.21

Соответствующее HOW-TO можно прочитать здесь

[5] - Здесь статья о создании Linux на дискете.

[6] - Linux на одной дискетте.

[7] - Здесь лежат образы загрузочных дискет для операционных систем MS.

[8] - Perl-скрипт, создающий спасательную дискету.

Как из консоли установить дату/время?

man date

Простой пример

root@linux# date --set 4/13/2004 
root@linux# date --set 14:46:27

Чтобы не подводить время вручную, лучше всего сразу настроить синхронизацию времени по интернету.

Как узнать, какое приложение заблокировало файл/директорию/раздел?

Вообще-то `man lsof`, `man fuser` :)

Например, команда

user@linux# lsof|grep /home

покажет все открытые файлы в каталоге /home. А команда

root@linux# fuser -km /home

завершит выполнение всех процессов, работающих с файловой системой /home. Будьте внимательны, если /home является не отдельной файловой системой, а частью корневой, то результат может превзойти ваши ожидания :)

Что это за ошибка - "Segmentation fault"?

По смыслу очень похоже на "Access violation at adress[0000:0000]" и т. д. в другой довольно популярной ОС. Причина - приложение сделало попытку выйти за пределы сегмента.

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

Если есть только бинарник, можно поставить gdb, запустить `gdb program` и в приглашении сказать run. Если выполнение программы останавливается - пишите next. Ну и читайте, что пишет.

Будут ли работать бинарные пакеты из другого дистрибутива?

Будут, но вы должны точно знать, что вы делаете.

Самое большое препятствие при запуске - системный уровень. Однако встречаются такие вещи редко. Например, кардинальное изменение, внесенное в glibc, с которым собраны все программы, сильно измененное ядро.

Самое маленькое, но часто встречающееся препятствие - это нехватка библиотек, а точнее библиотек нужной версии (или другие имена файлов несмотря на одинаковые версии, например libpcre.so.3 (Debian) и libpcre.so.0 (Slackware) , в данном случае помогают symlinks)

Проще всего поставить программу и проверить, будет ли она работать. Если она попросит какие-либо библиотеки, нужно их доставить, причем желательно из своего дистрибутива (в крайнем случае, собрать посвежее те, что нужны).

Если у вас rpm-based дистрибутив, то вы должны быть готовыми к тому, что зависимости не будут выполняться. Дело в том, что почти все дистрибутивы используют свою систему наименования пакетов и, например, пакет a52dec в redhat называется liba52dec в mandrake. Бояться этого не нужно. Максимум, у вас будет ругаться apt (если вы его используете).

В общем случае хватает, чтобы версии требуемых библиотек были приблизительно такими же, как у вас в системе.

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

Как поместить linux на USB-flash?

Пошаговая инструкция здесь [9]

Там же можно узнать об оптимизации вашего linux для работы с USB-flash.

В этом ответе вы можете прочитать, где взять готовый для работы с usb-flash дистрибутив linux.

Ваша материнская плата должна поддерживать загрузку с flash-карты.

Поставил MS Windows (98, ME), как теперь вернуть загрузку Linux? Как восстановить загрузчик?

Обычно грузимся с первого диска. Выбираем помощь. Смотрим, как загрузиться в спасательный режим (rescue mode). Для redhat, например, нужно в строке boot: набрать linux rescue. После загрузки читаем что пишется. ВНИМАТЕЛЬНО. Может быть у вас такой хороший дистрибутив, что нашел ваш корневой раздел и примонтировал его куда-нибудь (например, в /mnt/sysimage).

Подсказка: Если этого не произошло, заходим в /mnt и монтируем свой корневой раздел в любой пустой каталог (я думаю, вы знаете, где у вас корневой раздел). Например, mount /dev/hda2 /mnt/sysimage.

Затем делаем bind mount'ы для /dev, /proc, /sys (без этого загрузчик может не получить доступа к жёсткому диску, возможно, некоторые из этих директорий лишние):

mount --bind /proc /mnt/sysimage/proc
mount --bind /sys  /mnt/sysimage/sys
mount --bind /dev  /mnt/sysimage/dev

После чего выполняем chroot /mnt/sysimage. (Еще раз - если корневой раздел примонтирован сюда).

Теперь вспомним, какой у нас загрузчик - grub или lilo (у любителей экзотики может стоять Anacronis OS Selector).

Для lilo:

Если у нас и раньше стоял MS Windows (и вы его просто переставили), тогда просто выполняем lilo и перегружаемся. Если раньше MS Windows не стоял, запускаем mc, открываем файл /etc/lilo.conf, добавляем нечто вроде

other=/dev/hda1
       optional
       label=Windows

/dev/hda1 - это раздел с MS Windows. Указываете свой (см. соответствующий вопрос).

Сохраняем файл. А дальше, естественно, выполняем lilo.

Для grub:

Если у нас раньше стоял MS Windows (и вы его просто переставили), тогда выполняем grub, а затем в его консоли пишем:

grub> root (hd0,0)
grub> setup (hd0)
grub> quit
<pre>
где hd0 - ваш диск. Первой строчкой мы указываем раздел, где размещается /boot, второй устанавливаем загрузчик в MBR, а третьей - выходим из консоли загрузчика.

Если они не стояли, добавляем в файл /etc/grub.conf (или /boot/grub/grub.conf) такие строчки:
<pre>
title Windows
rootnoverify (hd0,4)
chainloader +1

В данном примере MS Windows находится на 5-м разделе, /dev/hda5

А дальше точно так же выполняем grub и в появившейся консоли загрузчика пишем:

grub> root (hd0,0)          (Specify where your /boot partition resides)
grub> setup (hd0)           (Install GRUB in the MBR)
grub> quit                  (Exit the GRUB shell)

У меня Windows 2000/XP установлен на NTFS и grub его не грузит, что делать? У меня Windows находится на втором/третьем и т.п. разделе или установлен на другом диске (который не является первым) и grub его не грузит, что делать?

Много нервов у всех отнял этот вопрос. Ответы в большинстве своем невнятные. Пришлось ставить себе Windows (jackill), да еще и на NTFS и проверять что происходит.

В результате чтения документации и экспериментов удалось узнать то, что Grub прекрасно грузит Windows, установленный на NTFS, потому что он не обращается к разделу, а передает управлению загрузчику Windows.

Секрет в другом - Windows 98/ME/2000 (насчет XP не в курсе) и DOS не умеют грузиться со второго раздела или с жесткого диска, не являющегося первым.

Чтобы они смогли загрузиться, нужно их обмануть. Это возможно, если они при загрузке используют BIOS для определения винтов. Скорее всего это и ваша система.

Теперь следите: у меня два жестких диска, стоящие мастерами - в терминах Linux это hda и hdc.

В терминах grub это нулевой и первый диск. Не второй, обратите внимание! Нумерация идет подряд.

На hda у меня стоит Linux и загрузочный раздел /boot первый - т.е. hda1 или, в терминах grub, hd0,0. Соответственно hdc отдан под Windows 2000.

Пишем в grub следующее:

title Windows
    rootnoverify (hd1,0)
    map (hd0) (hd1)
    map (hd1) (hd0)
    makeactive
    chainloader +1

Что мы сделали? Мы поменяли в BIOS диски местами - передали, что hd0 у нас теперь hd1, а hd1 - hd0. Теперь будет грузиться. Может не сработать с некоторыми scsi-дисками, для которых ОС использует специальный драйвер.

Для корректной загрузки Windows Seven (и, вероятно, последующих версий Windows) изменение порядка дисков не нужно. То есть, строки в grub.cfg должны быть следующими:

title Windows Seven
    rootnoverify (hd1,0)
    makeactive
    chainloader +1

Что же делать, если на втором жестком диске установлены две версии Windows, одна из которых Windows Seven, а другая более старая? Загрузчик при этом используется один и тот же (который пропишет Windows Seven при установке), но в настройках grub придется сделать две строчки для загрузки двух версий Windows:

title Windows XP
    rootnoverify (hd1,0)
    map (hd0) (hd1)
    map (hd1) (hd0)
    makeactive
    chainloader +1

title Windows Seven
    rootnoverify (hd1,0)
    makeactive
    chainloader +1

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

Как прописать linux в NT Loader?

Написано об этом здесь.

Если у вас windows стоит на файловой системе fat32, то делаем так:

1. Ставите lilo в первый сектор раздела /boot (например, /dev/hda2).

2. Монтируете диск C:\ (каталог /mnt/c уже должен существовать)

      root@localhost# mount -f vfat /dev/hda1 /mnt/c

3. Копируете загрузочный сектор:

      dd if=/dev/hda1 of=/mnt/c/bootsect.bin count=1 bs=512

4. Исправляете c:\boot.ini примерно следующим образом:

 
      [boot loader] 
      timeout=30 
      default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 
      [operating systems] 
      multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect 
      c:\bootsect.bin="Linux" 

Если у вас MS Windows установлен на файловой системе ntfs, то придется загрузочный сектор записать на жесткий диск и считать специальными утилитами в случае если это [ext2, ext3] или [reiserfs 3], считать специальными утилитами, или же сделать проще - записать его на дискету.

Как удалить linux и его загрузчик?

Вам на ваш любимый сайт

Как прикрутить проверку архивов rar3 к ClamAV?

Существует решение от McMCC. Читать и качать отсюда

Как прикрутить ClamAV к Squid? Как сделать проверку того, что пользователи качают к себе на компьютер?

Компьютер понадобится не самый слабый.

Делается это через DansGuardian. Вот здесь можно взять на эту тему pdf. Описание сделано для Mandrake и потому порядком разбавлено описанием их графических утилит. Но настроить по нему можно, потому что на каждый шаг есть описание того, что нужно делать. Также можно использовать HAVP

Как и чем забэкапить раздел или каталог и сохранить права и симлинки?

Чтобы сохранились все разрешения и т.п. нужно пользоваться tar'ом. Например, сожмем каталог (а у кого и раздел) /usr и положим архив на другой раздел, смонтированный в /mnt/backup:

root@localhost# tar cvpjf /mnt/backup/usr.tar.bz2 /usr

Как перенести установленный linux с одного винта на другой? Как создать образ установленного linux?

Тут существует два пути.

Сожмем в архив все нужные нам файлы, сохраняя права (tar)

  • Грузимся со спасательного диска (ВАЖНО! Убедитесь что tar на спасательном диске является настоящим tar, если используемый tar на самом деле является минимальной версией из busybox , то он может некорректно сохранять права на файлы, в частности suid-bit).
  • Бэкапим весь корень (/) за исключением некоторых папок /proc, /sys и /tmp, например:
      root@localhost# tar cvpzf /mnt/backup/all.tar.gz / \
                      --exclude /proc --exclude /sys \ 
                      --exclude /tmp --exclude /var/tmp \
                      --exclude /usr/tmp --exclude /mnt
  • Создаем на новом винте нужные нам разделы, создаем на них нужную файловую систему и распаковываем архив.
  • Восстанавливаем загрузчик

Используем dd

  • Грузимся со спасательного диска.
  • Далее создаем образ винта (если надо) или каждого раздела в отдельности.
      root@localhost# dd if=/dev/hda of=/dev/hdb bs=10M

и мы перенесем образ на другой винт или

      root@localhost# dd if=/dev/hda of=/mnt/backup/myhda.img bs=10M

и тогда образ попадет в файл. Кстати, можно сэкономить место и сделать так:

      root@localhost# dd if=/dev/disk | gzip - | dd of=/mnt/backup/myhda.gz

Если есть винт такой же, как и тот, с которого копировали, делаем просто

root@localhost# dd if=/mnt/backup/myhda.img of=/dev/disk bs=10M

Если винт больше, то неоднократно советовалось создать на нем раздел примерно одного размера, что и старый винт, после чего восстановить образ на этот раздел. Насколько действенен этот метод, неизвестно.

Вместо tar в вышеприведенном способе многие рекомендуют использовать cpio.

Как перенести установленный linux на новый жесткий диск?

Ну если вы жесткий диск только купили, пришли домой и решили - пора, то вот отличная статья на OpenNET.

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

Как открыть лоток привода cd-rom, если он "подвис" на плохом диске?

Дайте команду echo 0 > /proc/sys/dev/cdrom/lock и потом смело открывайте привод. Должно получиться.

Как убить zombie-процесс? Zombie занимает ресурсы?

В состоянии "зомби" процесс не имеет образа в RAM, но информация о нем сохраняется в таблице процессов. Он не поедает ресурсы, но теоретически могут кончится PID'ы.

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

Увидеть родителя можно в столбце PPID после команды

ps -axl

Подробнее: [10]

Как добавить вложение (attachment) в письмо из скрипта?

user@linux~:$ mail -a filename.to.attache
user@linux~:$ mutt email@address -a filename.to.attache -s "Subject of email" < file.containing.message.body.txt
user@linux~:$ gzip -c filename.to.attache | uuencode filename.to.attache.gz | mail -s "Subject of email" email@address

Здесь filename.to.attache - файл-вложение, file.containing.message.body.txt - файл с телом сообщения.

Как примонтировать hard USB/flash-карту?

Если в ядре включена поддержка SCSI и USB (в частности, USB Mass Storage), то в общем случае хватит команды:

root@localhost# mount /dev/sda1 /mnt/your_location -t vfat

vfat - название файловой fat32, которая используется в большинстве устройств, your_location - ваша папка.

Чтобы узнать как не монтировать из-под рута, читайте следующий вопрос.

Как сделать, чтобы flash монтировалась не из под рута?

Добавить в fstab строчку вида

/dev/sda1 /mnt/flash auto users,noauto,rw,iocharset=koi8-r 0 0

или привести свою к этому виду. В iocharset укажите свою локаль.

Можно сделать совсем красиво, установив себе usbmount

Как слить фотографии с цифрового фотоаппарата с интерфейсом USB?

Многие цифровые фотоаппараты представляются системе как USB Flash

Мой фотоаппарат не является USB Mass Storage, что делать?

Попробуйте разобраться, какой протокол обмена он использует. Возможно, этот протокол поддерживается gphoto2. gPhoto2 - это набор текстовых утилит, но есть программы с графическим интерфейсом, которые с ним работают - digiKam и Shotwell.

К примеру фотокамеры Canon используют протокол PTP (Picture Transfer Protocol), можно выбрать либо конкретную модель Canon, либо, при отсутствии нужной модели, просто указать USB PTP Class Camera.

Как перенаправить записи журналов syslog на другую машину?

Добавьте в /etc/syslog.conf строчку:

*.* @имя.вашей.машины

Как сделать, чтобы при пропадании питания UPS отключал комп, а при появлении питания, снова включал?

[11]

Как организовать отсылку SMS-сообщений с сервера в случае его отказа, например?

Воспользоваться наработками проекта nagios - [12]

Как удалить файл с некорректным именем

Воспользоваться возможностями утилиты find:

$ ls -i "имя файла" # Узнаем inum файла
12345
$ find -inum 12345 -delete # Не забудьте перед удалением осуществить тестовый поиск, без -delete!