LinuxϵͳµÄÆô¶¯·½Ê½Óе㸴ÔÓ£¬¶øÇÒ×ÜÊÇÓÐÐèÒªÓÅ»¯µÄµØ·½¡£´«Í³µÄLinuxϵͳÆô¶¯¹ý³ÌÖ÷ÒªÓÉÖøÃûµÄinit½ø³Ì£¨Ò²±»³ÆΪSysV
initÆô¶¯ÏµÍ³£©´¦Àí£¬¶ø»ùÓÚinitµÄÆô¶¯ÏµÍ³±»ÈÏΪÓÐЧÂʲ»×ãµÄÎÊÌ⣬systemdÊÇLinuxϵͳ»úÆ÷µÄÁíÒ»ÖÖÆô¶¯·½Ê½£¬Ðû³ÆÃÖ²¹ÁËÒÔ´«Í³Linux
SysV initΪ»ù´¡µÄϵͳµÄȱµã¡£ÔÚÕâÀïÎÒÃǽ«×ÅÖØÌÖÂÛsystemdµÄÌØÐÔºÍÕùÒ飬µ«ÊÇΪÁ˸üºÃµØÀí½âËü£¬Ò²»á¿´Ò»ÏÂͨ¹ý´«Í³µÄÒÔSysV
initΪ»ù´¡µÄϵͳµÄLinuxÆô¶¯¹ý³ÌÊÇʲôÑùµÄ¡£ÓÑÇéÌáÐÑһϣ¬systemdÈÔÈ»´¦ÔÚ²âÊԽ׶Σ¬¶øδÀ´·¢²¼µÄLinux²Ù×÷ϵͳҲÕý×¼±¸ÓÃsystemdÆô¶¯¹ÜÀí³ÌÐòÌæ´úµ±Ç°µÄÆô¶¯¹ý³Ì£¨LCTT
Òë×¢£º½ØÖ¹µ½±¾ÎÄ·¢±í£¬Ö÷Á÷µÄLinux·¢ÐаæÒѾÓкܶà²ÉÓÃÁË systemd£©¡£
Àí½âLinuxÆô¶¯¹ý³Ì
ÔÚÎÒÃÇ´ò¿ªLinuxµçÄԵĵçÔ´ºóµÚÒ»¸öÆô¶¯µÄ½ø³Ì¾ÍÊÇinit¡£·ÖÅä¸øinit½ø³ÌµÄPIDÊÇ1¡£ËüÊÇϵͳÆäËûËùÓнø³ÌµÄ¸¸½ø³Ì¡£µ±Ò»Ì¨LinuxµçÄÔÆô¶¯ºó£¬´¦ÀíÆ÷»áÏÈÔÚϵͳ´æ´¢ÖвéÕÒBIOS£¬Ö®ºóBIOS»á¼ì²âϵͳ×ÊÔ´È»ºóÕÒµ½µÚÒ»¸öÒýµ¼É豸£¬Í¨³£ÎªÓ²ÅÌ£¬È»ºó»á²éÕÒÓ²Å̵ÄÖ÷Òýµ¼¼Ç¼£¨MBR£©£¬È»ºó¼ÓÔص½ÄÚ´æÖв¢°Ñ¿ØÖÆȨ½»¸øËü£¬ÒÔºóµÄÆô¶¯¹ý³Ì¾ÍÓÉMBR¿ØÖÆ¡£
Ö÷Òýµ¼¼Ç¼»á³õʼ»¯Òýµ¼³ÌÐò£¨LinuxÉÏÓÐÁ½¸öÖøÃûµÄÒýµ¼³ÌÐò£¬GRUBºÍLILO£¬80%µÄLinuxϵͳÔÚÓÃGRUBÒýµ¼³ÌÐò£©£¬Õâ¸öʱºòGRUB»òLILO»á¼ÓÔØÄÚºËÄ£¿é¡£Äں˻áÂíÉϲéÕÒ/sbinϵġ°init¡±³ÌÐò²¢Ö´ÐÐËü¡£´ÓÕâÀ↑ʼinit³ÉΪÁËLinuxϵͳµÄ¸¸½ø³Ì¡£init¶ÁÈ¡µÄµÚÒ»¸öÎļþÊÇ/etc/inittab£¬Í¨¹ýËüinit»áÈ·¶¨ÎÒÃÇLinux²Ù×÷ϵͳµÄÔËÐ춱ð¡£Ëü»á´ÓÎļþ/etc/fstabÀï²éÕÒ·ÖÇø±íÐÅϢȻºó×öÏàÓ¦µÄ¹ÒÔØ¡£È»ºóinit»áÆô¶¯/etc/init.dÀïÖ¸¶¨µÄĬÈÏÆô¶¯¼¶±ðµÄËùÓзþÎñ/½Å±¾¡£ËùÓзþÎñÔÚÕâÀïͨ¹ýinitÒ»¸öÒ»¸ö±»³õʼ»¯¡£ÔÚÕâ¸ö¹ý³ÌÀinitÿ´ÎÖ»Æô¶¯Ò»¸ö·þÎñ£¬ËùÓзþÎñ/ÊØ»¤½ø³Ì¶¼ÔÚºǫִ́Ðв¢ÓÉinitÀ´¹ÜÀí¡£
¹Ø»ú¹ý³Ì²î²»¶àÊÇÏà·´µÄ¹ý³Ì£¬Ê×ÏÈinitÍ£Ö¹ËùÓзþÎñ£¬×îºó½×¶Î»áжÔØÎļþϵͳ¡£
ÒÔÉÏÌáµ½µÄÆô¶¯¹ý³ÌÓÐһЩ²»×ãµÄµØ·½¡£¶øÓÃÒ»ÖÖ¸üºÃµÄ·½Ê½À´Ìæ´ú´«Í³initµÄÐèÇóÒѾ´æÔںܳ¤Ê±¼äÁË¡£Ò²²úÉúÁËÐí¶àÌæ´ú·½°¸¡£ÆäÖбȽÏÖøÃûµÄÓÐUpstart£¬Epoch£¬MudaºÍSystemd¡£¶øSystemd»ñµÃ×î¶à¹Ø×¢²¢±»ÈÏΪÊÇÄ¿Ç°×î¼ÑµÄ·½°¸¡£
Àí½âSystemd
¿ª·¢SystemdµÄÖ÷ҪĿµÄ¾ÍÊǼõÉÙϵͳÒýµ¼Ê±¼äºÍ¼ÆË㿪Ïú¡£Systemd£¨ÏµÍ³¹ÜÀíÊØ»¤½ø³Ì£©£¬×ʼÒÔGNU
GPLÐÒéÊÚȨ¿ª·¢£¬ÏÖÔÚÒÑתΪʹÓÃGNU LGPLÐÒ飬ËüÊÇÈç½ñÌÖÂÛ×îÈÈÁÒµÄÒýµ¼ºÍ·þÎñ¹ÜÀí³ÌÐò¡£Èç¹ûÄãµÄLinuxϵͳÅäÖÃΪʹÓÃSystemdÒýµ¼³ÌÐò£¬ËüÈ¡Ì洫ͳµÄSysV
init£¬Æô¶¯¹ý³Ì½«½»¸øsystemd´¦Àí¡£SystemdµÄÒ»¸öºËÐŦÄÜÊÇËüͬʱ֧³ÖSysV initµÄºó¿ª»úÆô¶¯½Å±¾¡£
SystemdÒýÈëÁ˲¢ÐÐÆô¶¯µÄ¸ÅÄËü»áΪÿ¸öÐèÒªÆô¶¯µÄÊØ»¤½ø³Ì½¨Á¢Ò»¸öÌ×½Ó×Ö£¬ÕâЩÌ×½Ó×Ö¶ÔÓÚʹÓÃËüÃǵĽø³ÌÀ´ËµÊdzéÏóµÄ£¬ÕâÑùËüÃÇ¿ÉÒÔÔÊÐí²»Í¬ÊØ»¤½ø³ÌÖ®¼ä½øÐн»»¥¡£Systemd»á´´½¨Ð½ø³Ì²¢ÎªÃ¿¸ö½ø³Ì·ÖÅäÒ»¸ö¿ØÖÆ×飨cgroup£©¡£´¦ÓÚ²»Í¬¿ØÖÆ×éµÄ½ø³ÌÖ®¼ä¿ÉÒÔͨ¹ýÄÚºËÀ´»¥ÏàͨÐÅ¡£systemd´¦Àí¿ª»úÆô¶¯½ø³ÌµÄ·½Ê½·Ç³£Æ¯ÁÁ£¬ºÍ´«Í³»ùÓÚinitµÄϵͳ±ÈÆðÀ´ÓÅ»¯ÁËÌ«¶à¡£ÈÃÎÒÃÇ¿´ÏÂSystemdµÄһЩºËÐŦÄÜ¡£
ºÍinit±ÈÆðÀ´Òýµ¼¹ý³Ì¼ò»¯Á˺ܶà
SystemdÖ§³Ö²¢·¢Òýµ¼¹ý³Ì´Ó¶ø¿ÉÒÔ¸ü¿ìÆô¶¯
ͨ¹ý¿ØÖÆ×éÀ´×·×Ù½ø³Ì£¬¶ø²»ÊÇPID
ÓÅ»¯ÁË´¦ÀíÒýµ¼¹ý³ÌºÍ·þÎñÖ®¼äÒÀÀµµÄ·½Ê½
Ö§³Öϵͳ¿ìÕպͻָ´
¼à¿ØÒÑÆô¶¯µÄ·þÎñ£»Ò²Ö§³ÖÖØÆôÒѱÀÀ£·þÎñ
°üº¬ÁËsystemd-loginÄ£¿éÓÃÓÚ¿ØÖÆÓû§µÇ¼
Ö§³Ö¼ÓÔغÍжÔØ×é¼þ
µÍÄÚ´æʹÓúۼ£ÒÔ¼°ÈÎÎñµ÷¶ÈÄÜÁ¦
¼Ç¼Ê¼þµÄJournaldÄ£¿éºÍ¼Ç¼ϵͳÈÕÖ¾µÄsyslogdÄ£¿é
SystemdͬʱҲÇåÎúµØ´¦ÀíÁËϵͳ¹Ø»ú¹ý³Ì¡£ËüÔÚ/usr/lib/systemd/Ŀ¼ÏÂÓÐÈý¸ö½Å±¾£¬·Ö±ð½Ðsystemd-halt.service£¬systemd-poweroff.service£¬systemd-reboot.service¡£Õ⼸¸ö½Å±¾»áÔÚÓû§Ñ¡Ôñ¹Ø»ú£¬ÖØÆô»ò´ý»úʱִÐС£ÔÚ½ÓÊÕµ½¹Ø»úʼþʱ£¬systemdÊ×ÏÈжÔØËùÓÐÎļþϵͳ²¢Í£Ö¹ËùÓÐÄÚ´æ½»»»É豸£¬¶Ï¿ª´æ´¢É豸£¬Ö®ºóÍ£Ö¹ËùÓÐʣϵĽø³Ì¡£

