導航:首頁 > 操作系統 > linux扇區大小

linux扇區大小

發布時間:2022-09-08 12:30:39

⑴ 磁碟扇區、IO塊、inode、文件、目錄、硬鏈接與軟鏈接到底是什麼

磁碟扇區、IO塊、inode、文件、目錄、硬鏈接與軟鏈接到底是什麼?
自己理解了一下,記錄一下備忘。

1、扇區
扇區是磁碟碟片上的一個物理劃分,是真真實實存在看得見摸得著的東西。
我們先來看看如何查看一個磁碟的一些信息,可以使用fdisk -l命令查看。我這里有多塊盤,但我只截圖了一個在這里展示,如圖所示,我截取的這塊盤為/dev/sda。

看紅框所示,Unit是單元的意思,sector是扇區的意思。即磁碟的存儲單元是扇區。
從圖中第一行還可以看到這塊盤的大小為599.6G,總共有1171062784個扇區。
從第二行可以看到每個扇區的大小為512bytes。
從第三行可以看到扇區的邏輯大小為512bytes,物理大小為512bytes。

從上圖的幫助文檔來看,扇區的邏輯大小可以修改,最小為512bytes,最大為4096bytes。(不同的系統,扇區的大小不一樣)

除了扇區,磁碟還有哪些物理部件?

2、IO塊(磁碟塊)
我們平時常說磁碟塊,可能會以為它是磁碟的一個物理分區,其實不是的。
扇區是磁碟存儲的最小單元。往大了說,還有磁軌、碟片等。
那既然磁碟塊不是磁碟的物理分區,那麼它是啥呀?
我們或許都有這樣一個常識認知,就是磁碟的IO速率是非常慢的,如果在讀取數據的時候,先讀取了一個扇區的數據,發送給上層應用後,又返回來讀下一個扇區,再發送給上層應用,如此循環反復,上層應用需要與磁碟進行多次交互,這就很浪費時間了;
所以就引入了磁碟塊這么一個概念,它在邏輯層面將多個連續的扇區當作一個整體,然後在讀取數據的時候以邏輯層面上的磁碟塊為單位,將磁碟塊所包含的扇區的數據都一次性讀出來發給上層應用。
所以我們要區分開扇區、磁碟塊這些概念所對應的對象是不同的:
扇區對應的是硬體層面,它是磁碟面的區域劃分,是一個真真實實存在的物理部件;
而磁碟塊對應的是軟體層面,它在邏輯層面將多個連續的扇區當作一個整體。

比如磁碟扇區大小一般為512位元組,而塊大小一般為4096位元組,那麼每一個塊就記錄著連續的8個扇區;數據不是存在塊里的,而是存儲在扇區,而塊記錄哪些扇區是屬於自己的。

如何查看一個IO塊的大小:
1)在root用戶下,執行tune2fs -l /dev/sda | grep "Block Size"

3、inode
每個文件都有數據以及元數據,數據就是文件內容了,它存儲在磁碟的數據區;
而文件元數據包括下圖這些項:
文件大小、文件塊信息、一個塊的大小、文件類型(普通文件、目錄還是符號鏈接)、設備號、索引節點編號、硬鏈接數、文件的訪問時間、文件內容的修改時間、文件屬性的修改時間

每個文件都會對應一個inode,而每個inode都有唯一一個編號,如何查看文件的inode編號呢?
1)可以使用stat filename來查看
2)或者切換到文件所在目錄後,使用ll -i命令來查看,得到的結果中第一列即為文件的inode編號。

我們剛才說到每個索引節點(inode)都有一個唯一的編號,這個編號在每個磁碟上都是有限的,當inode編號分配完了之後,就不能再創建新文件了;
因為文件都需要對應一個唯一的inode,而每個inode又需要對應唯一的編號,而編號又是有限的,所以當分配完了之後,就沒法創建inode了,也就沒法創建文件了。

