Изгрев на ръка, отворени системи

Един от най-интересните въпроси в ОС е стартирането на системата. Как точно се провежда стартът? Както се оказа, тук има много въпроси и трудности. Нека разгледаме по-отблизо процеса на init и групата rc файлове. За експерименти използвах диска Red Hat Linux 6.2.

Основният контролен файл за процеса на init е/etc/inittab. Ще го представим с малки изключения и модификации:

Форматът на този файл е почти идентичен с другите варианти на Unix. Всеки елемент заема 4 полета: име, начални нива, опция за обработка (изчакайте края - изчакайте, рестартирайте след края - respawn, задайте стандартното начално ниво - initdefault и т.н.), командата, изпълнена директно на това ниво. От разликите от другите варианти на Unix, заслужава да се отбележи наличието на опцията ctrlaltdel.

Какво се случва, ако стойността на initdefault се промени от 3 на 5 в горния файл? Това ще премине от буквено-цифрово влизане към графично влизане и обратно. Тази стойност се променя linuxconf, когато е избрана съответната опция.

Текстът ясно показва разделението по нива. Всъщност те се различават по набора от налични подсистеми или услуги, възможността за работа в многопотребителски режим и т.н. Можете да проверите текущото ниво по всяко време с командата/sbin/runlevel.

По-малко известен е друг файл,/etc/initscript. Разработчиците му възложиха роля, подобна на /etc/security/limits.conf, която ви позволява да зададете ограничения за всички, група или конкретен потребител./etc/initscript се изпълнява преди стартиране на всеки от процесите в/etc/inittab. В този случай действителната команда, която се изпълнява, се предава като четвърти параметър. В този файл можете да зададете каквито и да е конкретни действия там, по-специално, задавайки същите ограничения, umask или нещо друго, но не за потребителя, а за всяка команда от файла/etc/inittab. Обърнете внимание на примера (вижте man initscript), за да не изпаднете в лоша ситуация. Друг пример:

Ако сте променили този файл, тогава ефектът ще се появи само следващия път, когато стартирате следващия процес от init (т.е. ако влезете в друга конзола, няма да има ефект, но след като приключите работата със системата и влезте отново, ще).

Ще гласуваме по списък

Нека се спрем на работата на rc файлове. Например, за да преминете към третото ниво при стартиране, трябва да стартирате /etc/rc.d/rc.sysinit, “/etc/rc.d/rc 3”,/sbin/update и след това да стартирате/sbin/mingetty на конзолата на всички емулатори. Какви са техните функции? Файлът rc.sysinit изпълнява редица независими от нивото начални стъпки. Ето точния ред на тези действия (разбира се, някои от тях не са задължителни):

  • показване на банер;
  • четене на конфигурационни данни от/etc/sysconfig/network;
  • задаване на системни параметри от /etc/sysctl.conf;
  • настройка на часовника с помощта на параметри от/etc/sysconfig/clock;
  • настройка на опциите на конзолната клавиатура с помощта на клавиши за зареждане съгласно /etc/sysconfig/console/default.kmap или/etc/sysconfig/keyboard;
  • зареждане на системен шрифт с име от/etc/sysconfig/i18n и файл с разширение .pcf.gz или .pcf от директориите/etc/sysconfig/console или/usr/lib/kbd/consolefonts;
  • активиране на суап зона;
  • задаване на име на хост;
  • задаване на NIS име на домейн;
  • стартиране на fsck (вижте по-долу) за кореновата система (ако се открият сериозни проблеми в процеса fsck, се извършва незабавно рестартиране);
  • стартиране на PNP устройства съгласно /etc/isapnp.conf;
  • повторно монтиране на кореновата файлова система в режим на запис (тъй като въпросът какво да се прави със система само за четене е типичен, командата, изпълняваща това действие, трябва да бъде дадена изрично: "mount -n -o remount, rw /");
  • възстановяване на таблицата за монтиране/etc/mtab;
  • проверка на квоти за кореновата файлова система;
  • проверка на необходимостта от зареждане на модули, намиране на взаимозависимости, зареждането им и конфигуриране;
  • допълнително зареждане от /etc/rc.d/rc.modules;
  • свързване на RAID устройства;
  • стартиране на fsck на други системи;
  • монтиране на локални файлови системи;
  • стартиране на редица процедури за конфигуриране (извършва се, ако е наличен /.unconfigured файл);
  • активиране на квотния механизъм;
  • изтриване на файловете с флаг за зареждане;
  • освобождаване на директориите/var/lock и/var/run от боклука;
  • почистване на файловете/var/run/utmp и/var/run/utmpx;
  • премахване на заключващи файлове от/tmp;
  • включване на суап;
  • инициализиране на серийни устройства чрез /etc/rc.d/rc.serial;
  • зареждане на модули за SCSI лентово устройство;
  • задаване на режим на унипроцесор (UP) или мултипроцесор (SMP) и съответно регенериране на файла /boot/kernel.h;
  • задаване на правилната връзка /boot/System.map;
  • проверете дали се използва интерактивен режим (създайте/var/стартирайте/потвърдете файл).

Fsck може да бъде принудително деактивиран, за да се намали времето за рестартиране, когато е наличен файлът/fastboot, и също така да се активира, когато е наличен/forcefsck; могат да бъдат "поръчани" допълнителни опции (/ fsckoptions). Появата на тези файлове може да бъде резултат от изпълнение на изключване със съответните превключватели: -f (пропуснете fsck при стартиране); -F (сила fsck при стартиране).

Първата стъпка е да създадете суап файл на отделно монтирана система:

Проверяваме резултата след рестартирането, заявяваме текущото използване на суап устройства:

Ако погледнете информацията за рестартиране, ще откриете, че, разбира се, swapon ще се опита да монтира/r6/myswap два пъти. Първият път (/ r6 все още не е монтиран) ще има съобщение за грешка (и дори FAILED), въпреки че дялът е монтиран. Вторият път всичко върви добре (за щастие има и диагностика в/dev/null). Моля, обърнете внимание, че суап файлът трябва да съществува (по някакъв начин попаднах на командата mkswap, която го попълни, но не го създаде) и в същото време да не съдържа „дупки“ (защо би било това?).