Systemd½á¹¹¸ÅÀÀ
ÈÃÎÒÃÇ¿´Ò»ÏÂLinuxϵͳÔÚʹÓÃsystemd×÷ΪÒýµ¼³ÌÐòʱµÄ¿ª»úÆô¶¯¹ý³ÌµÄ½á¹¹ÐÔϸ½Ú¡£ÎªÁ˼òµ¥£¬ÎÒÃǽ«ÔÚÏÂÃæ°´²½ÖèÁгöÀ´Õâ¸ö¹ý³Ì£º
1. µ±Äã´ò¿ªµçÔ´ºóµçÄÔËù×öµÄµÚÒ»¼þÊÂÇé¾ÍÊÇBIOS³õʼ»¯¡£BIOS»á¶ÁÈ¡Òýµ¼É豸É趨£¬¶¨Î»²¢´«µÝϵͳ¿ØÖÆȨ¸øMBR£¨¼ÙÉèÓ²ÅÌÊǵÚÒ»Òýµ¼É豸£©¡£
2. MBR´ÓGrub»òLILOÒýµ¼³ÌÐò¶ÁÈ¡Ïà¹ØÐÅÏ¢²¢³õʼ»¯Äںˡ£½ÓÏÂÀ´½«ÓÉGrub»òLILO¼ÌÐøÒýµ¼ÏµÍ³¡£Èç¹ûÄãÔÚgrubÅäÖÃÎļþÀïÖ¸¶¨ÁËsystemd×÷ΪÒýµ¼¹ÜÀí³ÌÐò£¬Ö®ºóµÄÒýµ¼¹ý³Ì½«ÓÉsystemdÍê³É¡£SystemdʹÓá°target¡±À´´¦ÀíÒýµ¼ºÍ·þÎñ¹ÜÀí¹ý³Ì¡£ÕâЩsystemdÀïµÄ¡°target¡±Îļþ±»ÓÃÓÚ·Ö×鲻ͬµÄÒýµ¼µ¥ÔªÒÔ¼°Æô¶¯Í¬²½½ø³Ì¡£
3. systemdÖ´ÐеĵÚÒ»¸öÄ¿±êÊÇdefault.target¡£µ«Êµ¼ÊÉÏdefault.targetÊÇÖ¸Ïògraphical.targetµÄÈíÁ´½Ó¡£LinuxÀïµÄÈíÁ´½ÓÓÃÆðÀ´ºÍWindowsϵĿì½Ý·½Ê½Ò»Ñù¡£ÎļþGraphical.targetµÄʵ¼ÊλÖÃÊÇ/usr/lib/systemd/system/graphical.target¡£ÔÚÏÂÃæµÄ½ØͼÀïÏÔʾÁËgraphical.targetÎļþµÄÄÚÈÝ¡£

