BOOTUP
BOOTUP
NAMEæè¿°
常è§å¯å¨æµç¨
INITRD(INITIAL RAM DISK) å¯å¨æµç¨
峿ºæµç¨
åè§
è·
NAME
bootup - ç³»ç»å¯å¨æµç¨
æè¿°
å¨ç³»ç»å¯å¨è¿ç¨ä¸è¦æ¶åå¤ä¸ªä¸åçç»ä»¶ã æä¸çµæºæé®åï¼é¦åBIOS/UEFIåæåºæ¬çç¡¬ä»¶èªæ£ä¸åå§åï¼ ç¶åå è½½é¢è®¾/æå¨éæ©çç£ç/ç½ç»ä¸çå¼å¯¼å è½½å¨(ä¾å¦GRUB2)ï¼ å¼å¯¼å è½½å¨è¿ä¸æ¥ä»ç£ç/ç½ç»ä¸å è½½æä½ç³»ç»åæ ¸(ä¾å¦Linux)ã 对äºLinuxæ¥è¯´ï¼åæ ¸å°ä¼(å¯éç)è§£åä¸ä¸ªinitrd(initial RAM disk)éå(å¯ä»¥ç¨ dracut(8) ä¹ç±»çå·¥å·çæ)ï¼ å¹¶æ§è¡ç±"rdinit="åæ ¸å¼å¯¼é项æå®çinitç¨åº(ä¾å¦ systemd(1)) 以寻æ¾å¹¶æè½½æ ¹æä»¶ç³»ç»ã å®ææ ¹æä»¶ç³»ç»çæè½½ä¹åï¼åæ ¸å¯å¨ç±"init="åæ ¸å¼å¯¼é项æå®çinitç¨åº(ä¾å¦ systemd(1)) 以æ¥ç®¡ç³»ç»çæ§å¶æã 该initç¨åºå°ä¼è´è´£æ£æµææå¶ä»ç硬件设å¤ãæè½½å¿è¦çæä»¶ç³»ç»ãå¯å¨ææå¿è¦çæå¡ï¼ç- çã
峿ºæ¶ï¼ initç¨åºå°ä¼åæ¢æææå¡ã å¸è½½æææä»¶ç³»ç»ã (å¯éç)è¿åinitrdç¯å¢å¸è½½æ ¹æä»¶ç³»ç»ï¼ æåå³éçµæºã
å¶ä»æå³ç³»ç»å¯å¨æµç¨çä¿¡æ¯å¯ä»¥åè boot(7) æåã
常è§å¯å¨æµç¨
彿åæè½½äº"root="åæ ¸å¼å¯¼é项æå®çæ ¹æä»¶ç³»ç»ä¹åï¼åæ ¸å°å¯å¨ç±"init="åæ ¸å¼å¯¼é项æå®çinitç¨åºï¼ ä»è¿ä¸ªæ¶é´ç¹å¼å§ï¼å³è¿å¥äº"常è§å¯å¨æµç¨"ï¼ æ£æµç¡¬ä»¶è®¾å¤å¹¶å 载驱å¨ãæè½½å¿è¦çæä»¶ç³»ç»ãå¯å¨ææå¿è¦çæå¡ï¼çç- ãå¯¹äº systemd(1) ç³»ç»æ¥è¯´ï¼ä¸è¿°"initç¨åº"å°±æ¯ systemd è¿ç¨ï¼ èæ´ä¸ª"常è§å¯å¨æµç¨"ä¹ä»¥å ä¸ªç¹æ®ç target åå(è¯¦è§ systemd.target(5)) ä½ä¸ºèç¹ï¼è¢«åå为å ä¸ªé¶æ®µæ§æ¥éª¤ã 卿¯ä¸ªé¶æ®µæ§æ- ¥éª¤åé¨ï¼ä»»å¡æ¯é«åº¦å¹¶è¡çï¼ æä»¥æ æ³åç¡®é¢æµåä¸é¶æ®µåååçåå顺åºï¼ 使¯ä¸åé¶æ®µä¹é´çååé¡ºåºæ»æ¯åºå®çã
å½å¯å¨ç³»ç»æ¶ï¼ systemd å°ä¼ä»¥ default.target 为å¯å¨ç®æ ï¼ åå©ååä¹é´ç¯ç¯ç¸æ£çä¾èµå³ç³»ï¼å³å¯å®æ"常è§å¯å¨æµç¨"ã default.target éå¸¸åªæ¯ä¸ä¸ªæå graphical.target(å¾å½¢çé¢) æ multi-user.target(ææ¬æ§å¶å°) çè½¯è¿æ¥ã 为äºå¼ºå¶å¯å¨æµç¨çè§èæ§ä»¥åæé«ååçå¹¶è¡æ§ï¼ é¢åå®ä¹äºä¸äºå·æç¹å®å«ä¹ç target ååãè¯¦è§ systemd.special(7) æåã
ä¸é¢çå¾è¡¨è§£éäº è¿äºå·æç¹å®å«ä¹ç target ååä¹é´çä¾èµå³ç³» 以ååèªå¨å¯å¨æµç¨ä¸çä½ç½®ã å¾ä¸çç®- 头表示äºååä¹é´çä¾èµå³ç³»ä¸åå顺åºï¼ æ´ä¸ªå¾è¡¨æç§èªä¸èä¸çæ¶é´é¡ºåºæ§è¡ã
local-fs-pre.target
|
v
(å个 mounts ä¸
(å个 swap
(å个å å¯å设å¤
fsck services...) devices...) devices...)
(å个åºå±æå¡:
(å个åºå±èæ
| | | udevd, tmpfiles,
æä»¶ç³»ç»
mounts:
v v v random seed, mqueue, configfs,
local-fs.target swap.target cryptsetup.target sysctl, ...)
debugfs, ...)
| | | | |
\__________________|_________________ |
___________________|____________________/
\|/
v
sysinit.target
|
____________________________________/|\________________________________________
/ | | | \
| | | | |
v v | v v
(å个 (å个 |
(å个 rescue.service
timers...) paths...) | sockets...) |
| | | | v
v v | v rescue.target
timers.target paths.target | sockets.target
. | | |
. \_________________ | ___________________/
.................................... \|/
v
basic.target
|
____________________________________/| emergency.service
/ | | |
| | | v
v v v emergency.target
display-
(å¾å½¢ç颿å¿é
(åä¸ªç³»ç»æå¡)
manager.service
çåä¸ªç³»ç»æå¡)
|
| | |
| | v
| | multi-user.target
| | |
\_________________ | _________________/
\|/
v
graphical.target
ç¨æä½æ è¯çç®æ ååç»å¸¸è¢«ç¨ä½å¯å¨ç®æ ã æä¸¤ç§æ¹æ³å¯ä»¥æå®å¯å¨ç®æ ï¼ (1)ä½¿ç¨ systemd.unit= åæ ¸å¼å¯¼é项(åè§ systemd(1))ï¼ (2)ä½¿ç¨ default.target è½¯è¿æ¥ã
å 为 timers.target 以弿¥æ¹å¼åå«å¨ basic.target ä¸ï¼ æä»¥ timer ååå¯ä»¥ä¾èµäºå¨ basic.target ä¹åæå¯å¨çæå¡ã
INITRD(INITIAL RAM DISK) å¯å¨æµç¨
å¨initrdåé¨ï¼ ä¹å¯ä»¥å° systemd ç¨ä½initç¨åº(ç±"rdinit="åæ ¸å¼å¯¼é项æå®)ã
æ¤æ¶ initrd.target å°æ¯é»è®¤ç®æ ã initrdåé¨å¯å¨æµç¨çä¸åé¨åä¸åä¸å°è basic.target ä¹åçé¨åå®å¨ç¸åã éåçå¯å¨æµç¨å°ä»¥ initrd.target ä¸ºç®æ (å¦ä¸å¾æç¤º)ã 彿 ¹æä»¶ç³»ç»è®¾å¤å¯ç¨æ¶ï¼å°å°è¾¾ initd-root-device.target ç®æ ã 妿æåçå°æ ¹æä»¶ç³»ç»æè½½å° /sysroot ç®å½ï¼é£ä¹ sysroot.mount ååå°è¢«å¯å¨ï¼ç¶åè¿ä¸æ¥å°è¾¾ initrd-root-fs.target ç®æ ã initrd-parse-etc.service å°ä¼åæ /sysroot/etc/fstab æä»¶ä»¥æè½½ /usr (è¥éè¦) ä¸å¸¦æ x-initrd.mount æ è®°çæè½½ç¹ã ææè¿äºæè½½ç¹é½å°è¢«æè½½å° /sysroot ä¹ä¸ï¼ç¶åæµç¨å°è¾¾ initrd-fs.target ç®æ ã忥䏿¥ initrd-cleanup.service å°ä¼ä½¿ç¨ systemctl --no-block isolate å½ä»¤å¯å¨ initrd-switch-root.target ç®æ ã å 为 isolate 表示ç«å³åæ¢ææå¨æ°çç®æ ååä¸ä¸éè¦çè¿ç¨ï¼ æä»¥æ- ¤å¨ä½å®é䏿¯ä¸ºæ¥ä¸æ¥åæ¢æ ¹ç®å½åé¢åçåå¤(ä¹å°±æ¯æ¸çç¯å¢)ã æåï¼å¯å¨ initrd-switch-root.service æå¡ï¼å°ç³»ç»çæ ¹ç®å½åæ¢è³ /sysroot ç®å½ã
(ä¹åçæµç¨ä¸ä¸ä¸å°èå®å¨ç¸å)
:
v
basic.target
| emergency.service
______________________/| |
/ | v
| initrd-root-device.target emergency.target
| |
| v
| sysroot.mount
| |
| v
| initrd-root-fs.target
| |
| v
v initrd-parse-etc.service
(å个èªå®ä¹ç
|
initrd services...) v
| (sysroot-usr.mount 以å
| fstab ä¸å¸¦æ
x-initrd.mount
|
æ è®°çå个æè½½ç¹)
| |
| v
| initrd-fs.target
\______________________ |
\|
v
initrd.target
|
v
initrd-cleanup.service
(ä½¿ç¨ isolates
å¯å¨ initrd-switch-root.target)
|
v
______________________/|
/ v
| initrd-udevadm-cleanup-db.service
v |
(å个èªå®ä¹ç
|
initrd services...) |
\______________________ |
\|
v
initrd-switch-root.target
|
v
initrd-switch-root.service
|
v
忢å°ä¸»æºä¸çæä½ç³»ç»
峿ºæµç¨
systemd ç³»ç»å¨å³æºæ¶åæ ·éµå¾ªåºå®çæµç¨ï¼ å·ä½å¦ä¸å¾æç¤ºï¼
(䏿æç³»ç»æå¡äºæ¥)
(䏿ææä»¶ç³»ç»
mounts, swaps, cryptsetup devices äºæ¥)
| |
v v
shutdown.target umount.target
| |
\____________________________________ ______/
\ /
v
(å个åºå±
services)
|
v
final.target
|
_____________________________________/
\_________________________________
/ | | \
| | | |
v v v v
systemd-reboot.service systemd-poweroff.service
systemd-halt.service systemd-kexec.service
| | | |
v v v v
reboot.target poweroff.target halt.target
kexec.target
ç¨æä½æ è¯çç®æ ååç»å¸¸è¢«ç¨ä½å³æºç®æ ã
åè§
systemd(1), boot(7), systemd.special(7), systemd.target(5), dracut(8)
è·
æ¬é¡µé¢ä¸æçç±ä¸æ man æå页计åæä¾ã
ç¿»è¯äººåï¼éæ¥å½
鿥å½ä½åéï¼http://www.jinbuguo.com
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh