系統(tǒng)啟動(dòng)和內(nèi)核管理.

cenos6啟動(dòng)流程

CentOS6啟動(dòng)流程.jpg
  1. 加載BIOS的硬件信息掩完,獲取第一個(gè)啟動(dòng)設(shè)備
  2. 讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
  3. 加載核心操作系統(tǒng)的核心信息,核心開始解壓縮充活,并嘗試驅(qū)動(dòng)所有的硬件設(shè)備
  4. 核心執(zhí)行init程序蜂莉,并獲取默認(rèn)的運(yùn)行信息
  5. init程序執(zhí)行/etc/rc.d/rc.sysinit文件
  6. 啟動(dòng)核心的外掛模塊
  7. init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
  8. init執(zhí)行/etc/rc.d/rc.local
  9. 執(zhí)行/bin/login程序,等待用戶登錄
  10. 登錄之后開始以Shell控制主機(jī)

POST

Power-On-Self-Test混卵,加電自檢映穗,是BIOS功能的一個(gè)主要部分。負(fù)責(zé)完成對(duì)CPU幕随、主板蚁滋、內(nèi)存、硬盤子系統(tǒng)赘淮、顯示子系統(tǒng)辕录、串并行接口、鍵盤梢卸、CD-ROM光驅(qū)等硬件情況的檢測(cè)

ROM:BIOS走诞,Basic Input and Output System,保存著有關(guān)計(jì)算機(jī)系統(tǒng)最重要的基本輸入輸出程序蛤高,系統(tǒng)信息設(shè)置蚣旱、開機(jī)加電自檢程序和系統(tǒng)啟動(dòng)自舉程序等

RAM:CMOS互補(bǔ)金屬氧化物半導(dǎo)體碑幅,保存各項(xiàng)參數(shù)的設(shè)定

按次序查找引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動(dòng)設(shè)備

Boot Sequence

選擇要啟動(dòng)的硬件設(shè)備姻锁,選擇了之后就可以讀取這個(gè)設(shè)備上位于MBR里頭的bootloader了枕赵。這一步的實(shí)現(xiàn)是這樣的:根據(jù)BIOS中對(duì)啟動(dòng)順序的設(shè)定,BIOS自己會(huì)依次掃描各個(gè)引導(dǎo)設(shè)備位隶,然后第一個(gè)被掃描到具有引導(dǎo)程序(bootloader)的設(shè)備就被作為要啟動(dòng)的引導(dǎo)設(shè)備

GRUB

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設(shè)定默認(rèn)運(yùn)行級(jí)別 --> 系統(tǒng)初始化腳本rc.sysinit --> 關(guān)閉或啟動(dòng)對(duì)應(yīng)級(jí)別的服務(wù) --> 啟動(dòng)終端

  1. 提供菜單
  2. 啟動(dòng)內(nèi)核
  3. 轉(zhuǎn)交給別的loader(linux)

stage1:mbr
stage1_5:mbr之后的扇區(qū)拷窜,讓stage1中的bootloader能識(shí)別stage2所在的分區(qū)上的文件系統(tǒng)
stage2:磁盤分區(qū)(/boot/grub/)

安裝grub

  1. grub-install

    安裝grub stage1和stage1_5到/dev/DISK磁盤上,并復(fù)制GRUB相關(guān)文件到 /boot/grub目錄下

  2. grub

    grub> root (hd#,#)

    grub> setup (hd#)

    交互式涧黄,指定根篮昧,安裝grub到磁盤,根據(jù)/boot/grub/下的grub文件進(jìn)行修復(fù)笋妥,如無此類文件懊昨,還是要通過grub-install進(jìn)行修復(fù)

/boot/grub/grub.conf <-- /etc/grub.conf

[root@centos6 grub]# cat grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=7e51be47-2999-407e-8e20-1c48096a3a8c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-696.el6.x86_64.img

default=#:設(shè)定默認(rèn)啟動(dòng)的菜單項(xiàng);落單項(xiàng)(title)編號(hào)從0開始
timeout=#:指定菜單項(xiàng)等待選項(xiàng)選擇的時(shí)長(zhǎng)
splashimage=(hd#,#)/PATH/XPM_FILE:菜單背景圖片文件路徑
password [--md5] STRING:?jiǎn)?dòng)菜單編輯認(rèn)證
hiddenmenu:隱藏菜單
title TITLE:定義菜單項(xiàng)“標(biāo)題”, 可出現(xiàn)多次
root (hd#,#):查找stage2及kernel文件所在設(shè)備分區(qū)春宣;為grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:?jiǎn)?dòng)的內(nèi)核
initrd /PATH/TO/INITRAMFS_FILE:內(nèi)核匹配的ramfs文件
password [--md5|--encrypted ] STRING:?jiǎn)?dòng)選定的內(nèi)核或操作系統(tǒng)時(shí)進(jìn)行認(rèn)證

grub加密

grub-md5-crypt:md5加密

grub-crypt:sha512加密

default=0
timeout=5
password magedu 解鎖grub編輯時(shí)酵颁,需要密碼
password --md5 xxxxxx 使用grub-md5-crypt生成
password --encrpted xxxxx 使用grub-crypt
title redhat 6
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet selinux=0
initrd /initramfs-2.6.32-696.el6.x86_64.img
password magedu #這里的作用,進(jìn)入內(nèi)核時(shí)就會(huì)要求驗(yàn)證密碼