4. ÔÚÕâ¸ö½×¶Î£¬»áÆô¶¯multi-user.target¶øÕâ¸ötarget½«×Ô¼ºµÄ×Óµ¥Ôª·ÅÔÚĿ¼¡°/etc/systemd/system/multi-user.target.wants¡±Àï¡£Õâ¸ötargetΪ¶àÓû§Ö§³ÖÉ趨ϵͳ»·¾³¡£·ÇrootÓû§»áÔÚÕâ¸ö½×¶ÎµÄÒýµ¼¹ý³ÌÖÐÆôÓ᣷À»ðǽÏà¹ØµÄ·þÎñÒ²»áÔÚÕâ¸ö½×¶ÎÆô¶¯¡£

¡°multi-user.target¡±»á½«¿ØÖÆȨ½»¸øÁíÒ»²ã¡°basic.target¡±¡£

5. ¡°basic.target¡±µ¥ÔªÓÃÓÚÆô¶¯ÆÕͨ·þÎñÌرðÊÇͼÐιÜÀí·þÎñ¡£Ëüͨ¹ý/etc/systemd/system/basic.target.wantsĿ¼À´¾ö¶¨ÄÄЩ·þÎñ»á±»Æô¶¯£¬basic.targetÖ®ºó½«¿ØÖÆȨ½»¸øsysinit.target.