有時候可能會發現這樣的現象:就是我們想要創建一個新文件,但是發現創建不了了。
於是我們需要排查問題,怎麼排查呢?
首先我們先看下是不是磁碟寫滿了,使用df -hl查看磁碟的使用率,如果達到了100%,那說明盤寫滿了,我們需要刪除些東西以釋放存儲空間;
但是如果我們查看了磁碟使用率之後,發現不是磁碟滿了,磁碟還有很多空閑的空間,那該怎麼辦?
可以聯想到我們上面說過的,看下inode編號是不是用完了,即看下inode編號的使用率?
可以使用df -i來看下磁碟inode編號的使用率,如果發現是inode編號的使用率達到了100%了,那還是得刪除些文件以釋放佔用的inode編號。

會不會有人有疑問?為什麼磁碟空間還有這么多,inode編號就用完了?
這大概率是創建的小文件太多了,你想啊,每個文件都要對應一個inode編號,inode編號是有限的,雖然磁碟空間也有限,但是如果文件系統中是以小文件居多,每個文件就占那麼點空間,inode編號的消耗速率大於磁碟空間的消耗速率,這就極有可能出現上述inode編號用完了,但是磁碟空間還剩餘很多的情況。

4、文件與目錄
linux系統中,一切皆文件。
在linux中怎麼判斷是文件還是目錄呢?
1)通過ll命令判斷:
如果開頭是d,那就是目錄(d即directory的縮寫),如果開頭是-,那就是普通文件。

2)通過stat命令判斷:

5、硬鏈接與軟鏈接
當我們創建一個文件時,該文件的文件名其實就是一個硬鏈接,一個文件至少有一個硬鏈接,但是一個硬鏈接不可以指向多個文件。
硬鏈接有什麼作用:文件系統通過硬鏈接可以找到inode編號,進而找到inode,通過獲取inode里存儲的文件元數據可以讀取到磁碟中存儲的文件數據。
怎麼查看文件的硬鏈接數呢?
1)通過ll查看:
第二列即為硬鏈接數

有沒有注意到,普通文件的硬鏈接數與目錄的硬鏈接數是不一樣的,普通文件只有一個硬鏈接,而目錄則有兩個,這是為什麼?
因為對於目錄文件而言,除了可以通過目錄名獲取到文件的inode之外,還可以通過.(點號)獲取,因為點號表示當前目錄。
所以我們看到目錄的硬鏈接數是2個。
2)還可以通過stat查看文件的硬鏈接數:

軟鏈接是什麼?軟鏈接其實是一個獨立的文件(分類為符號鏈接),它有自己的inode,它的inode里存儲的是它所指向的文件的信息;由於軟鏈接與它指向的文件是兩個獨立的文件,所以刪除軟鏈接並不會影響它指向的文件。
通過ln -s 123 softlink123建立一個軟鏈接指向文件123

通過stat softlink123可以看到該文件是一個符號鏈接,即軟鏈接,它有自己的inode,所以它是一個獨立的文件,由於它的inode里存儲的是它指向的文件的信息,所以通過軟鏈接softlink123也可以讀取到文件123的數據

可以看到通過硬鏈接和軟鏈接讀取到的文件內容是一樣的

⑵ Linux blockdev命令設置文件預讀大小介紹