kernel

自身初始化:

  1. 探測(cè)可識(shí)別到的所有硬件設(shè)備
  2. 加載硬件驅(qū)動(dòng)程序(借助于ramdisk加載驅(qū)動(dòng))
  3. 以只讀方式掛載根文件系統(tǒng)
  4. 運(yùn)行用戶空間的第一個(gè)應(yīng)用程序:/sbin/init

ramdisk

ramdisk是用于實(shí)現(xiàn)系統(tǒng)初始化的月帝、基于內(nèi)存的磁盤設(shè)備躏惋,即加載至內(nèi)存(的某一段空間)后把內(nèi)存當(dāng)磁盤使用,并在內(nèi)存中作為臨時(shí)根文件系統(tǒng)提供給內(nèi)核使用嚷辅,幫助內(nèi)核掛載真正的根文件系統(tǒng)簿姨。而之所以能夠幫助內(nèi)核掛載根文件系統(tǒng)是因?yàn)樵趓amdisk這個(gè)臨時(shí)文件系統(tǒng)的/lib/modules目錄下有真正的根文件系統(tǒng)所在設(shè)備的驅(qū)動(dòng)程序;除此之外簸搞,這個(gè)臨時(shí)文件系統(tǒng)也遵循FHS扁位,例如有這些固定目錄結(jié)構(gòu):/bin, /sbin, /lib, /lib64, /etc, /mnt, /media, …

ramdisk文件的制作:

  1. mkinitrd /boot/initramfs-(uname -r).img(uname -r)
  2. dracut /boot/initramfs-(uname -r).img(uname -r)

init初始化

/sbin/init --> (/etc/inittab) --> 設(shè)置默認(rèn)運(yùn)行級(jí)別 --> 運(yùn)行系統(tǒng)初始腳本、完成系統(tǒng)初始化 --> (關(guān)閉對(duì)應(yīng)下需要關(guān)閉的服務(wù))啟動(dòng)需要啟動(dòng)服務(wù) --> 設(shè)置登錄終端

  1. 讀取其初始化文件/etc/inittab
  2. 初始運(yùn)行級(jí)別(RUN LEVEL)
  3. 系統(tǒng)初始化腳本
  4. 對(duì)應(yīng)運(yùn)行級(jí)別的腳本目錄
  5. 捕獲某個(gè)關(guān)鍵字順序
  6. 定義UPS電源終端/恢復(fù)腳本
  7. 在虛擬控制臺(tái)生成getty
  8. 在運(yùn)行級(jí)別5初始化X

/etc/inittab

運(yùn)行級(jí)別:為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定

0:關(guān)機(jī)
1:?jiǎn)斡脩裟J?root自動(dòng)登錄), single, 維護(hù)模式
2:多用戶模式趁俊,啟動(dòng)網(wǎng)絡(luò)功能域仇,但不會(huì)啟動(dòng)NFS;維護(hù)模式
3:多用戶模式寺擂,正常模式暇务;文本界面
4:預(yù)留級(jí)別;可同3級(jí)別
5:多用戶模式沽讹,正常模式愿汰;圖形界面
6:重啟

默認(rèn)級(jí)別: 3, 5

切換級(jí)別:init #

查看級(jí)別:runlevel ; who -r

CentOS5的/etc/inittab

每一行定義一種action以及與之對(duì)應(yīng)的process

d:runlevel:action:process

action:

wait:切換至此級(jí)別運(yùn)行一次
respawn:此process終止波势,就重新啟動(dòng)之
initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別曹动;process省略
sysinit:設(shè)定系統(tǒng)初始化方式少办,此處一般為指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1...
l6:6:wait:/etc/rc.d/rc 6

CentOS6的/etc/inittab

設(shè)置系統(tǒng)默認(rèn)的運(yùn)行級(jí)別

/etc/rc.d/rc.sysinit

系統(tǒng)初始化腳本

  1. 設(shè)置主機(jī)名
  2. 設(shè)置歡迎信息
  3. 激活udev和selinux
  4. 掛載/etc/fstab文件中定義的文件系統(tǒng)
  5. 檢測(cè)根文件系統(tǒng)介劫,并以讀寫方式重新掛載根文件系統(tǒng)
  6. 設(shè)置系統(tǒng)時(shí)鐘
  7. 激活swap設(shè)備
  8. 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
  9. 激活lvm及software raid設(shè)備
  10. 加載額外設(shè)備的驅(qū)動(dòng)程序
  11. 清理操作

/etc/rc.d/rcN.d/

關(guān)閉或啟動(dòng)這個(gè)運(yùn)行級(jí)別下的服務(wù)绳军,(注意:關(guān)閉在前哄褒,啟動(dòng)在后)