6. ¡°sysinit.target¡±»áÆô¶¯ÖØÒªµÄϵͳ·þÎñÀýÈçϵͳ¹ÒÔØ£¬ÄÚ´æ½»»»¿Õ¼äºÍÉ豸£¬Äں˲¹³äÑ¡ÏîµÈµÈ¡£sysinit.targetÔÚÆô¶¯¹ý³ÌÖлᴫµÝ¸ølocal-fs.target¡£Õâ¸ötargetµ¥ÔªµÄÄÚÈÝÈçÏÂÃæ½ØͼÀïËùչʾ¡£

7. local-fs.target£¬Õâ¸ötargetµ¥Ôª²»»áÆô¶¯Óû§Ïà¹ØµÄ·þÎñ£¬ËüÖ»´¦Àíµ×²ãºËÐÄ·þÎñ¡£Õâ¸ötarget»á¸ù¾Ý/etc/fstabºÍ/etc/inittabÀ´Ö´ÐÐÏà¹Ø²Ù×÷¡£
ϵͳÒýµ¼ÐÔÄÜ·ÖÎö
SystemdÌṩÁ˹¤¾ßÓÃÓÚʶ±ðºÍ¶¨Î»Òýµ¼Ïà¹ØµÄÎÊÌâ»òÐÔÄÜÓ°Ïì¡£Systemd-analyzeÊÇÒ»¸öÄÚ½¨µÄÃüÁ¿ÉÒÔÓÃÀ´¼ì²âÒýµ¼¹ý³Ì¡£Äã¿ÉÒÔÕÒ³öÔÚÆô¶¯¹ý³ÌÖгö´íµÄµ¥Ôª£¬È»ºó¸ú×Ù²¢¸ÄÕýÒýµ¼×é¼þµÄÎÊÌâ¡£ÔÚÏÂÃæÁгöһЩ³£ÓõÄsystemd-analyzeÃüÁî¡£
systemd-analyze time ÓÃÓÚÏÔʾÄں˺ÍÆÕͨÓû§¿Õ¼äÆô¶¯Ê±Ëù»¨µÄʱ¼ä¡£
$ systemd-analyze time
Startup finished in 1440ms (kernel) + 3444ms
(userspace) |
systemd-analyze blame »áÁгöËùÓÐÕýÔÚÔËÐеĵ¥Ôª£¬°´´Ó³õʼ»¯¿ªÊ¼µ½µ±Ç°Ëù»¨µÄʱ¼äÅÅÐò£¬Í¨¹ýÕâÖÖ·½Ê½Äã¾ÍÖªµÀÄÄЩ·þÎñÔÚÒýµ¼¹ý³ÌÖÐÒª»¨½Ï³¤Ê±¼äÀ´Æô¶¯¡£
$ systemd-analyze blame
2001ms mysqld.service
234ms httpd.service
191ms vmms.service |
systemd-analyze verify ÏÔʾÔÚËùÓÐϵͳµ¥ÔªÖÐÊÇ·ñÓÐÓï·¨´íÎó¡£
systemd-analyze plot ¿ÉÒÔÓÃÀ´°ÑÕû¸öÒýµ¼¹ý³ÌдÈëÒ»¸öSVG¸ñʽÎļþÀï¡£Õû¸öÒýµ¼¹ý³Ì·Ç³£³¤²»·½±ãÔĶÁ£¬ËùÒÔͨ¹ýÕâ¸öÃüÁîÎÒÃÇ¿ÉÒÔ°ÑÊä³öдÈëÒ»¸öÎļþ£¬Ö®ºóÔٲ鿴ºÍ·ÖÎö¡£ÏÂÃæÕâ¸öÃüÁî¾ÍÊÇ×öÕâ¸ö¡£
systemd-analyze plot > boot.svg |
SystemdµÄÕùÒé
Systemd²¢Ã»ÓÐÐÒÔ˵ػñµÃËùÓÐÈ˵ÄÇàíù£¬Ò»Ð©×¨¼ÒºÍ¹ÜÀíÔ±¶ÔÓÚËüµÄ¹¤×÷·½Ê½ºÍ¿ª·¢Óв»Í¬Òâ¼û¡£¸ù¾Ý¶ÔÓÚSystemdµÄÅúÆÀ£¬Ëü²»ÊÇ¡°ÀàUnix¡±·½Ê½ÒòΪËüÊÔ×ÅÌ滻һЩϵͳ·þÎñ¡£Ò»Ð©×¨¼ÒÒ²²»Ï²»¶Ê¹Óöþ½øÖÆÅäÖÃÎļþµÄÏë·¨¡£¾Ý˵±à¼systemdÅäÖ÷dz£À§ÄѶøÇÒûÓÐÒ»¸ö¿ÉÓõÄͼÐι¤¾ß¡£
ÈçºÎÔÚUbuntu 14.04ºÍ12.04ÉϲâÊÔSystemd
±¾À´£¬Ubuntu¾ö¶¨´ÓUbuntu 16.04 LTS¿ªÊ¼Ê¹ÓÃSystemdÀ´Ìæ»»µ±Ç°µÄÒýµ¼¹ý³Ì¡£Ubuntu
16.04Ô¤¼ÆÔÚ2016Äê4Ô·¢²¼£¬µ«ÊÇ¿¼Âǵ½SystemdµÄÁ÷ÐкÍÐèÇ󣬸ոշ¢²¼µÄUbuntu 15.04²ÉÓÃËü×÷ΪĬÈÏÒýµ¼³ÌÐò¡£ÁíÍ⣬Ubuntu
14.04 Trusty TahrºÍUbuntu 12.04 Precise PangolinµÄÓû§¿ÉÒÔÔÚËûÃǵĻúÆ÷ÉϲâÊÔSystemd¡£²âÊÔ¹ý³Ì²¢²»¸´ÔÓ£¬ÄãËùÒª×öµÄÖ»ÊÇ°ÑÏà¹ØµÄPPA°üº¬µ½ÏµÍ³ÖУ¬¸üвֿⲢÉý¼¶ÏµÍ³¡£
ÉùÃ÷£ºÇë×¢ÒâËüÈÔÈ»´¦ÓÚUbuntuµÄ²âÊԺͿª·¢½×¶Î¡£Éý¼¶²âÊÔ°ü¿ÉÄÜ»á´øÀ´Ò»Ð©Î´Öª´íÎó£¬×µÄÇé¿öÏÂÓпÉÄÜËð»µÄãµÄϵͳÅäÖá£ÇëÈ·±£ÔÚ³¢ÊÔÉý¼¶Ç°ÒѾ±¸·ÝºÃÖØÒªÊý¾Ý¡£
ÔÚÖÕ¶ËÀïÔËÐÐÏÂÃæµÄÃüÁîÀ´Ìí¼ÓPPAµ½ÄãµÄUbuntuϵͳÀ
sudo add-apt-repository ppa:pitti/systemd |
Ä㽫»á¿´µ½¾¯¸æÐÅÏ¢ÒòΪÎÒÃdz¢ÊÔʹÓÃÁÙʱ/²âÊÔPPA£¬¶øËüÃÇÊDz»½¨ÒéÓÃÓÚʵ¼Ê¹¤×÷»úÆ÷Éϵġ£

