1. 程式人生 > >CentOS6與CentOS7的差異對比

CentOS6與CentOS7的差異對比

啟動流程

CentOS6啟動流程
這裡寫圖片描述

1.post加電自檢

這個過程是開機後,BIOS或UEFI進行硬體檢查的階段

2.MBR引導

自檢硬體沒有問題時候,這裡以BIOS為例,BIOS將會直接去找硬碟的第一個扇區,找到前446位元組,將MBR載入到記憶體中,MBR將告訴程式下一階段去哪裡找系統grub引導。此階段屬於grub的第一階段。grub還有1.5階段和2階段。

3.GRUB引導

grub第1.5和2階段,資訊預設存放在扇區中,如果使用grub-install生成的2階段的檔案是存放在/boot分割槽中的。
為了載入核心系統,不得不載入/boot分割槽,而載入/boot分割槽,需要有/boot分割槽的驅動,/boot分割槽驅動是放在/boot分割槽中的,啊,我們好像進入了死迴圈了,Linux是怎麼解決的呢?就是靠放在1.5階段中的資料,是放在第一個扇區後的後續扇區中,具體佔用多少位元組,不太清楚,只知道1.5階段和2階段總共27個扇區。

stage1.5:

mbr之後的扇區,識別stage2所在的分割槽上的檔案系統

stage2:

開機啟動的時候看到的Grub選項、資訊,還有修改GRUB背景等功能都是stage2提供的,stage2會去讀入/boot/grub/grub.conf或者menu.lst等配置檔案

4.讀取grub.conf檔案

讀取grub.conf檔案以確定核心啟動的引數,準備啟動核心

5.啟動核心

載入核心,核心開始解壓縮,啟動一些最核心的程式。
因為為了讓核心足夠輕小,硬體驅動並沒有放在核心檔案裡面,我們可以看到核心很小,才4M左右,我們可以想象Windows中的驅動,安裝系統時候還需要使用驅動軟體下載好長時間呢
因此需要使用/initramfs-2.6.32-696.el6.x86_64.img來驅動硬體

[root@CentOS6 ~]# ll -h /boot/vmlinuz-2.6.32-696.el6.x86_64
-r-xr-xr-x. 1 root root 4.1M Jul 8 21:06 /boot/vmlinuz-2.6.32-696.el6.x86_64

6.載入偽檔案系統(ramdisk),

核心已將啟動起來了,再呼叫ramdisk檔案,嘗試驅動所有的硬體裝置,到這一步,核心起來了,所有驅動也裝上了,因此後面的啟動就可以交給程式了

7.啟動init程序

grub中預設指定init=/sbin/init程式,可以在grub.conf中kernel行自定義執行程式init=/bin/bash,此時可以繞過下面步驟直接進入bash介面。
核心原始碼檔案中顯示996行左右,規定了init啟動的順序,/sbin/init->/etc/init->/bin/init->/bin/sh,/bin/bash沒有寫,應該是和/bin/sh一樣吧

(1)讀取/etc/inittab檔案

inittab檔案裡面定義了系統預設執行級別,這一步做了一些工作如下:

a)初始執行級別(RUN LEVEL)
b)系統初始化指令碼
c)對應執行級別的指令碼目錄
d)定義UPS電源終端/恢復指令碼
e)在虛擬控制檯生成getty,以生成終端
f)在執行級別5初始化X

(2)執行/etc/rc.d/rc.sysinit程式

系統初始化一些指令碼,主要完成以下工作

a)設定主機名
b)設定歡迎資訊
c)啟用udev和selinux可以在grub.conf中,kernel行新增selinux=0以關閉selinux
d)掛載/etc/fstab檔案中定義的檔案系統
e)檢測根檔案系統,並以讀寫方式重新掛載根檔案系統
f)設定系統時鐘
g)啟用swap裝置
h)根據/etc/sysctl.conf檔案設定核心引數
i)啟用lvm及software raid裝置
j)載入額外裝置的驅動程式
k)清理操作
(3)/etc/rc#.d/檔案(各種服務)

裡面定義的是各種服務的啟動指令碼,可以ls檢視,S開頭代表開機啟動的服務,K開頭的是關機要執行的任務。#代表數字,一個數字代表一個執行級別,共7個執行級別,這裡就不多說了

(4)/etc/rc.d/rc.local檔案

這裡面可以自定義開機啟動的命令。

8.執行/bin/login

執行/bin/login程式,等待使用者登入

CentOS7啟動流程

CentOS7和CentOS6啟動流程差不多,只不過到init程式時候,改為了systemd,因此詳細解釋一下systemd後的啟動流程

1.uefi或BIOS初始化,開始post開機自檢

2.載入mbr到記憶體

3.GRUB階段

4.載入核心和inintamfs模組

5.核心開始初始化,使用systemd來代替centos6以前的init程式

(1)執行initrd.target

包括掛載/etc/fstab檔案中的系統,此時掛載後,就可以切換到根目錄了

(2)從initramfs根檔案系統切換到磁碟根目錄

(3)systemd執行預設target配置