[root@centos6 ~]# ls /etc/rc.d/rc3.d/
K01smartd          K69rpcsvcgssd      K95firstboot     S13irqbalance        S26udev-post
K02oddjobd         K73winbind         K99rngd          S13rpcbind           S28autofs
K05wdaemon         K74ntpd            S01sysstat       S15mdmonitor         S50bluetooth
K10psacct          K75ntpdate         S02lvm2-monitor  S22messagebus        S55sshd
K10saslauthd       K75quota_nld       S05rdma          S23NetworkManager    S80postfix
K15htcacheclean    K76ypbind          S08ip6tables     S24nfslock           S82abrtd
K15httpd           K84wpa_supplicant  S08iptables      S24rpcgssd           S83abrt-ccpp
K30spice-vdagentd  K87restorecond     S10network       S25blk-availability  S90crond
K50dnsmasq         K88sssd            S11auditd        S25cups              S95atd
K50kdump           K89netconsole      S11portreserve   S25netfs             S99certmonger
K60nfs             K89rdisc           S12rsyslog       S26acpid             S99local
K61nfs-rdma        K92pppoe-server    S13cpuspeed      S26haldaemon

K表示關(guān)閉兴猩,S表示開啟,##表示運(yùn)行次序乘盖,數(shù)字越小焰檩,越先運(yùn)行,數(shù)字越小的服務(wù)订框,通常為被依賴到的服務(wù)

注意:正常級(jí)別下析苫,最后啟動(dòng)一個(gè)服務(wù)S99local沒有鏈接至/etc/rc.d/init.d一個(gè)服務(wù)腳本,而是指向了/etc/rc.d/rc.local腳本

不便或不需寫為服務(wù)腳本放置于/etc/rc.d/init.d/目錄穿扳,且又想開機(jī)時(shí)自動(dòng)運(yùn)行的命令衩侥,可直接放置于/etc/rc.d/rc.local文件中

管理服務(wù)

chkconfig
  • --list [name]:查看服務(wù)在所有級(jí)別的啟動(dòng)或關(guān)閉設(shè)定情形
  • --add name:添加服務(wù)
  • --del name:刪除服務(wù)
  • [--level levels] name <on|off|reset>:指定要設(shè)置的級(jí)別;省略時(shí)表示2345
自定義服務(wù)
[root@centos6 grub]# ls /etc/init.d/
abrt-ccpp         crond         irqbalance      nfs           rdisc        single
abrtd             cups          kdump           nfslock       rdma         smartd
abrt-oops         dnsmasq       killall         nfs-rdma      restorecond  spice-vdagentd
acpid             firstboot     lvm2-lvmetad    ntpd          rngd         sshd
atd               functions     lvm2-monitor    ntpdate       rpcbind      sssd
auditd            haldaemon     mdmonitor       oddjobd       rpcgssd      sysstat
autofs            halt          messagebus      portreserve   rpcidmapd    udev-post
blk-availability  htcacheclean  netconsole      postfix       rpcsvcgssd   wdaemon
bluetooth         httpd         netfs           pppoe-server  rsyslog      winbind
certmonger        ip6tables     network         psacct        sandbox      wpa_supplicant
cpuspeed          iptables      NetworkManager  quota_nld     saslauthd    ypbind

可以直接使用/etc/init.d/SOMESERCICE來啟動(dòng)矛物、關(guān)閉茫死、重啟和查看指定的服務(wù),當(dāng)然也可以使用service命令來管理服務(wù)

xinetd

瞬態(tài)服務(wù)被xinetd進(jìn)程所管理履羞,當(dāng)被管理的服務(wù)被請(qǐng)求時(shí)峦萎,喚醒服務(wù),無請(qǐng)求時(shí)自動(dòng)交給xinetd管理

常見故障

  1. 故障原因:未使用grub-install安裝過grub相關(guān)文件忆首,刪除/boot/grub/中除grub.conf以外的所有文件

    故障現(xiàn)象:?jiǎn)?dòng)不受影響

  2. 故障原因:使用grub-install安裝過grub相關(guān)文件爱榔,刪除/boot/grub/中除grub.conf以外的所有文件

    故障現(xiàn)象:菜單進(jìn)不去,直接提示ERROR 15

    解決辦法:

    1. 進(jìn)入rescue
    2. chroot /mnt/sysimage
    3. grub-install /dev/sda
    4. sync雄卷;exit
    5. reboot
  3. 故障原因:破壞硬盤的前446字節(jié)搓蚪,即破壞grub的stage1階段,dd if=/dev/zero of=/dev/sda bs=1 count=446

    故障現(xiàn)象:菜單進(jìn)不去丁鹉,直接提示ERROR 15

    解決辦法:見2

  4. 故障原因:破壞stage1.5妒潭,dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512

    故障現(xiàn)象:菜單進(jìn)不去,光標(biāo)一直閃爍

    解決辦法:見2

  5. 故障原因:刪除/boot/grub/grub.conf

    故障現(xiàn)象:不進(jìn)菜單揣钦,直接進(jìn)入grub命令行

    解決辦法:見2雳灾,或者直接在grub命令行操作

    1. root (hd0,0)

    2. kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 rhgb quiet selinux=0

    3. initrd /initramfs-2.6.32-696.el6.x86_64.img

    4. boot

      注意:第一步先按照順序掛載上,然后第二部使用tab補(bǔ)全冯凹,看文件就可以判斷出是不是boot目錄

  6. 故障原因:刪除/boot/grub/下的所有文件

    故障現(xiàn)象:菜單進(jìn)不去谎亩,直接提示ERROR 15

    解決辦法:

    1. 進(jìn)入rescue

    2. chroot /mnt/sysimage

    3. grub-install /dev/sda

    4. vim /boot/grub/grub.conf

      default=0
      timeout=5
      title redhat
      root (hd0,0)
      kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet
      initrd /initramfs-2.6.32-696.el6.x86_64.img

    5. exit;reboot

  7. 故障原因:刪除整個(gè)/boot

    故障現(xiàn)象:不進(jìn)入菜單,直接希納是ERROR 15

    解決辦法:

    1. 進(jìn)入rescue

    2. chroot /mnt/sysimage

    3. grub-install /dev/sda

    4. mount /dev/cdrom /media

    5. cp /media/isolinux/vmlinuz /boot/vmlinuz-$(uname -r)

    6. mkinitrd /boot/initramfs-(uname -r).img(uname -r)

    7. vim /boot/grub/grub.conf

      default=0
      timeout=5
      title redhat
      root (hd0,0)
      kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet
      initrd /initramfs-2.6.32-696.el6.x86_64.img

    8. exit;reboot

  8. 故障原因:刪除/etc/fstab宇姚,刪除/etc/init/rcS.conf匈庭,刪除/etc/rc.d/rc.sysinit,刪除/boot下的所有文件

    故障現(xiàn)象:不進(jìn)入菜單,直接希納是ERROR 15浑劳,并且進(jìn)入救援模式無法找到根并進(jìn)行自動(dòng)掛載

    解決辦法:

    1. 進(jìn)入rescue

    2. 編寫/etc/fstab

      UUID=b6d6d6ca-8f04-43a3-84a4-d34d2b2f50d1 /boot ext4 defaults 0 2
      UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f / ext4 defaults 0 1
      UUID=50950a59-83cb-4688-80ec-d9883019fcce /app ext4 defaults 0 0
      UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap swap defaults 0 0

    3. 重新進(jìn)入rescue

    4. chroot /mnt/sysimage

    5. grub-install /dev/sda

    6. 恢復(fù)內(nèi)核文件及ramdisk

      cp /media/isolinux/vmlinuz /boot/vmlinuz-$(uname -r)

      mkinitrd /boot/initramfs-(uname -r).img(uname -r)

    7. vim /boot/grub/grub.conf

      default=0
      timeout=5
      title redhat
      root (hd0,0)
      kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=bfd90cd4-8516-4a60-8f1a-f7c3511a6b3f rhgb quiet
      initrd /initramfs-2.6.32-696.el6.x86_64.img

    8. rpm -qf /etc/init/rcS.conf /etc/rc.d/rc.sysinit

    9. mount /dev/cdrom /media

      cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app

      rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id

      cp etc/init/rcS.conf /etc/init

      cp etc/rc.d/rc.sysinit /etc/rc.d

    10. exit;reboot

  9. 故障原因:基于lvm阱持,將/etc/fstab及/boot下的所有文件刪除

    故障現(xiàn)象:不進(jìn)入菜單,直接希納是ERROR 15魔熏,并且進(jìn)入救援模式無法找到根并進(jìn)行自動(dòng)掛載

    解決辦法:

    1. 進(jìn)入rescue
    2. lvscan;vgchange -ay
    3. 同上
  10. 故障原因:刪除//etc/inittab

    故障現(xiàn)象:一直加載系統(tǒng)

    解決辦法:有備份直接救援模式恢復(fù)即可衷咽,下面是無備份的解決辦法

    1. 進(jìn)入rescue

    2. chroot /mnt/sysimage

    3. rpm -qf /etc/inittab

    4. exit退出chroot模式

    5. mount /dev/sr0 /mnt/source

    6. rpm -ivh --replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm

      rpm2cpio /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab;cp etc/inittab /mnt/sysimage/etc

    7. reboot

