IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
Certificat LPIC-1
Examen: 101 (torneu a la resta de temes)
Fitxers: LPI101.2_Arrencada_del_sistema.pdf (LPI101.2_Arrencada_del_sistema.odp)
Objectius: http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives
Dipòsit SVN: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_101/101.2
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Objectius del tema

101.2. Arrencada del sistema
Objective.jpg
  • Objectiu: Els candidats han de ser capaços de guiar al sistema a través del procés d'engegada.
  • Pes: 3
060317 Icon - Theory of Knowledge v01 pdc.jpg

Àrees Clau de Coneixement:

Icon list.jpg

La següent és una llista parcial de fitxers, termes i utilitats utilitzades:

Text-editor.svg

Apunts: LPI 101.2. Arrencada del sistema

El procés d'arrancada

A Linux, el control del procés d'arrancada passa de la BIOS, al gestor d'arrancada, d'aquest al kernel qui finalment executa els processos scheduler i init i resta inactiu a l'espera de peticions d'accés al maquinari per part de les aplicacions del sistema.

Primeres passes del procés d'arrancada en Linux. Els dos camins alternatius (A i B) fan referència al fet que el gestor d'arrancada pot executar un altre gestor d'arrancada (Chain Loading) situat al sector d'arrancada d'una partició del sistema (p. ex. el cas d'executar Windows des de GRUB), cas A, o executar directament el kernel d'un sistema operatiu Linux, cas B
.

De fet, tots els sistemes operatius comparteixen les primeres fases de l'arrancada del sistema:

  • Execució del firmware del PC també conegut com a BIOS.
  • Execució del gestor de l'engegada o bootloader del disc dur o dispositiu (p.ex. un USB) escollit a la configuració de la BIOS com a dispositiu d'arrancada.

Els següents passos ja són específics de cada sistema operatiu.

D'un forma una mica més detallada els passos són:

  1. S'engega l'ordinador i s'executa la BIOS.
  2. La BIOS realitza tasques específiques d'arrancada i configuració del maquinari.
  3. Un cop el maquinari és reconegut i executat correctament, la BIOS carrega i executa el programa Initial Program Loader (IPL), també conegut com stage1 o fase 1 del gestor d'arrancada). Aquest programa es troba al Master Boot Record del dispositiu seleccionat com a dispositiu d'arrancada.
  4. La fase 1 del bootloader executa la fase 2. Alguns gestors d'arrancada, entremig d'aquestes fases, executant la fase 1.5, fase opcional i que permet tenir accés a més sistemes de fitxers.
  5. El gestor d'arrancada sovint ofereix al usuari un menú amb diferents opcions de càrrega. Un cop seleccionada una opció, s'executa el sistema operatiu mitjançant la càrrega en memòria del kernel i la seva posterior execució. Les primes tasques del kernel són configurar funcions bàsiques d'accés al maquinari.
  6. El kernel executa la funció start_kernel() que realitza la majoria de la configuració del sistema (interrupcions, gestió de memòria, inicialització de dispositius, drivers, etc.)
  7. El kernel executa dos processos, l'scheduler i el procés init de forma separada.
  8. El procés scheduler pren el control del sistema i és l'encarregat de gestionar els processos i la multitasca del sistema. El kernel queda inactiu (idle) a l'espera de peticions d'accés a l'espai del kernel.
  9. El procés init s'executa en espai d'usuari i executa els scripts d'inicialització del sistema. Aquest scripts configuren serveis que no són del sistema operatiu amb l'objectiu de crear un entorn d'usuari.
  10. Finalment es proporciona a l'usuari una pàgina de login, que pot ser per línia de comandes o per entorn gràfic. També es possible configurar l'entorn per tal que entri sense necessitat de fer login.

El procés d'apagada també es gestionat pel procés init. L'aturada es gestionada per una sèrie d'scripts i quan aquests finalitzen el kernel executa la seva pròpia aturada.

La BIOS

Consulte l'article sobre la BIOS.

El gestor d'arrancada

El gestor d'arrancada o bootloader és l'aplicació que es executada per la BIOS per iniciar la càrrega del sistema. Normalment les BIOS executen el programa IPL que es troba al MBR del disc dur

A la pràctica hi ha 2 gestors d'arrancada importants a Linux:

LILO és més antic que GRUB i poc a poc esta sent reemplaçat per GRUB com al gestor d'arrancada més utilitzat.

Consulteu els articles:

NOTA: Es d'esperar a l'examen de certificació programes genèriques sobre gestors d'arrancada. Abans es feien més preguntes sobre LILO però actualment tindria més sentit centrar-se en GRUB

El procés d'arrancada en Linux

Existeixen múltiples distribucions Linux i no totes tenen el mateix procés d'arrencada. En aquest article explicarem el d'arrancada dels sistemes Unix basats en SystemV un dels sistemes més utilitzats actualment. La majoria de distribucions suporten un sistema d'arrencada compatible amb SystemV (tot i que hi han petites diferències entre cada districució).

Cal tenir en compte que hi ha però algunes distribucions com Slackware que utilitzen un sistema basat en BSD i altres tenen el seu propi sistema d'arrencada (Gentoo Linux).

El cor del sistema d'arrancada és el procés init. Aquest procés l'executa el [[kernel] a l'iniciar el sistema i és l'encarregat d'executar tots els serveis necessaris per tal que el sistema funcioni correctament.

El procés d'execució en SystemV és el següent:

  • El kernel busca el procés segons un protocol establert i l'executa.
  • El procés init s'executa.
  • S'executen en ordre els nivells d'execució segons la configuració del /etc/inittab.
NOTA: Actualment sistemes operatius com Ubuntu ja no utilitzant el fitxer inittab. L'arrancada del sistema es duu a terme mitjançant upstart.
  • Un cop s'ha acabat d'executar tots les scripts s'executa el fitxer /etc/rc.local o un similar

Consulteu per a més detalls l'article:

El procés d'arrancada en Linux

El nucli (kernel) de Linux

Consulteu l'article:

Linux Kernel

I també, consulteu l'article sobre GRUB:

 GRUB. Paràmetres del kernel

El procés init

Els registres de l'arrencada

/var/log/messages

IMPORTANT: el fitxer messages és l'únic especificat per l'estàndard FHS. Poden haver-hi altres fitxers a la carpeta /var/log, segons per exemple la configuració que tinguem de syslog. Per exemple, algunes distribucions com Ubuntu mostren els missatges del kernel a /var/log/kern.log (també però al fitxers messages). Cal tenir en compte però que /var/log/kern.log) no és estàndard. Consulteu /var/log] a la web de l'estàndard FHS

Un dels principals fitxers de registre (log) és /var/log/messages. Entre d'altres aquí també s'escriuen els missatges del ring buffer del nucli (consulteu dmesg). Podeu discriminar tipus de missatges amb grep:

$ cat /var/log/messages | grep "kernel:"

A diferència de dmesg aquí trobeu un històric dels missatges del nucli. trobareu però altres missatges de log. De fet, el fitxer messages conjuntament amb el fitxer /var/log/syslog són els fitxers on normalment van la majoria de missatges de log.

Si no trobeu el que busqueu heu de veure quina és la vostra configuració del dimoni de logs, ja sigui syslog o rsyslog o podeu consultar altres fitxers de la carpeta:

/var/log

NOTA: Recordeu que podeu trobar missatges més antics a fitxers com messages.1,messages.2.gz,messages.3.gzm etc... depenent de la configuració de les rotacions del fitxers de log. Consulteu logrotate

Consulteu també:

dmesg

Segons el manual:

$ man dmesg
...
dmesg - print or control the kernel ring buffer

Ens permet consultar el kernel ring buffer. El kernel, guarda tots els missatges que genera en una memòria intermèdia (buffer o cache) circular o en anell.

Aquest missatges són els que es mostren per les consoles virtuals durant l'arrancada del sistema. Com que l'arrancada del sistema pot ser un procés molt ràpid, si voleu consultar a posteriori aquests missatges, podeu utilitzar dmesg.

NOTA: Algunes distribucions com Ubuntu, no mostren aquest missatges durant l'arrancada ja que el nucli s'executa amb l'opció quiet

L'ordre es proporcionada a Debian i a la majoria de distribucions majors pel paquet util-linux:

$ whereis dmesg
dmesg: /bin/dmesg /usr/share/man/man1/dmesg.1.gz
$ dpkg -S /bin/dmesg
util-linux: /bin/dmesg

Les opcions són:

  • -c: Esborra el ring buffer després de mostrar-lo.
  • -r: Mostra el buffer tal com és (en cru, raw). No elimina els prefixos
  • -sbufsize: Per defecte la mida del buffer és 16392. Si s'ha modificat la mida del buffer del kernel, aleshores es pot utilitzar aquesta opció per tal de veure el buffer complet.
  • -nlevel: Estableix el nivell dels missatges a mostrar. Per exemple -n 1 mostra tots els missatges excepte el missatges de panic.

Un exemple d'ús:

