Difference between revisions of "Arch boot process (Česky)"

From ArchWiki
Jump to: navigation, search
(první část překladu (first part of the translation) ...To be continued!)
 
(synchronized interlanguage links with the other wikis)
(28 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
[[Category:Boot process (Česky)]]
 
[[Category:Boot process (Česky)]]
 
[[Category:About Arch (Česky)]]
 
[[Category:About Arch (Česky)]]
{{i18n|Arch Boot Process}}
+
[[ar:Arch Boot Process]]
 
+
[[en:Arch Boot Process]]
{{Article summary start}}
+
[[es:Arch Boot Process]]
{{Article summary text|?}}
+
[[fr:Processus de boot]]
{{Article summary heading|Overview}}
+
[[it:Arch Boot Process]]
{{Article summary text|{{Boot process overview}}}}
+
[[ja:Arch Boot Process]]
{{Article summary heading|Related}}
+
[[ru:Arch Boot Process]]
 +
[[zh-CN:Arch Boot Process]]
 +
{{Article summary start|Shrnutí}}
 +
{{Article summary text|Chronologický přehled bootovacího procesu Arch Linuxu.}}
 +
{{Article summary heading|Přehled}}
 +
{{Article summary text|{{:Category:Boot loaders}}}}
 +
{{Article summary heading|Související}}
 
{{Article summary wiki|fstab}}
 
{{Article summary wiki|fstab}}
{{Article summary wiki|rc.conf}}
+
{{Article summary wiki|Systemd}}
 +
{{Article summary wiki|Autostarting}}
 
{{Article summary end}}
 
{{Article summary end}}
  
Tento článek má za úkol podat chronologický přehled průběhu bootování v distribuci Arch a také výčet s tím souvisejících systémových souborů a procesů s odkazy na relevantní wiki články, kde to je zapotřebí. Jak je známo, Arch následuje BSD init konvenci na rozdíl od častěji používané SysV metody. To znamená, že nejsou velké rozdíly mezi runlevely, neboť systém je standardně nastaven tak, že používá stejné moduly a procesy ve všech runlevelech.Výhodou je, že uživatelé mohou jednoduše nastavit průběh startu systému (viz. [[rc.conf (Česky)]]); nevýhodou ale je ztráta některých jemných nastavení, které nabízí SysV. V článku [[Adding Runlevels (Česky)]] je popsán způsob, jak nahackovat některé jakoby SysV schopnosti do Archu. V článku[[Wikipedia:init]] jsou popsány další rozdíly mezi SysV a BSD metodou.
+
== Zavaděč ==
 +
Poté, co je sytém zapnut a [[Wikipedia:Power-on self test|POST]] dokončen, nalezne BIOS preferované bootovací médium a předá kontrolu programu v [[Master Boot Record]] na tomto médiu. Na GNU/Linux počítači se často v MBR nalézá zavaděč jako je např. [[GRUB (Česky)]] nebo [[LILO (Česky)]]. Zavaděč pak uživateli nabídne možné operační systémy pro bootování, např. Arch Linux a Windows v tzv. [[Windows and Arch Dual Boot|dual-boot sestavě]]. Jakmile je Arch zvolen, zavaděč nahraje obraz jádra ({{ic|vmlinuz-linux}}) a prvotní obraz root filesystému ({{ic|initramfs-linux.img}}) do paměti a spustí jádro, kterému předá adresu umístění obrazů v paměti.
  
== Before init ==
+
== Jádro ==
Poté, co je sytém zapnut a [[Wikipedia:Power-on self test|POST]] dokončen, nalezne BIOS preferované bootovací médium a předá kontrolu programu v [[Master Boot Record (Česky)]]na tomto médiu. Na GNU/Linux počítači se často v MBR nalézá bootloader jako je např. [[GRUB (Česky)]] nebo [[LILO (Česky)]]. Bootloader pak uživateli nabídne možné operační systémy pro bootování, např. Arch Linux a Windows v tzv.[[Windows and Arch Dual Boot (Česky)|dual-boot sestavě]]. Jakmile je Arch zvolen, dekomprimuje se a naloaduje do paměti obraz jádra (momentálně {{Filename|kernel26.img}}) ze složky {{Filename|/boot}} v souborovém systému na médiu.
+
Jádro je základ operačního systému. Operuje v nízké úrovni systému (''kernelspace'') a zprostředkovává interakce mezi hardwarem a programy. K dosažení efektivního využití CPU používá jádro plánovač, který na základě priority střídavě přiděluje jednotlivým procesům procesorový čas, čímž se docílí iluze, že je více programů prováděno zároveň.
  
The kernel is the core of an operating system. It functions on a low level (''kernelspace'') interacting between the hardware of the machine, and the programs which use the hardware to run. To make efficient use of the CPU, the kernel uses a scheduler to arbitrate which tasks take priority at any given moment, creating the illusion (to human perception) of many tasks being executed simultaneously.  
+
== Initframs ==
 +
Po zavedení jádra se rozbalí [[mkinitcpio (Česky)|initramfs]] (initial RAM filesystem), který se stane prvotním kořenovým souborovým systémem. Jádro poté spustí {{ic|/init}} jako první proces, čímž začíná ''early userspace''.
  
After the kernel is loaded, it reads from the [[initramfs]] (initial RAM filesystem). The purpose of the initramfs is to bootstrap the system to the point where it can access the root filesystem (see [[FHS]] for details). This means that any modules that are required for devices like IDE, SCSI, or SATA drives (or USB/FW, if booting off a USB/FW drive) must be loaded. Once the initramfs loads the proper modules, either manually or through [[udev]], it passes control to the kernel and the boot process continues. For this reason, the initrd only needs to contain the modules necessary to access the root filesystem; it does not need to contain every module one would ever want to use. The majority of modules will be loaded later on by udev, during the init process.  
+
Účelem initramfs je zavést systém do stavu, kdy už má přístup ke kořenovému souborovému systému (viz [[FHS]]). To znamená, že moduly potřebné k přístupu k zařízením, jako jsou např. IDE, SCSI, SATA nebo USB/FW, musí být možno zavést do jádra přímo z initramfs (pokud dané moduly nejsou zkompilovány přímo v jádře); jakmile se z initramfs naloadují správné moduly (buď explicitně nějakým programem či skriptem, nebo prostřednictvím [[udev (Česky)|udev]]), bootovací proces pokračuje. Díky tomu může initramfs obsahovat pouze moduly potřebné k přístupu ke kořenovému souborovému systému; nemusí tedy obsahovat všechny moduly, které by mohly být kdy použity. Většina modulů bude zavedena později během init procesu prostřednictvím udev.
  
The kernel then looks for the program {{Codeline|init}} which resides at {{Filename|/sbin/init}}. {{Codeline|init}} relies on {{Codeline|glibc}}, the GNU C library. Libraries are collections of frequently used program routines and are readily identifiable through their filename extension of {{Filename|*.so}}. They are essential for basic system functionality. This part of the boot process is called ''early userspace''.
+
== Init proces ==
  
== init: The Arch boot scripts ==
+
Během poslední fáze ''early userspace'' je připojen skutečný kořenový souborový systém, který následně nahradí prvotní kořenový souborový systém. Nakonec je spuštěn {{ic|/sbin/init}}, který nahradí proces {{ic|/init}}.
The main Arch startup process is initiated by the program {{Codeline|init}}, which spawns all other processes. The purpose of {{Codeline|init}} is to bring the system into a usable state, using the boot scripts to do so. As previously mentioned, Arch uses BSD-style boot scripts. {{Codeline|init}} reads the file {{Filename|/etc/inittab}}; the default {{Filename|inittab}} begins with the following:
+
  
{{File
+
Dříve Arch Linux využíval [[SysVinit]] jako init proces. Nyní při nové instalaci již je jako výchozí [[systemd]]. Uživatelům, kteří nadále používají [[SysVinit]], je doporučeno přejít k [[systemd]].
|name=/etc/inittab
+
|content=<nowiki>
+
...
+
  
# Boot to console
+
== Viz také ==
id:3:initdefault:
+
# Boot to X11
+
#id:5:initdefault:
+
  
rc::sysinit:/etc/rc.sysinit
+
* [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ Early Userspace in Arch Linux]
rs:S1:wait:/etc/rc.single
+
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]
rm:2345:wait:/etc/rc.multi
+
rh:06:wait:/etc/rc.shutdown
+
su:S:wait:/sbin/sulogin
+
 
+
...
+
</nowiki>}}
+
 
+
The first uncommented line defines the default system runlevel (3). When the kernel calls init:
+
 
+
* First, the main initialization script is run, {{Filename|/etc/rc.sysinit}} (a [[Bash]] script).
+
* If started in single user mode (runlevel 1 or S), the script {{Filename|/etc/rc.single}} will be run.
+
* If in any other runlevel (2-5), {{Filename|/etc/rc.multi}} is run instead.
+
* The last script to run will be {{Filename|/etc/rc.local}} (through {{Filename|/etc/rc.multi}}), which is empty by default.
+
 
+
=== {{Filename|/etc/rc.sysinit}} ===
+
{{Filename|rc.sysinit}} is a huge startup script that basically takes care of all hardware configuration plus a number of general initialization tasks. It can be identified by its first task, printing the lines:
+
 
+
Arch Linux
+
http://www.archlinux.org
+
Copyright 2002-2007 Judd Vinet
+
Copyright 2007-2010 Aaron Griffin
+
Distributed under the GNU General Public License (GPL)
+
 
+
A rough overview of its tasks:
+
* Sources the {{Filename|/etc/rc.conf}} script
+
* Sources the {{Filename|/etc/rc.d/functions}} script
+
* Displays a welcome message
+
* Mounts various virtual file systems
+
* Creates dummy device files
+
* Starts [[minilogd]]
+
* Outputs messages from [[dmesg]]
+
* Configures the hardware clock
+
* Empties the {{Filename|/proc/sys/kernel/hotplug}} file
+
* Starts [[udev]] and checks for udev events
+
* Starts the [[loopback]] interface
+
* Loads modules from the {{Codeline|MODULES}} array defined in [[rc.conf]]
+
* Configures RAID and encrypted filesystem mappings
+
* Runs a forced check of partitions ([[fsck]]) if the [[fstab|/etc/fstab]] file contains instructions to do so
+
* Mounts local partitions and swap (networked drives are not mounted before a network profile is up)
+
* Activates [[swap]] areas
+
* Sets the hostname, locale and system clock as defined in {{Filename|rc.conf}}
+
* Removes various leftover/temporary files, such as {{Filename|/tmp/*}}
+
* Configures the [[locale]], console and keyboard mappings
+
* Sets the console font
+
* Writes output from dmesg to {{Filename|/var/log/dmesg.log}}
+
 
+
{{Filename|/etc/rc.sysinit}} is a script and not a place for settings. It sources (i.e. reads and inherits variables and functions) [[rc.conf]] for settings and {{Filename|/etc/rc.d/functions}} for the functions that produce its graphical output (nice colors, alignments, switching 'busy' to 'done', etc.) There is no particular need to edit this file, although some may wish to do so in order to speed up the boot process.
+
 
+
=== {{Filename|/etc/rc.single}} ===
+
Single-user mode will boot straight into the root user account and should only be used if one cannot boot normally. This script ensures no daemons are running except for the bare minimum: syslog-ng and udev. The single-user mode is useful for system recovery where preventing remote users from doing anything that might cause data loss or damage is necessary. In single-user mode, users can continue with the standard (multi-user) boot by entering 'exit' at the prompt.
+
 
+
=== {{Filename|/etc/rc.multi}} ===
+
{{Filename|/etc/rc.multi}} is run on any multi-user runlevel (i.e. 2, 3. 4 and 5) which basically means any ordinary boot. Typically, users will not notice the transition from {{Filename|rc.sysinit}} to {{Filename|rc.multi}} as {{Filename|rc.multi}} also uses the functions file to produce output. This script has three tasks:
+
 
+
* First, it runs sysctl (to modify kernel parameters at runtime) which applies the settings in {{Filename|/etc/sysctl.conf}}. Arch has very few of these by default; mainly networking settings.
+
* Secondly, and most importantly, it starts [[daemons]], as per the {{Codeline|DAEMONS}} array in {{Filename|rc.conf}}.
+
* Finally, it will run {{Filename|/etc/rc.local}}.
+
 
+
=== {{Filename|/etc/rc.local}} ===
+
{{Filename|rc.local}} is the local multi-user startup script. Empty by default, it is a good place to put any last-minute commands the system should run at the very end of the boot process. Most common system configuration tasks (like loading modules, changing
+
the console font, or setting up devices) usually have a dedicated place where they belong. To avoid confusion, ensure that whatever one intends to add to {{Filename|rc.local}} is not already residing in {{Filename|/etc/profile.d}}, or any other existing configuration location instead.
+
 
+
When editing this file, keep in mind that it is run '''after''' the basic setup (modules/daemons), as the '''root''' user, and '''whether or not''' X starts. Here is an example which just un-mutes the ALSA sound settings:
+
 
+
{{File
+
|name=/etc/rc.local
+
|content=<nowiki>
+
#!/bin/bash
+
 
+
# /etc/rc.local: Local multi-user startup script.
+
 
+
amixer sset 'Master Mono' 50% unmute &> /dev/null
+
amixer sset 'Master' 50% unmute &> /dev/null
+
amixer sset 'PCM' 75% unmute &> /dev/null
+
</nowiki>}}
+
 
+
Another common usage for {{Filename|rc.local}} is to apply various hacks when one cannot make the ordinary initialization work correctly.
+
 
+
== Custom hooks ==
+
Hooks can be used to include custom code in various places in the rc.* scripts.
+
{| class="wikitable"
+
|-
+
! scope="col" | Hook Name
+
! scope="col" | When hook is executed
+
|-
+
| sysinit_start
+
| At the beginning of rc.sysinit
+
|-
+
| sysinit_udevlaunched
+
| After udev has been launched in rc.sysinit
+
|-
+
| sysinit_udevsettled
+
| After uevents have settled in rc.sysinit
+
|-
+
| sysinit_prefsck
+
| Before fsck is run in rc.sysinit
+
|-
+
| sysinit_postfsck
+
| After fsck is run in rc.sysinit
+
|-
+
| sysinit_premount
+
| Before local filesystems are mounted, but after root is mounted read-write in rc.sysinit
+
|-
+
| sysinit_end
+
| At the end of rc.sysinit
+
|-
+
| multi_start
+
| At the beginning of rc.multi
+
|-
+
| multi_end
+
| At the end of rc.multi
+
|-
+
| single_start
+
| At the beginning of rc.single
+
|-
+
| single_prekillall
+
| Before all processes are being killed in rc.single
+
|-
+
| single_postkillall
+
| After all processes have been killed in rc.single
+
|-
+
| single_udevlaunched
+
| After udev has been launched in rc.single
+
|-
+
| single_udevsettled
+
| After uevents have settled in rc.single
+
|-
+
| single_end
+
| At the end of rc.single
+
|-
+
| shutdown_start
+
| At the beginning of rc.shutdown
+
|-
+
| shutdown_prekillall
+
| Before all processes are being killed in rc.shutdown
+
|-
+
| shutdown_postkillall
+
| After all processes have been killed in rc.shutdown
+
|-
+
| shutdown_poweroff
+
| Directly before powering off in rc.shutdown
+
|}
+
 
+
To define a hook function, create a file in /etc/rc.d/functions.d using:
+
<pre>
+
function_name() {
+
  ...
+
}
+
add_hook hook_name function_name
+
</pre>
+
Files in /etc/rc.d/functions.d are sourced from {{Filename|/etc/rc.d/functions}}.
+
You can register multiple hook functions for the same hook, as well as registering the same hook function for multiple hooks. Don't define functions named add_hook or run_hook in these files, as they are defined in {{Filename|/etc/rc.d/functions}}.
+
 
+
==== Example ====
+
Adding the following file will disable the write-back cache on a hard drive <i>before</i> any daemons are started (useful for drives containing MySQL InnoDB files).
+
{{File|name=/etc/rc.d/functions.d/hd_settings|content=hd_settings() {
+
    /sbin/hdparm -W0 /dev/sdb
+
}
+
add_hook sysinit_udevsettled hd_settings
+
add_hook single_udevsettled  hd_settings
+
}}
+
First it defines the function hd_settings, and then registers it for the single_udevsettled and sysinit_udevsettled hooks. The function will then be called immediately after uvents have settled in {{Filename|/etc/rc.d/rc.sysinit}} or {{Filename|/etc/rc.d/rc.single}}.
+
 
+
== init: Login ==
+
By default, after the Arch boot scripts are completed, the {{Codeline|/sbin/agetty}} program prompts users for a login name. After a login name is received, {{Codeline|/sbin/agetty}} calls {{Codeline|/bin/login}} to prompt for the login password.
+
 
+
Finally, with a successful login, the {{Codeline|/bin/login}} program starts the user's default shell. The default shell and environment variables may be globally defined within {{Filename|/etc/profile}}. All variables within a user's home directory shall take precedence over those globally defined under {{Filename|/etc}}. For instance, if two conflicting variables are specified within {{Filename|/etc/profile}} and {{Filename|~/.bashrc}}, the one dictated by {{Filename|~/.bashrc}} shall prevail.
+
 
+
Other options include [[Automatic login to virtual console|mingetty]] which allows for auto-login and [[rungetty]] which allows for auto-login and automatically running commands and programs, e.g. the always useful htop.
+
 
+
The majority of users wishing to start an [[X]] server during the boot process will want to install a display manager, and see [[Display Manager]] for details. Alternatively, [[Start X at Boot]] outlines methods that do not involve a display manager.
+
 
+
== See also ==
+
 
+
* [[Startup files]]
+
 
+
== External resources ==
+
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]
+
 
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]
 
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]
 
* [http://linux.about.com/library/cmd/blcmdl5_sysctl.conf.htm Linux / Unix Command: sysctl.conf]
 
* [http://bbs.archlinux.org/search.php?action=search&keywords=rc.local&search_in=topic&sort_dir=DESC&show_as=topics Search the forum for rc.local examples]
 
 
* [[Wikipedia:Linux startup process]]
 
* [[Wikipedia:Linux startup process]]
 
* [[Wikipedia:initrd]]
 
* [[Wikipedia:initrd]]
 +
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]

Revision as of 17:36, 23 February 2014

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

Zavaděč

Poté, co je sytém zapnut a POST dokončen, nalezne BIOS preferované bootovací médium a předá kontrolu programu v Master Boot Record na tomto médiu. Na GNU/Linux počítači se často v MBR nalézá zavaděč jako je např. GRUB (Česky) nebo LILO (Česky). Zavaděč pak uživateli nabídne možné operační systémy pro bootování, např. Arch Linux a Windows v tzv. dual-boot sestavě. Jakmile je Arch zvolen, zavaděč nahraje obraz jádra (vmlinuz-linux) a prvotní obraz root filesystému (initramfs-linux.img) do paměti a spustí jádro, kterému předá adresu umístění obrazů v paměti.

Jádro

Jádro je základ operačního systému. Operuje v nízké úrovni systému (kernelspace) a zprostředkovává interakce mezi hardwarem a programy. K dosažení efektivního využití CPU používá jádro plánovač, který na základě priority střídavě přiděluje jednotlivým procesům procesorový čas, čímž se docílí iluze, že je více programů prováděno zároveň.

Initframs

Po zavedení jádra se rozbalí initramfs (initial RAM filesystem), který se stane prvotním kořenovým souborovým systémem. Jádro poté spustí /init jako první proces, čímž začíná early userspace.

Účelem initramfs je zavést systém do stavu, kdy už má přístup ke kořenovému souborovému systému (viz FHS). To znamená, že moduly potřebné k přístupu k zařízením, jako jsou např. IDE, SCSI, SATA nebo USB/FW, musí být možno zavést do jádra přímo z initramfs (pokud dané moduly nejsou zkompilovány přímo v jádře); jakmile se z initramfs naloadují správné moduly (buď explicitně nějakým programem či skriptem, nebo prostřednictvím udev), bootovací proces pokračuje. Díky tomu může initramfs obsahovat pouze moduly potřebné k přístupu ke kořenovému souborovému systému; nemusí tedy obsahovat všechny moduly, které by mohly být kdy použity. Většina modulů bude zavedena později během init procesu prostřednictvím udev.

Init proces

Během poslední fáze early userspace je připojen skutečný kořenový souborový systém, který následně nahradí prvotní kořenový souborový systém. Nakonec je spuštěn /sbin/init, který nahradí proces /init.

Dříve Arch Linux využíval SysVinit jako init proces. Nyní při nové instalaci již je jako výchozí systemd. Uživatelům, kteří nadále používají SysVinit, je doporučeno přejít k systemd.

Viz také