centos7表面是有“執行級別”這個概念,實際上是為了相容以前的系統,每個所謂的“執行級別”都有對應的軟連線指向,預設的啟動級別時/etc/systemd/system/default.target,根據它的指向可以找到系統要進入哪個模式
模式:

0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
(4)systemd執行sysinit.target

有沒有很眼熟?是的,在CentOS6上是被叫做rc.sysint程式,初始化系統及basic.target準備作業系統

(5)systemd啟動multi-user.target下的本機與伺服器服務

(6)systemd執行multi-user.target下的/etc/rc.d/rc.local

6.Systemd執行multi-user.target下的getty.target及登入服務

getty.target我們也眼熟,它是啟動終端的systemd物件。如果到此步驟,系統沒有被指定啟動圖形桌面,到此就可以結束了,如果要啟動圖形介面,需要在此基礎上啟動桌面程式

7.systemd執行graphical需要的服務

CentOS6,7啟動區別

系統啟動和伺服器守護程序管理器,它不同於centos5的Sysv init,centos6的Upstart(Ubuntu製作出來),systemd是由Redhat的一個員工首先提出來的,它在核心啟動後,服務什麼的全都被systemd接管,kernel只是用來管理硬體資源,相當於核心被架空了,因此linus很不滿意Redhat這種做法。

Sysv init執行程式順序:
這裡寫圖片描述

主要的區別就在這了。

桌面系統

[CentOS6] GNOME 2.x
[CentOS7] GNOME 3.x(GNOME Shell)

檔案系統

[CentOS6] ext4(Fourth EXtended filesystem)
[CentOS7] xfs
1.實際測試Ext4的單個目錄檔案超過200W個,效能下降的就比較厲

2.Ext4 的inode 個數限制(32位數)最多隻能有大概40多億檔案。而且Ext4的單個檔案大小最大隻能支援到16T(4K block size) 的話,這些至少對於目前來說已經是瓶頸了…
3.XFS使用64位管理空間,最大支援8EB減1位元組的單個檔案系統,實際部署時取決於宿主作業系統的最大塊限制。對於一個32位Linux系統,檔案和檔案系統的大小會被限制在16TB
1024M=1G
1024G=1T
1024T=1PB
1024PB=1EB
ZB
YB
NB
DB

核心版本

[CentOS6] 2.6.x-x
[CentOS7] 3.10.x-x

啟動載入器

[CentOS6] GRUB Legacy (+efibootmgr)
[CentOS7] GRUB2

防火牆

[CentOS6] iptables
[CentOS7] firewalld

預設資料庫

[CentOS6] MySQL
[CentOS7] MariaDB

檔案結構

[CentOS6] /bin, /sbin, /lib, and /lib64在/下
[CentOS7] /bin, /sbin, /lib, and /lib64移到/usr下

主機名

[CentOS6] /etc/sysconfig/network
[CentOS7] /etc/hostname

時間同步

[CentOS6]
ntp ntpq -p

[CentOS7]
chrony chronyc sources

修改時間

[CentOS6]
vim/etc/sysconfig/clockZONE=Asia/TokyoUTC=fales sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

[CentOS7]
timedatectlsettimezoneAsia/Tokyo timedatectl status

修改地區

[CentOS6]
vim/etc/sysconfig/i18nLANG=jaJP.utf8 /etc/sysconfig/i18n
$ locale

[CentOS7]
localectlsetlocaleLANG=jaJP.utf8 localectl status

服務相關

1)啟動停止
[CentOS6]
serviceservicenamestart service service_name stop
$ service sshd restart/status/reload

[CentOS7]
systemctlstartservicename systemctl stop service_name
$ systemctl restart/status/reload sshd

2)自啟動
[CentOS6]
$ chkconfig service_name on/off

[CentOS7]
systemctlenableservicename systemctl disable service_name

3)服務列表
[CentOS6]
$ chkconfig –list

[CentOS7]
systemctllistunitfiles systemctl –type service

4)強制停止
[CentOS6]
$ kill -9

[CentOS7]
$ systemctl kill –signal=9 sshd

網路

1)網路資訊
[CentOS6]
netstat netstat -I
$ netstat -n

[CentOS7]
ipn ip -s l
$ ss

2)IP地址MAC地址
[CentOS6]
$ ifconfig -a

[CentOS7]
$ ip address show

3)路由
[CentOS6]
routen route -A inet6 -n

[CentOS7]
iprouteshow ip -6 route show

重啟關閉

1)關閉
[CentOS6]
$ shutdown -h now

[CentOS7]
poweroff systemctl poweroff

2)重啟
[CentOS6]
reboot shutdown -r now

[CentOS7]
reboot systemctl reboot

3)單使用者模式
[CentOS6]
$ init S

[CentOS7]
$ systemctl rescue

4)啟動模式
[CentOS6]
[GUICUI]
vim/etc/inittabid:3:initdefault:[CUIGUI] startx

[CentOS7]
[GUICUI]
systemctlisolatemultiuser.target[CUIGUI]systemctl isolate graphical.target
預設
systemctlsetdefaultgraphical.target systemctl set-default multi-user.target
當前
$ systemctl get-default