Linux系統管理
磁盤分區及文件系統管理
RAID
LVM:能夠實現磁盤邊界的動態管理
網絡屬性管理
程序包管理:程序包的增刪查改
sed 和awk
進程查看和管理
內核管理:內核的組成部分,內核的編譯安裝
系統啓動流程
Linux內核的定製,編譯內核,busybox
系統安裝:kickstart,dhcp,pxe
shell腳本編程
Linux磁盤及文件系統管理:
整個操作系統的組成部分:硬件和軟件
整個操作系統的組成層次:最底層爲硬件設備(這也是我們計算機能夠運行的基礎),在硬件設備上馮諾依曼體系定義了計算機的五大部件:
CUP:運算器和控制器,他們被整合在一起,有一個硬件部件來提供;
存儲器:這裏是指主存,又叫做內存設備,我們稱之爲ram,它是一個可編址的存儲單元
尋址總線:
在我們的計算機上多個硬件部件,他們之間爲了能夠彼此間通信,我們需要使用線纜將其連接起來,比如說在主板上,有cpu的插槽,這個插槽我們稱之爲“cpu socket”
然後我們還有內存設備,cpu需要跟內存進行通信,二者之間就需要有線纜將其連接起來,cpu和內存之間的線纜,我們稱之爲“前端總線”,這就是FSB的連接。
計算機除了CPU和內存之外,還有很多的I/O設備,但是對於計算機來講,他的核心部件其實也就是隻有CPU和內存。其他的I/O設備都是爲了完成給CPU和內存數據的輸入輸出的。
在衆多的I/O設備中,最典型的的,最根本的應該有四個
非交互式環境下:的設備有兩個
交互式環境下:設備有四個
設備有:外存(用來實現持久存儲的,因爲內存叫PAM,他的每一次存儲都做重新充電的,因爲每一次對內存的讀操作以後,他會把內存中的電荷帶走了,也就意味着內存中的數據沒法保存下來,我們需要進行不斷的刷新和充電,因此一旦斷電,內存中的數據將不復存在,爲了我們的系統的數據能夠永久存儲,所以我們需要一個輔存,這個輔存主要是實現持久存儲的。輔存斷電以後他的數據依然存在,所以叫持久存儲。)
網卡:網卡也是在交互式環境下重要的I/O設備,對於服務器來講,網卡就更加重要了,因爲網卡是服務器向外提供服務的根本的服務口。
外存和網卡是服務器上最爲常見的I/O這兩個設備既能輸入也能輸出的I/O設備
除了外存和網卡以外,如果是一個交互式的平臺,還應該有兩個另外的硬件設備,分別是顯示器和鍵盤
上面提到的這些設備,計算機是怎樣連接起來的?
這麼多的I/O設備,我們需要一些被稱爲bus總線的東西,將這些設備連接起來,但是CPU需要跟每一個設備打交道,那麼難道我們就給CPU與這些設備之間單獨的挨個連一根線嗎,那就太麻煩了,所以早期的時候,計算機是通過橋設備,像北橋,南橋這個設備進行連接,現在的服務器架構上,這些東西已經被拋棄了,像北橋,南橋這樣經典的架構體系結構是比較理解的。多以對於CPU而言,他將自己的連接機制,一併連接到北橋上,任何其他的I/O設備,告訴I/O都可以直接連接在北橋上。通過北橋彙總以後,再跟CPU連接。這是因爲CPU的宿舍非常快,而各種I/O設備的速度都比較慢,所以這些I/O設備通過北橋彙總以後,連接到CPU上,由CPU負責進行數據的處理。但是衆多的I/O設備中,還有許許多多更慢的組件,像PCI總線,這個更慢的I/O設備通過慢速橋,也就是南橋進行彙總連接起來,然後在一起彙總到北橋上,然後再由北橋彙總連入CPU,北橋被稱爲高速橋,南橋被稱爲低速橋。
如果有些總線希望能夠高速訪問的話,像PCI-E,或者想一些顯卡設備,這些高速I/O是連接到北橋上的,像鍵盤鼠標這些慢設備是連接到南橋上的。
我們要明白我們的CPU要想跟這些設備打交道,比如跟這裏的顯卡或者硬盤打交道,他們必須實現這樣幾種的操作機制,首先CPU需要實現向這個設備發一個控制指令,比如說CPU向硬盤發起讀請求,發一個控制指令,有時候這個指令是由指令控制器來完成,並且CPU還需要將這個數據加載到內存中,那麼這就需要傳輸數據的,另外CPU還需要向內存上定位內存上每一個可用的內存空間,所以從這個本質上來講,CPU如果能跟這些設備打交道,有可能早期的時候,就連內存都有可能是連接到北橋上的。
CPU爲了能夠跟這些衆多的設備進行通信,那麼CPU與北橋之間需要一個總線,這個總線需要有三種功能:
第一個功能:CPU要完成在內存中的尋址,定位內存中的地址,這就是地址總線;
第二個功能:CPU要發控制指令,那麼這個又叫控制總線;
第三個功能:CPU要完成數據的存儲讀取,這個線又叫數據總線;
上面的三類總線其實是通過一組線纜實現的,因此我們將這種情況,叫線纜的複用機制。在某一時刻這個線纜只能用於傳輸數據,在某一時刻這個總線只能用於發送控制指令,等等
每一個I/O設備都因該連接到北橋或者南橋上,但是如果說當前主機上,將來可能用某個I/O設備。但是現在沒有加怎麼辦?那麼在主板上預留一個空間好將來進行擴展,這就叫擴展槽,所以我們在主板上預留一些PCI槽,或者叫PCI-E的槽。像現在的高速固態硬盤,性能非常好,他的就是PCI-E的。
上面談了很多,其實主要的就是說,我們的硬盤接口,這些不同的I/O設備能夠實現數據傳輸,那他們的方式一樣嗎?打個比方回答這個問題,就想我們的鼠標數據線纜傳輸數據的方式,和硬盤的數據傳輸方式會不會一樣?肯定不一樣。
那麼CPU是怎樣實現與這些通信方式不一樣的設備進行交互的?
我們的CPU要想與這些設備進行通信,所以每一種設備,在這裏每一種I/O設備通過一個線纜與主板上的接口連接起來的,因爲他們是可插拔的。比如說,內存有內存槽,硬盤有硬盤槽,然後通過不同結構的線纜,將插槽與各種I/O設備連接起來,(IDE線纜與SATA線纜的結構是不一樣,)說到這裏我們應該明白,對於我們的CPU或者內存來講,他在整個數據總線上是由CPU實現,但是真正的轉化成某個地方方言時,也就是真正的跟某個I/O設備打交道時,就需要這個槽來實現,我們可以將這個槽理解爲一個重要的翻譯官,我們一般將這個槽叫做控制器,我們叫他爲SATA控制器,或者爲IDE控制器,如果我們是通過PCI槽進行擴展的話,通常叫他爲適配器,這個槽的主要作用就是,把CPU能夠說明白的信息,通過這個槽或者線纜,轉化爲特定的I/O設備能夠理解的信息,也就是在CPU控制總線上說的都是官話,然後到了特定的I/O設備時,就會將這些官話轉化爲特性的地方話。所以他們之間的傳輸,也是通過一種特定的機制來傳輸的。
計算機中的五大部件:
CPU(包括了運算器和控制器) Memory(RAM存儲器) I/O(輸出設備和輸入設備)
對於服務器來講:
I/O:(磁盤)Disks, (網卡)Ehtercard
Disks:持久存儲數據
硬盤接口類型:
IDE(ata):並口,理論速率:133MB/s
SCSI:並口,
SATA:串口(是IDE接口的升級版,傳輸是有先有後的)理論速率:6gbps 要換成上面的大B,那麼需要除以8
SAS:串口,6gps
USB:串口,480MB/s
並口:統一線纜可以接多塊設備;
IDE:兩個,主,從
SCSI:
寬帶:可以接16-1個設備
窄帶:可以連接8-1個設備
串口:同一線纜只可以接一個設備;
IOPS:Io per second :IO次數每秒
爲什麼並行接口傳輸數據會慢呢?
解:需要並行傳輸數據的時候,我們需要在總線上產生數據控制,想要實現數據交換速度快的話,就需要頻率要高,這就與電磁信號的傳輸有關了,如果頻率高了後,彼此差生相互干擾的可能性是非常大的,那麼數據一干擾,我們就需重新傳輸數據,那麼我們就會限制數據交換的頻率,那麼數據交換的速度就會受到限制,所以說並行接口傳輸,速度一般是小於串行接口的。
硬盤:機械硬盤;固態硬盤;
固態硬盤:我們可以理解爲內部是多個並行存取的U盤。固態硬盤有一種就扣是PCI-E接口,這種PCI-E接口的速度接近於內存的速度,
無論是機械硬盤還是固態硬盤他們的接口都是一樣,無非就是IDE接口,SATA接口,或者是PCI-E接口,我們衡量一個硬盤的性能時,我們除了看他的傳輸速率外,我們還看另外一個指標來描述,IOPS(IO次數每秒)每一個I/O就是一個存取操作,對於IDE來講,每秒的IO次數大約在100個左右,而SCSI接口每秒大約爲150個到200個之間I/O,對於很多存取很頻繁的數據服務器來講100個左右的IO有點差,對於早期時候,人們爲了擴展ipos,就是將多個硬盤連起來並行使用,比如將硬盤做成rai0,它能夠拓展I/O能力,但是這種能力比固態硬盤的擴展能力就差很多了,比方說,市面上的固態硬盤IPOS在400個左右,這就是我們的主機換了固態硬盤後,開機僅用幾秒,固態硬盤是電器設備,而機械硬盤是機械設備。
固態硬盤是根據電子運轉來實現存取,機械硬盤是根據機械盤的旋轉來實現存取的,到目前爲止機械硬盤的封裝技術仍然是上個世界六七十年代的技術。我們桌面的固態硬盤一般都是SATA接口的。
機械硬盤的概念個工作原理:
(機械式的硬盤就是由馬達帶動的,同軸旋轉的,內部是真空封裝的,多個盤片,這些盤片上有一種磁性材料,盤片上面可以按照固定的軌道,實現數據存取,)
我們的盤片上畫了很多的同心圓的軌道,我們稱之爲磁道:(track),我們知道每一個盤片上的磁道都是同心圓,他們的周長是不一樣,所以說這樣圓僅是同軸的旋轉的,是同心圓,但是由內而外的周長不同,也就是意味着,他每一圈存儲的數據量不一樣,但是由於是同軸旋轉,也就是單位時間內劃過的長度是不一樣的,但是他們的角速度是一樣,所以我們稱之爲固定角速度的設備,那麼這樣的硬盤怎樣實現數據的存取呢?
簡單來講,我們知道磁盤中有盤片,也有磁頭,這些磁頭會在盤面上上懸浮着,這些磁頭可能距離盤面僅有幾個微米的間距,他通過這種磁場信息的交換,使得磁頭能夠從盤面上的磁場信息來讀取存儲的信息,也能夠發送高能信號,將數據保存在磁性材料中,爲了使得磁盤上上存儲更多的數據,我們的磁盤雙面都有磁性材料,也就是意味着雙面都要讀寫,所以說對於每一個盤片來講,每一個盤片的每一面都有一個磁頭,但是每一個盤面上的磁頭都被固定在同一個機械臂上,所以說磁頭的滑動也是同步的,所以說每一次的數據讀取,都是由兩步完成的,第一步先機械臂滑動磁頭定位磁道,第二步磁盤轉動,然後磁盤轉動使得磁頭讀取數據。
所以我們在讀取數據的時候有一個“平均尋道時間”
平均尋道時間,是衡量一個硬盤性能的重要指標。平均尋道時間:越短越好,有兩種方法提高尋道的速度:(1)是機械臂滑動時間縮短,(2)使磁盤的轉速提高
市面上有:5400rpm(rpm:表示多少轉每分鐘),7200rpm,10000rpm,SCSI接口的尋道時間有15000rpm
因爲磁盤每分鐘轉這麼多次,必然會發出大量的熱,所以硬盤是真空封裝的,裏面不能有任何的雜質,在這裏面哪怕有一粒微小的灰塵,也會像巨石一樣。我們也知道磁盤中的磁頭與盤面之間有幾微米的間距,所以磁盤在工作的時候,磁盤是不能被震動的,因爲一旦震動,兩者之間就可能接觸了,接觸就很可能磁頭將盤面給劃壞了,這也是硬盤很容易損害的原因。所以現在的筆記本里面的硬盤都有特殊的保護機制。
由磁盤中的磁道是由內而外,所以每個磁道是不一樣的,所以我們不能安照一個磁道爲一個單位進行存儲,這樣的話我們很難實現數據的有效管理,更何況一個磁道也很難將一個文件存完,那麼我們就將一個磁道換成一個扇區,我們將每一個磁道劃分成固定大小的扇區,
sector:扇區,每一個扇區是大小固定的,每一個扇區大小爲512字節,字節:bytes
一般而言外道的扇區數和內道的扇區數是不一樣的,爲了便於管理和理解,現在硬盤通常對外接口上都把每一個磁道上的扇區數固定了,是通過虛擬曾固定的,看上去每一個磁道平均擁有多少個扇區,那事實上並不是這麼做的。
那麼我們的分區是怎麼分的?
在說分區之前,我們先說一下柱面:cylinder:
我們之前說過,每一個磁頭都固定在同一個機械臂上,那麼我們就可以認爲,這些磁頭也是同步進退的,因此在某一時刻,這個頭固定在某一個磁道上,那麼第二個磁頭就固定在第二個柱面上的相同磁道上,第三個刺頭就在第三個柱面上的相同磁道上.......不同盤面上的相同編號的磁道就叫一個柱面,就像一個薄薄的鐵通一樣,那麼我們分區是怎樣分的?
如果我們不分區的話,整塊磁盤就被當做一個文件系統進行管理,當做一個存儲空間,但是早些時候,硬盤只有幾個G,那我們爲什麼要分區呢?
因爲現在的硬盤都很大,爲了使得每一個硬盤中,我們可以獨立的組織爲多個可管理的文件系統,每一個被劃分出的獨立的文件系統,就叫塊設備,可以獨立使用,彼此間不會相互干擾,但是我們的分區應該怎樣分?
真正的文件存儲,是按照磁道進行的。
我們的分區劃分是按照柱面進行的,
那麼這樣的話,越靠近外面的分區性能越好,這是因爲單位時間內劃過的距離較長,完成的數據存取量較大。
(這也是爲什麼電腦裝系統,一般裝在C盤,因爲C盤是最外層的柱面所組成的分區,)
Linux的哲學思想:一切皆文件;
設備類型:
塊(block):隨機訪問,數據交換單位是“塊”;
字符(character):線性訪問,數據交換單位是“字符”;
設備文件:FHS,被放在/dev/目錄下,
/dev
設備文件作用:關聯至設備的驅動程序;
設備號:
major:主設備號,區分設備類型;用於標明設備所需要的驅動程序;
minor:次設備號,區分同種類型下的不同的設備,是特定設備的訪問入口;
手動創建設備文件:
每一個設備文件叫做一個節點;
mknod命令:
功能:用來創建塊設備或者字符設備文件的命令
格式:
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
選項:
-m,--mode=MODE:創建文件時,直接指明文件的訪問權限
設備文件名,不能隨便定義,是由ICANN組織定義的。
磁盤:
IDE: /dev/hd[a-z]
例如:/dev/hda /dev/hdb
SCSI,SATA,USB,SAS: /dev/sd[a-z]
分區:
/dev/sda#:
/dev/sda1,................
注意:CentOS6和7統統將硬盤設備文件標識爲/dev/sd[a-z]#
引用設備的方式:
設備文件名
卷標
UUID
磁盤分區類型:
有兩種:MBR,GPT
MBR:0sector(0號扇區):0磁道0扇區
大小爲:512字節
全稱:Master Boot Record :主引導記錄
分爲三部分:
前446bytes存放操作系統的加載程序:稱爲:bootloader,是一個程序,
bootloader是引導啓動操作系統的程序;
64bytes:分區表,每16個字節標識一個分區,一共只能有4個分區;
4個主分區
3主1擴展
在擴展分區中在劃分n個邏輯分區
2bytes:MBR區域的有效性標識,55AA爲有效,否則爲無效;
(上面的64bytes定義了我們的操作系統只能有4個分區,但是現在我們的硬盤好像不止只有4個分區,那我們是怎樣實現的呢?
我們把這四個分區中的一個分區拿出來,使得這個分區不再標識分區,而是用來指向另外一個存儲空間,把另一個存儲空間,當做新的分區表的存儲位置,)
主分區和擴展分區的表示:1-4
邏輯分區:只能從5開始,包括5;
[root@centos6 ~]# ls -l /dev //查看/dev/目錄先的設備文件
total 0
crw-rw----. 1 root video 10, 175 Nov 7 09:41 agpgart
crw-rw----. 1 root root 10, 54 Nov 7 09:41 autofs
drwxr-xr-x. 2 root root 660 Nov 7 09:41 block
drwxr-xr-x. 2 root root 80 Nov 7 2016bsg
crw-------. 1 root root 10, 234 Nov 7 2016btrfs-control
[root@centos6 ~]# mknod /dev/testdev b 111 1 //創建了一個快設備類型的主設備號爲111, 次設備號爲1,名稱爲testdev的設備文件
[root@centos6 ~]# ls -l /dev/testdev
brw-r--r--. 1 root root 111, 1 Nov 7 15:40 /dev/testdev
[root@centos6 ~]#
fdisk命令:
(這個命令非常危險,請勿在服務器上試用,請勿在生產環境中試用)
[root@centos6 ~]# man fdisk //查看fdisk命令的幫助
功能:
管理磁盤分區表
格式:
(1)查看分區情況:
fdisk[-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device
fdisk -l [-u] [device...] //列出指定磁盤設備上的分區情況;
centos6演示:
[root@centos6 ~]# fdisk -l
Disk /dev/sda: 214.7 GB, 214748364800 bytes //磁盤大小爲214.7GB,換算成字節位....
255 heads, 63 sectors/track, 26108cylinders
Units = cylinders of 16065 * 512 = 8225280bytes //扇區大小爲512字節
Sector size (logical/physical): 512 bytes /512 bytes //扇區大小,邏輯大小,物理大小都是512 字節
I/O size (minimum/optimal): 512 bytes / 512bytes //I/O大小爲512字節
Disk identifier: 0x000066a0 //磁盤的標識符,是以以爲16進制的數字進行標識
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux //“*”表示是引導 分區,標識操作系統在這個分區上裝着呢。
Partition 1 does not end on cylinderboundary.
/dev/sda2 26 6400 51200000 83 Linux
/dev/sda3 6400 8950 20480000 83 Linux
/dev/sda4 8950 26109 137829376 5 Extended
/dev/sda5 8950 9460 4096000 82 Linux swap / Solaris
[root@centos6 ~]#
上面的“Id”表示類型,這個類型是指我們的分區所在的場景類型,linux的分區正常都用83來表示,而擴展分區使用5來表示,交換分區使用82表示;
“83”:是一個16進制的兩位數。
system:表示前面的Id對應的意義是什麼。
centos7演示:
[root@centos7 ~]# fdisk -l
Disk /dev/sda: 214.7 GB, 214748364800bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk label type: dos
Disk identifier: 0x0003325d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 102811647 51200000 83 Linux
/dev/sda3 102811648 143771647 20480000 83 Linux
/dev/sda4 143771648 419430399 137829376 5 Extended
/dev/sda5 143773696 151965695 4096000 82 Linux swap / Solaris
[root@centos7 ~]#
總結:上面的顯示中,centos6與centos7的不同是:“start”
centos6表示從哪個柱面開始
centos7表示從哪個扇區開始
如果我們想看某一個指定的磁盤分區情況,則我們後面寫上指定的磁盤設備文件即可
[root@centos7~]# fdisk -l /dev/sda
(2)如果想管理分區:
fdisk device(device表示磁盤文件名),執行這個命令能夠打開fdisk的命令行接口,fdisk提供了一個交互式接口來管理分區,他有許多子命令,分別用於不同的管理功能,所有的操作均在內存中完成。這就意味着所有的操作不會保存在磁盤上,這就不會損害磁盤。直到使用“w”命令保存到磁盤上纔會生效,
常用的命令:
n:創建新分區;
d:刪除已有的分區;
t:修改分區類型;
l:查看所有已知ID;
w:保存並退出;
q:不保存並退出;
m:查看幫助信息;
p:顯示現有分區信息;(相當於在命令行中執行: fdisk -l )
我們直接fdisk 後面跟上磁盤的設備文件名即可
例如: [root@centos7 ~]# fdisk /dev/sda
演示例二:
[root@centos6 ~]# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated.It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): m //使用m選項,查看fdisk的子命令。
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibilityflag
d delete a partition //表示刪除分區
l list known partition types //列出已知的分區類型(82 Linux swap / ;85 Linux extended;86 NTFS volume set;87 NTFS volume set; 88 Linux plaintext(linux純文本);8e Linux LVM;fd Linuxraid auto;)
m print this menu
n add a new partition //表示添加新分區
o create a new empty DOSpartition table
p print the partition table
q quit without saving changes
s create a new empty Sundisklabel
t change a partition's system id //表示更改一個分區的system ID,即更改分區類型
u change display/entry units
v verify the partition table
w write table to disk and exit //表示 保存退出
x extra functionality (expertsonly)
Command (m for help):
fdisk -s partition...
fdisk -v
fdisk -h
課外作業:GPT