自制Linux

  1. 分區(qū)并創(chuàng)建文件系統(tǒng)鸽扁,至少分兩個(gè)區(qū),一個(gè)/boot镶骗,一個(gè)/

    fdisk /dev/sdb
    mkfs.ext4 /dev/sdb1桶现;mkfs.ext4 /dev/sdb2
    
  2. 創(chuàng)建對(duì)應(yīng)目錄并掛載

    mkdir /mnt/sysimage;mount /dev/sdb2 /mnt/sysimage/
    mkdir /mnt/sysimage/boot;mount /dev/sdb1 /mnt/sysimage/boot/
    
  3. 安裝grub

    grub-install --root-directory=/mnt/sysimage /dev/sdb
    
  4. 恢復(fù)內(nèi)核和initramfs文件

    cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/sysimage/boot/
    cp /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/sysimage/boot/
    
  5. 建立grub.conf

    default=0
    timeout=5
    title redhat
    root (hd0,0)
         kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 rhgb quiet selinux=0 init=/bin/bash
         initrd /initramfs-2.6.32-696.el6.x86_64.img
    
  6. 利用腳本復(fù)制bash和相關(guān)命令及相關(guān)庫(kù)文件,如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid等

    #!/bin/bash
    copy_cmd() {
            local cmd_destdir=$destdir$(dirname $(which $1))
            if [ ! -d $cmd_destdir ];then
                    mkdir -pv $cmd_destdir
            fi
            cp -v $(which $1) $cmd_destdir
    }
    
    copy_libfile() {
            ldd $(which $1) |grep -oE "/.* " | while read libfile
            do
                    local lib_destdir=$destdir$(dirname $libfile)
                    local lib_destfile=$destdir$libfile
                    if [ -e $lib_destfile ];then
                            continue
                    elif [ -d $lib_destdir ];then
                            cp -v $libfile $lib_destdir
                    else
                            mkdir -pv $lib_destdir
                            cp -v $libfile $lib_destdir
                    fi
            done
    }
    
    destdir=/mnt/sysimage
    
    if [ ! -d $destdir ];then
            mkdir $destdir
    fi
    while true;do
            echo -ne "\e[33mPlease input a execute command:\e[0m"
            read cmd
            if [ "$cmd" == quit ];then
                    exit
            fi
            which $cmd &> /dev/null || { echo $cmd not exist;continue; }
            copy_cmd $cmd
            copy_libfile $cmd
    done
    
  7. 拷貝網(wǎng)卡模塊文件

    cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysimage/lib64/
    
  8. 創(chuàng)建根下其他目錄

    mkdir /mnt/sysimage/{etc,dev,proc,sys,home,var,mnt,media,root,tmp,lib}
    
  9. chroot /mnt/sysimage;sync

  10. 啟動(dòng)后配置網(wǎng)卡

    insmod /lib64/e1000.ko
    ifconfig eth0 xxx.xxx.xxx.xxx/16
    

內(nèi)核

uname

顯示系統(tǒng)信息鼎姊,常用選項(xiàng):

  • -n:顯示節(jié)點(diǎn)名稱
  • -r:顯示VERSION-RELEASE
  • -a:顯示所有信息

lsmod

顯示由核心已經(jīng)裝載的內(nèi)核模塊骡和,顯示的內(nèi)容來自于:/proc/modules文件

modinfo

顯示模塊的詳細(xì)描述信息,常用選項(xiàng):

  • -n:只顯示模塊文件路徑
  • -p:顯示模塊參數(shù)
  • -a:author
  • -d:description
  • -l:license

modprobe

裝載內(nèi)核模塊相寇,-r選項(xiàng)卸載內(nèi)核模塊

depmod

內(nèi)核模塊依賴關(guān)系文件及系統(tǒng)信息映射文件的生成工具

insmod

裝載指定模塊文件即横,不自動(dòng)解決依賴模塊

rmmod

卸載模塊

編譯內(nèi)核

  1. 安裝開發(fā)包組 yum groupinstall "Development Tools"
  2. 下載源碼包,并解壓到/usr/local/src下裆赵,tar xvf linux-4.17.3.tar.xz -C /usr/local/src
  3. 安裝所需的其他rpm包东囚,yum -y install ncurses-devel elfutils-libelf-devel openssl-devel
  4. 使用make menuconfig啟動(dòng)一個(gè)基于curses的文本窗口界面,可以用來配置內(nèi)核參數(shù)战授,比如啟用NTFS文件系統(tǒng)页藻,會(huì)生成一個(gè).config文件,一般情況下在安裝完操作系統(tǒng)的時(shí)候植兰,會(huì)在其/boot目錄下生成一個(gè)config-VERSION-RELEASE的內(nèi)核參數(shù)配置文件份帐,可以復(fù)制過來作為初始化使用
  5. 使用make [-j 8]來編譯,-j選項(xiàng)用來指定內(nèi)核的數(shù)目
  6. 使用make modules_install來安裝模塊
  7. 使用make install安裝內(nèi)核相關(guān)的文件楣导,然后重啟即可

清理編譯文件

make clean:清理大多數(shù)編譯生成的文件废境,但會(huì)保留config文件等

make mrproper:清理所有編譯生成的文件、config及某些備份文件

make distclean:mrproper筒繁、patches以及編譯器備份文件

卸載內(nèi)核

  1. 刪除/lib/modules/目錄下不需要的內(nèi)核庫(kù)文件
  2. 刪除/usr/src/linux/目錄下不需要的內(nèi)核源碼
  3. 刪除/boot目錄下啟動(dòng)的內(nèi)核和內(nèi)核映像文件
  4. 更改grub的配置文件噩凹,刪除不需要的內(nèi)核啟動(dòng)列表

centos7啟動(dòng)流程

內(nèi)核啟動(dòng)流程

  1. POST,加電自檢
  2. 根據(jù) boot sequence加載啟動(dòng)的硬盤
  3. 加載磁盤的第0個(gè)扇區(qū)第0個(gè)磁道(前512個(gè)字節(jié))毡咏,讀取boorloader驮宴,也就是前446個(gè)字節(jié),執(zhí)行g(shù)rub的第一個(gè)階段呕缭,然后執(zhí)行g(shù)rub的1.5階段堵泽,加載/boot目錄所在分區(qū)的驅(qū)動(dòng),讀取/boot/grub下的內(nèi)容恢总,執(zhí)行g(shù)rub的第二個(gè)階段迎罗,將內(nèi)核和ramdisk讀取到內(nèi)存,借助ramdisk將真正的根掛載

/sbin/init