在命令行調用設備的ioctl函數。在Linux系統中,似乎對設備的直接操作只有ioctl函數了。他接受的參數不是太多,而且都是一一對應的。
blockdev
-
從命令行調用區塊設備控製程序
blockdev
[options]
commands
devices
blockdev
工具允許從命令行調用區塊設備控製程序。
–setro
設置設備為只讀
–getro
讀取設備是否為只讀(成功為1,0則為可讀寫)
–setrw
設置設別為可讀寫
–getss
列印設備的扇區大小,通常是512
–getsize
列印設別的容量,按照一個扇區512個位元組計算
–setra
N
設置預讀扇區(512位元組)為N個.Set
readahead
to
N
512-byte
sectors.
–getra
列印readahead(預讀扇區)
–flushbufs
刷新緩沖
–rereadpt
重讀分區表。
覺得–setro,setrw比較有用,這個mount
-o
ro(rw)是有區別的,mount是在文件系統這個級別上對某個分區掛載為只讀或可讀寫。而blockdev則是在設別這個級別上設置為只讀和可讀寫。
看下面的命令輸出結果就一目瞭然了。
代碼如下:
[root@lancy
~]#
blockdev
–setro
/dev/hda4
[root@lancy
~]#
blockdev
–getro
/dev/hda4
1
[root@lancy
~]#
mount
/dev/hda4
/misc
-o
rw
mount:
block
device
/dev/hda4
is
write-protected,
mounting
read-only
[root@lancy
~]#
umount
/dev/hda4
[root@lancy
~]#
blockdev
–setrw
/dev/hda4
[root@lancy
~]#
blockdev
–getro
/dev/hda4
0
[root@lancy
~]#
mount
/dev/hda4
/misc
-o
rw
[root@lancy
~]#
touch
/misc/one
[root@lancy
~]#
umount
/dev/hda4
[root@lancy
~]#
mount
/dev/hda4
/misc
-o
ro
[root@lancy
~]#
rm
-f
/misc/one
rm:
無法刪除‘/misc/one’:
只讀文件系統

⑶ Unix文件系統的Blocksize究竟多大

自從開始Linux 軟體平台開發,經常遇到「Block Size」。但經常發現此block size非彼block
size。意義不一樣,大小值也不一樣。Open Source的東東有時候也挺煩的。下面是自己的總結。通常Linux的「block
size」指的是1024 bytes,Linux用1024-byte blocks 作為buffer
cache的基本單位。但linux的文件系統的block確不一樣。例如ext3系統,block
size是4096。使用tune2fs可以查看帶文件系統的磁碟分區的相關信息,包括block size。例如:tune2fs -l /dev/hda1 |grep "Block size"Block size: 4096另一個工具mpe2fs也可以。
其實本來這幾個概念不是很難,主要是NND他們的名字都一樣,都叫「Block Size」。1. 硬體上的 block size, 應該是"sector size",linux的扇區大小是512byte2. 有文件系統的分區的block size, 是"block size",大小不一,可以用工具查看3. 沒有文件系統的分區的block size,也叫「block size」,大小指的是1024 byte4. Kernel buffer cache 的block size, 就是"block size",大部分PC是10245. 磁碟分區的"cylinder size",用fdisk 可以查看。
我們來看看fdisk顯示的不同的信息,理解一下這幾個概念:
Disk /dev/hda: 250.0 GB, 250059350016 bytes255 heads, 63 sectors/track, 30401 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System/dev/hda1 * 1 1305 10482381 83 Linux/dev/hda2 1306 1566 2096482+ 82 Linux swap/dev/hda3 1567 30401 231617137+ 83 Linux
8225280就是cylinder size。一共有30401個cylinder。Start和End分別標記的是各個分區的起始cylinder。