$ dmesg | more
[    0.000000] BIOS EBDA/lowmem at: 0009f800/0009f800
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.28-15-generic (buildd@rothera) (gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) ) #52-Ubuntu SMP Wed Sep 9 10:49:34 UTC   
2009 (Ubun
tu 2.6.28-15.52-generic)
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   NSC Geode by NSC
[    0.000000]   Cyrix CyrixInstead
[    0.000000]   Centaur CentaurHauls
[    0.000000]   Transmeta GenuineTMx86
[    0.000000]   Transmeta TransmetaCPU
[    0.000000]   UMC UMC UMC UMC
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
[    0.000000]  BIOS-e820: 000000003fff0000 - 000000003fff3000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000003fff3000 - 0000000040000000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fef00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fefffc00 - 00000000ff000000 (reserved)
[    0.000000]  BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
[    0.000000] DMI 2.2 present.
[    0.000000] Phoenix BIOS detected: BIOS may corrupt low RAM, working it around.

NOTA: Cal tenir en compte que, el nucli és el primer en executar-se durant l'arrencada del sistema i per tant tots els processos posteriors a l'execució del nucli s'han de consultar en altres fitxers de registre, com per exemple /var/log/messages

També es força habitual guardar el log en un fitxer, per tal d'enviar-lo per correu electrònic i poder fer un diagnòstic d'un problema de maquinari:

$ dmesg > dmesg.txt

també es comú utilitzar l'ordre grep per buscar línies concretes del buffer. Per exemple problemes amb targetes de xarxa:

$ dmesg | grep eth
[    1.667894] Driver 'sd' needs updating - please use bus_type methods
[    1.667903] Driver 'sr' needs updating - please use bus_type methods
[    3.824994] skge eth0: addr 00:30:1b:b7:cd:b6
[   18.573372] skge eth0: enabling interface
[   18.576702] ADDRCONF(NETDEV_UP): eth0: link is not ready
[   20.388738] skge eth0: Link is up at 100 Mbps, full duplex, flow control none
[   20.395160] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   30.696013] eth0: no IPv6 routers present

El buffer del nucli es troba físicament al fitxer:

 $ cat /proc/kmsg

En una Ubuntu 9.10, si executeu:

$ ps aux | grep syslog
root       647  0.0  0.0   1848   504 ?        Ss   10:11   0:00 dd bs=1 if=/proc/kmsg of=/var/run/rsyslog/kmsg

Veureu que hi ha un procés dd que llegeix continuament el buffer del kernel i el guarda al fitxer:

/var/run/rsyslog/kmsg

NOTA: A Ubuntu, syslogd ha estat remplaçar per rsyslogd

Algunes distribucions guarden el ring buffer del nucli al fitxer:

/var/log/dmesg

Aquí es guarda el contingut del ring buffer just s'ha acabat l'arrencada del sistema. El buffer té una mida fixa i limitada, i com contínuament s'hi escriuen noves dades, es poden perdre les dades de l'arrencada del sistema

Consulteu també:

klogd

dmesg i upstart

El paquet rsyslog a Ubuntu proporciona un systemV init script anomenat:

$ sudo /etc/init.d/dmesg restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service dmesg restart  

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart dmesg
dmesg stop/waiting

Consulteu upstart

Exercicis

Instal·lació de LILO i execució conjunta de GRUB i LILO

Utilitzant la màquina Ubuntu Server proporcionada per a aquest curs, recordeu que podeu trobar els passos per aconseguir la màquina a:

 Importació de la màquina virtual Ubuntu Server

Seguiu les passes de l'apartat:

Instal·lar LILO i GRUB junts

Per tal d'instal·lar LILO primer (IMPORTANT: No l'instal·leu al MBR) i després configurar GRUB per tal d'afegir una opció de menú que executi LILO. Finalment configureu LILO per tal d'afegir una opció de menú que torni a executar GRUB.

En el cas que elimineu GRUB, el podeu tornar a recuperar seguint les passes de:

Recuperació de GRUB pas a pas amb un LIVE CD

Preguntes de repàs

  1. Quin proces sempre té el 1 com a identificador de procés (PID)?
  2. Quines comandes s'utilitzen per modificar el nivell d'execució?
  3. Quins fitxers configuren el procés d'inici?
  4. Quin fitxer es mostra als usuaris abans del prompt de consola?
  5. Com se li pot indicar a init que no executi cap script durant l'arrancada del sistema?
  6. Que significa quan el prompt de LILO només mostra LIL?
  7. Quin paràmetre d'arrancada l'indica al kernel la quantitat de RAm instal·lada al sistema?
  8. Quin fitxer de configuració s'utilitza per configurar LILO?
  9. Quin nivell d'execució s'utilitza per tornar a iniciar el sistema?

Vegeu també

Enllaços externs