centos5:SysVinit啟動(dòng)流程的時(shí)候是串行的片仿,即使服務(wù)之間沒有依賴關(guān)系

centos6:Upstart啟動(dòng)服務(wù)的時(shí)候纹安,依賴的服務(wù)之間才是串行的,不依賴的服務(wù)之間是并行的

centos7:Systemd啟動(dòng)服務(wù)的時(shí)候,所有的服務(wù)之前都是并行的钻蔑,如果B服務(wù)依賴于A服務(wù),那么B服務(wù)在啟動(dòng)的時(shí)候奸鸯,A服務(wù)會(huì)主動(dòng)發(fā)送一個(gè)信號(hào)欺騙B服務(wù)自己已經(jīng)啟動(dòng)咪笑,B是能夠正常啟動(dòng)的,雖然它們之間存在依賴關(guān)系娄涩,但是只有在真正的使用B服務(wù)的時(shí)候窗怒,才會(huì)用到A服務(wù)提供到的能力

systemd

系統(tǒng)啟動(dòng)和服務(wù)器守護(hù)進(jìn)程管理器,負(fù)責(zé)在系統(tǒng)啟動(dòng)或運(yùn)行時(shí)蓄拣,激活系統(tǒng)資源扬虚,服務(wù)器進(jìn)程和其他進(jìn)程

特點(diǎn):

  1. 系統(tǒng)引導(dǎo)時(shí)實(shí)現(xiàn)服務(wù)并行啟動(dòng)
  2. 按需啟動(dòng)守護(hù)進(jìn)程
  3. 自動(dòng)化的服務(wù)依賴關(guān)系管理
  4. 同時(shí)采用socket式與D-Bus總線式激活服務(wù)
  5. 系統(tǒng)狀態(tài)快照

unit

unit表示不同類型的systemd對(duì)象,通過配置文件進(jìn)行標(biāo)識(shí)和配置球恤,文件中主要包含了系統(tǒng)服務(wù)辜昵、監(jiān)聽的socket,保存的系統(tǒng)快照以及其他與init相關(guān)的信息

配置文件

/usr/lib/systemd/system:每個(gè)服務(wù)主要的啟動(dòng)腳本設(shè)置咽斧,類似于之前的/etc/init.d/

/run/systemd/system:系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本堪置,比上面目錄優(yōu)先運(yùn)行

/etc/systemd/system:管理員建立的執(zhí)行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能张惹,比上面的目錄優(yōu)先運(yùn)行

類型

可以使用 systemctl -t help查看unit的類型

Service unit: 文件擴(kuò)展名為.service, 用于定義系統(tǒng)服務(wù)
Target unit: 文件擴(kuò)展名為.target舀锨,用于模擬實(shí)現(xiàn)運(yùn)行級(jí)別
Device unit: .device, 用于定義內(nèi)核識(shí)別的設(shè)備
Mount unit: .mount, 定義文件系統(tǒng)掛載點(diǎn)
Socket unit: .socket, 用于標(biāo)識(shí)進(jìn)程間通信用的socket文件,也可在系統(tǒng)啟動(dòng)時(shí)宛逗,延遲啟動(dòng)服務(wù)坎匿,實(shí)現(xiàn)按需啟動(dòng)
Snapshot unit: .snapshot, 管理系統(tǒng)快照
Swap unit: .swap, 用于標(biāo)識(shí)swap設(shè)備
Automount unit: .automount,文件系統(tǒng)的自動(dòng)掛載點(diǎn)
Path unit: .path雷激,用于定義文件系統(tǒng)中的一個(gè)文件或目錄使用,常用于當(dāng)文件系統(tǒng)變化時(shí)替蔬,延遲激活服務(wù),如:spool目錄

systemctl

在centos7中推薦使用systemctl來管理服務(wù)屎暇,當(dāng)然依然兼容之前版本中的service來管理服務(wù)进栽。用法:systemctl COMMAND SERVICENAME.service

systemctl start name.service:?jiǎn)?dòng)服務(wù)

systemctl stop name.service:停止服務(wù)

systemctl restart name.service:重啟服務(wù)

systemctl status name.service:查看服務(wù)狀態(tài)

systemctl try-restart name.service:條件式重啟,已啟動(dòng)才重啟恭垦,否則不做操作

systemctl reload name.service:重載

systemctl mask name.service:禁止自動(dòng)或手動(dòng)啟動(dòng)服務(wù)

systemctl unmask name.service:取消禁止

systemctl enable name.service:開機(jī)啟動(dòng)服務(wù)

systemctl disable name.service:開機(jī)不啟動(dòng)服務(wù)

systemctl is-active name.service:查看某服務(wù)當(dāng)前激活與否的狀態(tài)

systemctl list-units -t service:查看所有已經(jīng)激活的服務(wù)

systemctl list-units -t service -a:查看所有服務(wù)

systemctl list-unit-files --type service:查看所有服務(wù)的開機(jī)自啟狀態(tài)

systemctl is-enabled name.service:查看服務(wù)是否開啟

systemctl list-dependencies name.service:查看服務(wù)依賴關(guān)系

systemctl kill unitname:殺死進(jìn)程

systemctl rescue:切換至緊急救援模式

systemctl emergency:切換至emergency

systemctl halt/poweroff:關(guān)機(jī)