第4列顯示的就是以1024為單位的block(這一列最容易把人搞暈)。為什麼「2096482+」有個「+」號呢?因為啊,總size除1024除不
盡,是個約數,表示2096482強!哈哈。搞笑吧,只有opensource的人想得出來這么表示。自從開始Linux 軟體平台開發,經常遇到「Block Size」。但經常發現此block size非彼block size。意義不一樣,大小值也不一樣。Open Source的東東有時候也挺煩的。下面是自己的總結。通常Linux的「block size」指的是1024 bytes,Linux用1024-byte blocks 作為buffer
cache的基本單位。但linux的文件系統的block確不一樣。例如ext3系統,block
size是4096。使用tune2fs可以查看帶文件系統的磁碟分區的相關信息,包括block size。例如:tune2fs -l /dev/hda1 |grep "Block size"Block size: 4096另一個工具mpe2fs也可以。
其實本來這幾個概念不是很難,主要是NND他們的名字都一樣,都叫「Block Size」。1. 硬體上的 block size, 應該是"sector size",linux的扇區大小是512byte2. 有文件系統的分區的block size, 是"block size",大小不一,可以用工具查看3. 沒有文件系統的分區的block size,也叫「block size」,大小指的是1024 byte4. Kernel buffer cache 的block size, 就是"block size",大部分PC是10245. 磁碟分區的"cylinder size",用fdisk 可以查看。
我們來看看fdisk顯示的不同的信息,理解一下這幾個概念:
Disk /dev/hda: 250.0 GB, 250059350016 bytes255 heads, 63 sectors/track, 30401 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System/dev/hda1 * 1 1305 10482381 83 Linux/dev/hda2 1306 1566 2096482+ 82 Linux swap/dev/hda3 1567 30401 231617137+ 83 Linux
8225280就是cylinder size。一共有30401個cylinder。Start和End分別標記的是各個分區的起始cylinder。

第4列顯示的就是以1024為單位的block(這一列最容易把人搞暈)。為什麼「2096482+」有個「+」號呢?因為啊,總size除1024除不
盡,是個約數,表示2096482強!哈哈。搞笑吧,只有opensource的人想得出來這么表示。

⑷ Linux磁碟組成與分區

先說明一下磁碟的物理組成,整顆磁碟的組成主要有:
圓形的碟片(主要記錄數據的部分);
機械手臂,與在機械手臂上的磁頭(可讀寫碟片上的數據);
主軸馬達,可以轉動碟片,讓機械手臂的磁頭在碟片上讀寫數據。
從上面我們知道數據儲存與讀取的重點在於碟片,而碟片上的物理組成則為:
扇區(Sector)為最小的物理儲存單位,且依據磁碟設計的不同,目前主要有 512Bytes
與 4K 兩種格式;
將扇區組成一個圓,那就是柱面(Cylinder);
早期的分區主要以柱面為最小分區單位,現在的分區通常使用扇區為最小分區單位(每
個扇區都有其號碼喔,就好像座位一樣);
磁碟分區表主要有兩種格式,一種是限制較多的 MBR 分區表,一種是較新且限制較少的
GPT 分區表。
MBR 分區表中,第一個扇區最重要,裡面有:(1)主要開機區(Master boot record,
MBR)及分區表(partition table), 其中 MBR 佔有 446 Bytes,而 partition table 則占
有 64 Bytes。
GPT 分區表除了分區數量擴充較多之外,支持的磁碟容量也可以超過 2TB。
至於磁碟的文件名部份,基本上,所有實體磁碟的文件名都已經被模擬成 /dev/sd[a-p] 的格
式,第一顆磁碟文件名為 /dev/sda。 而分區的文件名若以第一顆磁碟為例,則為 /dev/sda[1-
128] 。除了實體磁碟之外,虛擬機的磁碟通常為 /dev/vd[a-p] 的格式。 若有使用到軟體磁碟
陣列的話,那還有 /dev/md[0-128] 的磁碟文件名。使用的是 LVM 時,文件名則為
/dev/VGNAME/LVNAME 等格式。

⑸ linux 如何看系統扇區大小

blockdev --getss xxx
xxx表示你的分區或者物理盤,比如 /dev/sda

⑹ linux為什麼只有4個主分區