È»ºóÔËÐÐÏÂÃæµÄÃüÁî¸üÐÂAPT°ü¹ÜÀí²Ö¿â¡£

ÔËÐÐÏÂÃæµÄÃüÁîÉý¼¶ÏµÍ³¡£
sudo apt-get dist-upgrade |

¾ÍÕâЩ£¬ÄãÓ¦¸ÃÒѾ¿ÉÒÔÔÚÄãµÄUbuntuϵͳÀï¿´µ½SystemdÅäÖÃÎļþÁË£¬´ò¿ª/lib/systemd/Ŀ¼¿ÉÒÔ¿´µ½ÕâЩÎļþ¡£
ºÃ°É£¬ÏÖÔÚÈÃÎÒÃDZà¼Ò»ÏÂgrubÅäÖÃÎļþÖ¸¶¨systemd×÷ΪĬÈÏÒýµ¼³ÌÐò¡£¿ÉÒÔʹÓÃGeditÎÄ×Ö±à¼Æ÷±à¼grubÅäÖÃÎļþ¡£
sudo gedit /etc/default/grub |

ÔÚÎļþÀïÐÞ¸ÄGRUBCMDLINELINUX_DEFAULTÏÉ趨ËüµÄ²ÎÊýΪ£º¡°init=/lib/systemd/systemd¡±