systemctl reboot:重啟

systemctl suspend:掛起

systemctl hibernate:休眠

systemctl hybrid-sleep:休眠并掛起

服務(wù)狀態(tài)

loaded:unit配置文件已處理
active(running):一次或多次持續(xù)處理的運(yùn)行
active(exited):成功完成一次性的配置
active(waitinig):運(yùn)行中快毛,等待一個(gè)事件
inactive:不運(yùn)行
enabled:開機(jī)啟動(dòng)
disabled:開啟不啟動(dòng)
static:開機(jī)不啟動(dòng),但是可以被另一個(gè)啟動(dòng)的服務(wù)激活

service unit格式
[root@centos7 ~]# cat /usr/lib/systemd/system/crond.service 
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target
unit

定義與Unit類型無關(guān)的通用選項(xiàng)番挺,用于提供unit的描述信息唠帝、unit行為以及依賴關(guān)系

Description:描述信息
After:定義unit的啟動(dòng)次序,表示當(dāng)前unit應(yīng)該晚于哪些unit啟動(dòng)玄柏,其功能與Before相反
Requires:依賴到的其它units襟衰,強(qiáng)依賴,被依賴的units無法激活時(shí)粪摘,當(dāng)前unit也無法激活
Wants:依賴到的其它units瀑晒,弱依賴
Conflicts:定義units間的沖突關(guān)系

Service

與特定類型相關(guān)的專用選項(xiàng)

Type:定義影響ExecStart及相關(guān)參數(shù)的功能的unit進(jìn)程啟動(dòng)類型
simple:默認(rèn)值绍坝,這個(gè)daemon主要由ExecStart接的指令串來啟動(dòng),啟動(dòng)后常駐于內(nèi)存中
forking:由ExecStart啟動(dòng)的程序透過spawns延伸出其他子程序來作為此daemon的主要服務(wù)苔悦。原生父程序在啟動(dòng)結(jié)束后就會(huì)終止
oneshot:與simple類似轩褐,不過這個(gè)程序在工作完畢后就結(jié)束了,不會(huì)常駐在內(nèi)存中
dbus:與simple類似玖详,但這個(gè)daemon必須要在取得一個(gè)D-Bus的名稱后把介,才會(huì)繼續(xù)運(yùn)作.因此通常也要同時(shí)設(shè)定BusNname= 才行
notify:在啟動(dòng)完成后會(huì)發(fā)送一個(gè)通知消息。還需要配合 NotifyAccess 來讓 Systemd 接收消息
idle:與simple類似蟋座,要執(zhí)行這個(gè)daemon必須要所有的工作都順利執(zhí)行完畢后才會(huì)執(zhí)行拗踢。這類的daemon通常是開機(jī)到最后才執(zhí)行即可的服務(wù)
EnvironmentFile:環(huán)境配置文件
ExecStart:指明啟動(dòng)unit要運(yùn)行命令或腳本的絕對(duì)路徑
ExecStartPre: ExecStart前運(yùn)行
ExecStartPost: ExecStart后運(yùn)行
ExecStop:指明停止unit要運(yùn)行的命令或腳本
Restart:當(dāng)設(shè)定Restart=1 時(shí),則當(dāng)次daemon服務(wù)意外終止后向臀,會(huì)再次自動(dòng)啟動(dòng)此服務(wù)

Install

定義由”systemctl enable”以及”systemctl disable”命令在實(shí)現(xiàn)服務(wù)啟用或禁用時(shí)用到的一些選項(xiàng)

Alias:別名巢墅,可使用systemctl command Alias.service
RequiredBy:被哪些units所依賴,強(qiáng)依賴
WantedBy:被哪些units所依賴券膀,弱依賴
Also:安裝本服務(wù)的時(shí)候還要安裝別的相關(guān)服務(wù)

注意:對(duì)于新創(chuàng)建的unit文件砂缩,或者修改了的unit文件,要通知systemd重載此配置文件三娩,而后可以選擇重啟:systemctl daemon-reload

運(yùn)行級(jí)別

在systemd中庵芭,運(yùn)行級(jí)別由unit文件中的.target文件來定義

[root@centos7 system]# ll /usr/lib/systemd/system/runlevel?.target
lrwxrwxrwx. 1 root root 15 May 15 12:54 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 May 15 12:54 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 May 15 12:54 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 May 15 12:54 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 May 15 12:54 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 May 15 12:54 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 May 15 12:54 /usr/lib/systemd/system/runlevel6.target -> reboot.target

使用systemctl list-unit-files --type target -all查看所有target的狀態(tài)

使用systemctl list-dependencies graphical.taget查看依賴性

級(jí)別切換:依然可以使用init來切換,也可以使用systemctl isolate name.target來切換

獲取默認(rèn)運(yùn)行級(jí)別:systemctl get-default

設(shè)置默認(rèn)運(yùn)行級(jí)別:systemctl set-default multi-user.target

grub2

在centos7中使用了grub2替代了grub legacy