MBR(Master Boot Recorder)主要開機扇區,放置硬碟的信息。MBR 可以說是整個硬碟最重要的地方了,因為在 MBR 裡面記錄了兩個重要的東西,分別是:開機管理程序,與磁碟分區表 ( partition table )。所以我們所做的硬碟分區,也就是在修改partition table。
由於這個 MBR 區塊的容量有限,所以,當初設計的時候,就只有設計成 4 個分區紀錄(這個說法不太准確,下文有詳細說明),這些分區記錄就被稱為 Primary ( 主分區 ) 及 Extended ( 擴展分區 ) ,也就是說,一顆硬碟最多可以有 4 個 Primary + Extended 的扇區,其中,Extended 只能有一個,因此,你如果要分區成四塊磁碟分區的話,那麼最多就是可以:
P + P + P + P
P + P + P + E
的情況來分區了。需要特別留意的是,如果上面的情況中, 3P +E 只有三個『可用』的磁碟,如果要四個都『可用』,就得分區成 4P 了!( 因為 Extended 不能直接被使用,還需要分區成 Logical 才行)
思考一:如果我要將我的大硬碟暫時分區成四個 partition ,同時,還有其它的空間可以讓我在未來的時候進行規劃,那麼該如何分區?
由剛剛的說明,我們可以知道, Primary + Extended 最多隻能有四個 partition,而如果要超過 5 個 partition 的話,那麼就需要 Extended 的幫忙。因此,在這個例子中,我們千萬不能分區成四個 Primary 為什麼呢?假如您是一個 20 GB 的硬碟,而 4 個 primary 共用去了 15 GB ,您心想還有 5 GB 可以利用對吧?錯!剩下的 5 GB 完全不能使用,這是因為已經沒有多餘的 partition table 紀錄區可以記錄了,因此也就無法進行額外的分區,當然啰,空間也就被浪費掉了!因此,請千萬注意,如果您要分區超過 4 槽以上時,請記得一定要有 Extended 分區區,而且必須將所有剩下的空間都分配給 Extended ,然後再以 logical 的分區區來規劃 Extended 的空間。
思考二:我可不可以僅分區 1 個 Primary 與 1 個 Extended 呢?
當然可以!基本上, Logical 可以有 64 個,因此,你可以僅分區一個主分區,並且將所有其它的分區都給 Extended ,利用 Logical 分區來進行其它的 partition 規劃即可!
思考三:假如我的硬碟安裝在 IDE 1 的 Master ,並且我想要分區成 6 個可以使用的硬碟扇區,那麼每個磁碟在 Linux 底下的代號為何?
說明:
由於硬碟在 Primary + Extended 最多可以有四個,因此,在 Linux 底下,已經將 partition table 1 ~ 4 先留下來了,如果只用了 2 個 P + E 的話,那麼將會空出兩個 partition number 呦!再詳細的說明一下,假設我將四個 P + E 都用完了。其中Extended /dev/hda4包括三個邏輯分區。
實際可以使用的是 /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda5, /dev/hda6, /dev/hda7 這六個 partition!至於 /dev/hda4 這個 Extended 扇區本身僅是用來規劃出讓 Logical 可以利用的磁碟空間而已!
那麼萬一我只想要分區 1 個 Primary 與 1 個 Extended 呢?
因為 1~4 號已經被預留下來了,所以第一個 Logical 的代號由 5 號開始計算起來,而後面在被規劃的,就以累加的方式增加磁碟代號啰!而其中 /dev/hda3, /dev/hda4 則是空的,被保留下來的代號。
這個問題,結合歷史來說會說得比較准確。為什麼最多隻可以分四個主要分區,並不是單由操作系統所決定的。
第一,為什麼一個扇區只有512位元組,為什麼不是1024位元組呢?
首先,我想說一個扇區是多少位元組是可以自己(硬碟生產廠家)定義的,可以是1024位元組的。所以說,一個扇區是512位元組並不是理論值,而是習慣值。也就是一個扇區的大小為512位元組對於硬碟的生產廠家來說都是習慣的這樣定義了,誰也不想更改這種習慣。
第二,硬碟的第一扇區可以分成三個部分:第一部分MBR,需要佔用446位元組,第二部分DPT,需要佔用64位元組,這是因為一個分區表需要佔用16位元組,64/16=4,所以剛好能存放四個分區的表,這就是為什麼只能分四個分區。還有兩個位元組就用來存放結束標志。這樣
446+64+2=512位元組。
對硬碟加密其實就是改寫最後兩個位元組的結束標志。
試想如果當初硬碟廠家將一個扇區設置成1024位元組,還是只能分四個分區嗎?邏輯驅動器也需要分區表,它存放在擴展分區的第一扇區,所以邏輯驅動器也不是隨便想分多少就分多少的。