¾ÍÕâÑù£¬ÄãµÄUbuntuϵͳÒѾ²»ÔÙʹÓô«Í³µÄÒýµ¼³ÌÐòÁË£¬¸ÄΪʹÓÃSystemd¹ÜÀíÆ÷¡£ÖØÆôÄãµÄ»úÆ÷È»ºó²é¿´systemdÒýµ¼¹ý³Ì°É¡£

½áÂÛ
SystemdºÁÎÞÒÉÎÊΪ¸Ä½øLinuxÒýµ¼¹ý³ÌÇ°½øÁËÒ»´ó²½£»Ëü°üº¬ÁËÒ»Ì×ƯÁÁµÄ¿âºÍÊØ»¤½ø³ÌÅäºÏ¹¤×÷À´ÓÅ»¯ÏµÍ³Òýµ¼ºÍ¹Ø±Õ¹ý³Ì¡£Ðí¶àLinux·¢ÐаæÕý×¼±¸½«Ëü×÷Ϊ×Ô¼ºµÄÕýʽÒýµ¼³ÌÐò¡£ÔÚÒÔºóµÄLinux·¢ÐаæÖУ¬ÎÒÃǽ«ÓÐÍû¿´µ½systemd¿ª»ú¡£µ«ÊÇÁíÒ»·½Ã棬ΪÁË»ñµÃ³É¹¦²¢¹ã·ºÓ¦Óã¬systemdÈÔÐèÒªÈÏÕæ´¦ÀíÅúÆÀÒâ¼û¡£
|