引導(dǎo)順序

  1. UEFi或BIOS初始化雀监,運(yùn)行POST開機(jī)自檢
  2. 選擇啟動(dòng)設(shè)備双吆,引導(dǎo)裝載程序, centos7是grub2
  3. 加載裝載程序的配置文件:/etc/grub.d/、/etc/default/grub会前、/boot/grub2/grub.cfg
  4. 加載initramfs驅(qū)動(dòng)模塊
  5. 加載內(nèi)核選項(xiàng)
  6. 內(nèi)核初始化好乐,centos7使用systemd代替init
  7. 執(zhí)行initrd.target所有單元,包括掛載/etc/fstab
  8. 從initramfs根文件系統(tǒng)切換到磁盤根目錄
  9. systemd執(zhí)行默認(rèn)target配置瓦宜,配置文件/etc/systemd/system/default.target
  10. systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
  11. systemd啟動(dòng)multi-user.target下的本機(jī)與服務(wù)器服務(wù)
  12. systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
  13. Systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)
  14. systemd執(zhí)行g(shù)raphical需要的服務(wù)

設(shè)置內(nèi)核參數(shù)

開機(jī)grub設(shè)置內(nèi)核參數(shù)蔚万,只影響當(dāng)次啟動(dòng)。在linnux16行后添加 systemd.unit=NAME.target

修復(fù)grub2

修復(fù)grub2:

BIOS:grub2-install /dev/sda
UEFI:grub2-install

修復(fù)配置文件:grub2-mkconfig > /boot/grub2/grub.cfg

調(diào)整默認(rèn)啟動(dòng)內(nèi)核:vim /etc/default/grub

常見故障

  1. 故障原因:默認(rèn)啟動(dòng)級(jí)別被設(shè)置為reboot.target

    故障現(xiàn)象:開機(jī)無限重啟

    解決辦法:

    1. 在grub菜單下按e
    2. 在linux16這一行的最后加上 systemd.unit=multi-user.target临庇,再按下Ctrl+x
    3. 進(jìn)入系統(tǒng)設(shè)置默認(rèn)的運(yùn)行級(jí)別
  2. 故障原因:忘記root口令

    故障現(xiàn)象:進(jìn)不去系統(tǒng)

    解決辦法:

    方法一:

    1. 啟動(dòng)時(shí)任意鍵暫停啟動(dòng)
    2. 按e鍵進(jìn)入編輯模式
    3. 將光標(biāo)移動(dòng)linux16開始的行反璃,改為rw init=/sysroot/bin/sh
    4. 按ctrl+x啟動(dòng)
    5. chroot /sysroot
    6. passwd root
    7. touch /.autorelabel
    8. exit
    9. reboot

    方法二:

    1. 啟動(dòng)時(shí)任意鍵暫停啟動(dòng)
    2. 按e鍵進(jìn)入編輯模式
    3. 將光標(biāo)移動(dòng)linux16開始的行,添加內(nèi)核參數(shù)rd.break
    4. 按ctrl+x啟動(dòng)
    5. mount –o remount,rw /sysroot
    6. passwd root
    7. touch /.autorelabel
    8. exit
    9. reboot
  3. 故障原因:MBR前446字節(jié)被破壞

    故障現(xiàn)象:進(jìn)不去菜單

    解決辦法:

    1. 進(jìn)入rescue
    2. 鍵入1假夺,continue
    3. chroot /mnt/sysimage
    4. grub2-install /dev/sda
    5. exit;reboot
  4. 故障原因:boot目錄缺失

    故障現(xiàn)象:提示進(jìn)入rescue模式

    解決辦法:

    1. 進(jìn)入rescue
    2. chroot /mnt/sysimage
    3. grub2-install /dev/sda
    4. mount /dev/sr0 /mnt
    5. rpm -ivh /mnt/Package/kernel-XXXX --force
    6. grub2-mkconfig > /boot/grub2/grub.cfg
    7. exit;reboot
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淮蜈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子已卷,更是在濱河造成了極大的恐慌梧田,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裁眯,居然都是意外死亡鹉梨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門穿稳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來存皂,“玉大人,你說我怎么就攤上這事司草。” “怎么了泡仗?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵埋虹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我娩怎,道長(zhǎng)搔课,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任截亦,我火速辦了婚禮爬泥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崩瓤。我一直安慰自己袍啡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布却桶。 她就那樣靜靜地躺著境输,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颖系。 梳的紋絲不亂的頭發(fā)上嗅剖,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音嘁扼,去河邊找鬼信粮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趁啸,可吹牛的內(nèi)容都是我干的强缘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼不傅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼欺旧!你這毒婦竟也來了围小?” 一聲冷哼從身側(cè)響起霉颠,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溃睹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體称龙,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡留拾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲫尊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痴柔。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疫向,靈堂內(nèi)的尸體忽然破棺而出咳蔚,到底是詐尸還是另有隱情,我是刑警寧澤搔驼,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布谈火,位于F島的核電站,受9級(jí)特大地震影響舌涨,放射性物質(zhì)發(fā)生泄漏糯耍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一囊嘉、第九天 我趴在偏房一處隱蔽的房頂上張望温技。 院中可真熱鬧,春花似錦扭粱、人聲如沸舵鳞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)系任。三九已至,卻和暖如春虐块,著一層夾襖步出監(jiān)牢的瞬間俩滥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工贺奠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霜旧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓儡率,卻偏偏與公主長(zhǎng)得像挂据,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子儿普,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容