⑺ linux系統中block size最大為多少

1、默認創建表空間時BLOCKSIZE 是8k,文件最大是32G2、可以把BLOCKSIZE設置為16k,SQL〉alter system set db_16k_cache_size=34603008;這樣一個表空間datafile最大可以到64G3、可以把BLOCKSIZE設置為32k,這樣一個表空間datafile最大可以到128G

⑻ Linux系統啟動及定製過程

CentOS的啟動流程總體順序如下:

POST --> Boot Sequence --> bootloader(MBR) --> Kernel --> 載入rootfs --> switchroot --> /sbin /init --> (配置文件:/etc/inittab, /etc/init/*.conf) --> 根據init配置文件設置默認運行級別 --> 運行系統初始化腳本/etc/rc.d/rc.sysinit,完成系統初始化 --> 開啟或關閉用戶選定的對應運行級別下所對應的服務 --> 啟動終端,列印登錄提示符。

註:前面加粗部分代表內核空間的系統啟動流程,後面未加粗部分代表用戶空間的系統啟動流程。

第一步:硬體啟動過程

POST加電自檢

主要實現的功能是檢測各個外圍硬體設備是否存在而且能夠正常運行起來,實現這一自檢功能的是固化在主板上的ROM(主要代表為CMOS)晶元上的BIOS(Basic Input/Output System)程序;例如BIOS會檢測CPU、Memory以及I/O設備是否能夠正常運行,如果是個人計算機的話可能還會檢測一下顯示器。只要一通電,CPU就會自動去載入ROM晶元上的BIOS程序,是這樣來實現的。而檢測完成之後就進行硬體設備的初始化。

選擇啟動設備以載入MBR

主要實現的功能是選擇要啟動的硬體設備,選擇了之後就可以讀取這個設備上位於MBR里頭的bootloader了。這一步的實現是這樣的:根據BIOS中對啟動順序的設定,BIOS自己會依次掃描各個引導設備,然後第一個被掃描到具有引導程序(bootloader)的設備就被作為要啟動的引導設備。

MBR(Main Boot Record),是硬碟的0柱面,0磁軌、1扇區(第一個扇區),稱為主引導扇區,也稱為主引導記錄。它由三部分組 成:主引導程序(BootLoader)、硬碟分區表DPT(Disk Partition table)和硬碟有效標志(55AA)。
註:硬碟默認一個扇區大小為512位元組。
第一部分,主引導程序(BootLoader)佔446個位元組,負責從活動分區中裝載,並運行系統引導程序。
第二部分,硬碟分區表DPT佔64個位元組,有4個分區表項,每個分區表項佔16個位元組,硬碟中分區有多少以及每一個分區的大小都記 錄在其中。
第三部分,硬碟有效標志,佔2個位元組,固定為55AA。如果這個標志位0xAA55,就認為這個是MB

第二步:GRUB引導階段

不同的系統有不同的主引導程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系統)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。GRUB程序載入執行並引導kernel(內核)程序,其中有三個階段,Grub引導階段的文件都在/boot/grub/目錄下。

stage1: 這一階段執行的就是系統安裝時預先寫入到MBR的Bootloader程序,即是存放在MBR的前446位元組里的程序。它的任務僅是讀取(載入)硬碟的0柱面,0磁軌,2扇區的內容(/boot/grub/stage1)並執行。

stage1.5: 這一階段是Stage1階段和Stage2階段的橋梁,功能是載入stage2所在分區的文件系統驅動,讓stage1中的bootloader能識別stage2所在分區的文件系統,此後grub程序便有能力去訪問/boot/grub/stage2。

stage2: 這一階段讀取並解析grub的配置文件/boot/grub/grub.cnf,根據配置文件載入內核鏡像到內存中,通過initrd程序建立虛擬根文件系統,最後調用(轉交)內核。

第三步:內部引導階段

載入內核,核心開始解壓,啟動一些最核心的程序。為了讓內核足夠的輕小,硬體驅動並沒放在內核文件裡面。系統僅探測可識別到的所有硬體設備,載入硬體驅動程序,即載入真正的根文件系統所在設備的驅動程序(有可能會藉助於ramdisk載入驅動),以只讀方式掛載根文件系統,運行用戶空間的第一個應用程序:/sbin/init。

第四步:init初始化階段(系統初始化階段)

雖然CentOS 5、CentOS 6以及CentOS 7的/etc/init配置文件內容各不相同,但總體的啟動流程相同:/sbin/init --> 根據/etc/inittab配置文件設置默認運行級別 --> 運行系統初始化腳本/etc/rc.d/rc.sysinit,完成系統初始化 --> 關閉或啟動用戶選定的默認運行級別所對應的服務 。

對於CentOS 5來說,初始化程序init是SysV init,其配置文件為:/etc/inittab; 對於CentOS 6來說,初始化程序init是upstart,其配置文件為:/etc/inittab, /etc/init/ .conf,也就是upstart將配置文件拆分成多個,在/etc/init/目錄下以conf結尾的都是upstart風格的配置文件,而/etc/inittab僅用於設置默認運行級別; 對於CentOS 7來說,初始化程序init是systemd,其配置文件:/usr/lib/system/systemd/, /etc/systemd/system/

具體執行過程:/sbin/init程序會讀取/etc/inittab文件確認運行級別,然後執行/etc/rc.d/rc腳本,根據確認的運行級別啟動對應/etc/rc.d/rc#.d/目錄下的服務(#為0~6),與此同時執行系統初始化腳本/etc/rc.sysinit(軟鏈接,指向/etc/rc.d/rc.sysinit),還會載入/etc/rc.local(軟鏈接,指向/etc/rc.d/rc.local文件)用戶自定義服務(腳本)。

CentOS7中初始化進程變為了systemd,systemd即為system daemon,是Linux下的一種init軟體,開發目標是提供更優秀的框架以表示系統服務間的依賴關系,並依此實現系統初始化時服務的並行啟動,同時達到降低Shell系統開銷的效果,最終代替現在常用的System V與BSD風格的init程序。與多數發行版使用的System V風格的init相比,systemd採用了以下的新技術:A.採用Socket激活式與匯流排激活式服務,以提高相互依賴的各服務的並行運行性能;B.用Cgroup代替PID來追蹤進程,即使是兩次fork之後生成的守護進程也不會脫離systemd的控制。

第五步:啟動終端

根據前面獲取的運行級別來啟動終端,mingetty程序是用於啟動終端的,它會調用登錄程序login,這樣就能顯示出登錄提示符了,類似mingetty這種用於打開終端的程序還有getty等。而如果默認運行級別為5,則會打開圖形界面。

第一步:硬體啟動過程

這一步和CentOS6差不多,詳細請看1.1內容。

第二步:GRUB引導階段

從這一步開始,CentOS6和CentOS7的啟動流程區別開始展現出來了。CentOS7的主引導程序使用的是grub2,執行過程是先載入boot.img、core.img兩個鏡像,再載入MOD模塊文件,把grub2程序載入執行,接著解析配置文件/boot/grub/grub.cfg,根據配置文件載入內核鏡像到內存,之後構建虛擬根文件系統,最後轉到內核。

CentOS7中使用命令進行配置,而不直接去修改配置文件了。grub.cfg配置文件開頭注釋部分說明了由/etc/grub.d/目錄下文件和/etc/default/grub文件組成。改好配置後都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,將配置文件重新生成。

第三步:內部引導階段

這一步與CentOS6也差不多,載入驅動,切換到真正的根文件系統,唯一不同的是執行的初始化程序變成了/usr/lib/systemd/systemd。

第四步:init初始化階段(系統初始化階段)

CentOS7中我們的初始化進程變為了systemd。執行默認target配置文件/etc/systemd/system/default.target(這是一個軟鏈接,與默認運行級別有關)。然後執行sysinit.target來初始化系統和basic.target來准備操作系統。接著啟動multi-user.target下的本機與伺服器服務,並檢查/etc/rc.d/rc.local文件是否有用戶自定義腳本需要啟動。最後執行multi-user下的getty.target及登錄服務,檢查default.target是否有其他的服務需要啟動。

注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目錄下的graphical.target或multiuser.target。而graphical.target依賴multiuser.target,multiuser.target依賴basic.target,basic.target依賴sysinit.target,所以倒過來執行。

unit對象:unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其他與init相關的信息。(也就是CentOS6中的伺服器啟動腳本)

第五步:啟動終端

systemd執行sysinit.target
systemd啟動multi-user.target下的本機與伺服器服務
systemd執行multi-user.target下面的/etc/rc.d/rc.local
Systemd執行multi-user.target下的getty.target及登錄服務
getty.target是啟動終端的systemd對象。如果到此步驟,系統沒有指定啟動圖形桌面,到此就可以結束了,如果需要啟動圖形界面,要在此基礎上啟動桌面程序。

從 CentOS 7 版本之後,系統開始用 systemd 實現init進程,系統啟動和伺服器守護進程管理器功能,負責在系統啟動或運行時,激活系統資源,伺服器進程和其它進程。

unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其它與init相關的信息。

3.2 system unit文件格式

/usr/lib/systemd/system:發行版打包者使用,每個服務最主要的啟動腳本設置,類似於之前的/etc/init.d/

/etc/systemd/system:系統管理員和用戶使用,管理員建立的執行腳本,類似於/etc/rcN.d/Sxx的功能,比上面目錄優先運行

/lib/systemd/system::ubutun的對應目錄

/run/systemd/system:系統執行過程中所產生的服務腳本,比上面目錄優先運行

unit 格式說明:

service unit file文件通常由三部分組成:

Unit段的常用選項:

Service段的常用選項:

Install段的常用選項:

注意:對於新創建的unit文件,或者修改了的unit文件,要通知systemd重載此配置文件,而後可以選擇重啟。

首先在啟動界面按e編輯啟動參數,

將ro參數更改為rw init=/sysroot/bin/sh,按ctr + x啟動系統

按下圖執行命令更改root密碼

閱讀全文

與linux扇區大小相關的資料

熱點內容
ps中擴展功能在文件夾的什麼位置 瀏覽:899
雙極壓縮機為什麼要先高壓 瀏覽:523
蘋果手機伺服器填什麼 瀏覽:828
android移動動畫效果 瀏覽:680
電子和伺服器是什麼意思 瀏覽:691
phpurl中文亂碼問題 瀏覽:893
程序員那麼可愛大結局陸漓產子 瀏覽:538
java如何從雲伺服器讀取本地文件 瀏覽:923
壓縮空氣軟管製作方法 瀏覽:911
天河三號演算法 瀏覽:924
php隊列教程 瀏覽:632
洪水命令 瀏覽:529
安卓怎麼弄成蘋果在線 瀏覽:435
谷歌web伺服器地址 瀏覽:898
安卓鎖屏圖片如何刪除 瀏覽:719
python3多進程編程 瀏覽:714
證明代碼是程序員寫的 瀏覽:397
演算法錯誤發現辦法 瀏覽:410
河南省醫院掛號是哪個app 瀏覽:629
冬日戀歌哪個APP能看 瀏覽:673