linux磁盤及文件系統管理初步(1)

Linux系統管理

         磁盤分區及文件系統管理

         RAID

         LVM:能夠實現磁盤邊界的動態管理

         網絡屬性管理

         程序包管理:程序包的增刪查改

         sed awk

         進程查看和管理

         內核管理:內核的組成部分,內核的編譯安裝

         系統啓動流程

         Linux內核的定製,編譯內核,busybox

         系統安裝:kickstartdhcppxe

         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(包括了運算器和控制器)  MemoryRAM存儲器)  I/O(輸出設備和輸入設備)

 

對於服務器來講:

                   I/O:(磁盤)Disks, (網卡)Ehtercard

                   Disks:持久存儲數據

 

                            硬盤接口類型:

                                     IDEata):並口,理論速率:133MB/s

                                     SCSI:並口,

                                     SATA:串口(是IDE接口的升級版,傳輸是有先有後的)理論速率:6gbps                                            要換成上面的大B,那麼需要除以8

                                     SAS:串口,6gps

                                     USB:串口,480MB/s

 

                            並口:統一線纜可以接多塊設備;

                                     IDE:兩個,主,從

                                     SCSI

                                               寬帶:可以接16-1個設備

                                               窄帶:可以連接8-1個設備

                            串口:同一線纜只可以接一個設備;

 

                                     IOPSIo  per second   IO次數每秒

        

         爲什麼並行接口傳輸數據會慢呢?

                   解:需要並行傳輸數據的時候,我們需要在總線上產生數據控制,想要實現數據交換速度快的話,就需要頻率要高,這就與電磁信號的傳輸有關了,如果頻率高了後,彼此差生相互干擾的可能性是非常大的,那麼數據一干擾,我們就需重新傳輸數據,那麼我們就會限制數據交換的頻率,那麼數據交換的速度就會受到限制,所以說並行接口傳輸,速度一般是小於串行接口的。

                  

        

         硬盤:機械硬盤;固態硬盤;

 

                   固態硬盤:我們可以理解爲內部是多個並行存取的U盤。固態硬盤有一種就扣是PCI-E接口,這種PCI-E接口的速度接近於內存的速度,

 

無論是機械硬盤還是固態硬盤他們的接口都是一樣,無非就是IDE接口,SATA接口,或者是PCI-E接口,我們衡量一個硬盤的性能時,我們除了看他的傳輸速率外,我們還看另外一個指標來描述,IOPSIO次數每秒)每一個I/O就是一個存取操作,對於IDE來講,每秒的IO次數大約在100個左右,而SCSI接口每秒大約爲150個到200個之間I/O,對於很多存取很頻繁的數據服務器來講100個左右的IO有點差,對於早期時候,人們爲了擴展ipos,就是將多個硬盤連起來並行使用,比如將硬盤做成rai0,它能夠拓展I/O能力,但是這種能力比固態硬盤的擴展能力就差很多了,比方說,市面上的固態硬盤IPOS400個左右,這就是我們的主機換了固態硬盤後,開機僅用幾秒,固態硬盤是電器設備,而機械硬盤是機械設備。

固態硬盤是根據電子運轉來實現存取,機械硬盤是根據機械盤的旋轉來實現存取的,到目前爲止機械硬盤的封裝技術仍然是上個世界六七十年代的技術。我們桌面的固態硬盤一般都是SATA接口的。

 

 

 

機械硬盤的概念個工作原理:

 

         (機械式的硬盤就是由馬達帶動的,同軸旋轉的,內部是真空封裝的,多個盤片,這些盤片上有一種磁性材料,盤片上面可以按照固定的軌道,實現數據存取,)

         我們的盤片上畫了很多的同心圓的軌道,我們稱之爲磁道:(track,我們知道每一個盤片上的磁道都是同心圓,他們的周長是不一樣,所以說這樣圓僅是同軸的旋轉的,是同心圓,但是由內而外的周長不同,也就是意味着,他每一圈存儲的數據量不一樣,但是由於是同軸旋轉,也就是單位時間內劃過的長度是不一樣的,但是他們的角速度是一樣,所以我們稱之爲固定角速度的設備,那麼這樣的硬盤怎樣實現數據的存取呢?

         簡單來講,我們知道磁盤中有盤片,也有磁頭,這些磁頭會在盤面上上懸浮着,這些磁頭可能距離盤面僅有幾個微米的間距,他通過這種磁場信息的交換,使得磁頭能夠從盤面上的磁場信息來讀取存儲的信息,也能夠發送高能信號,將數據保存在磁性材料中,爲了使得磁盤上上存儲更多的數據,我們的磁盤雙面都有磁性材料,也就是意味着雙面都要讀寫,所以說對於每一個盤片來講,每一個盤片的每一面都有一個磁頭,但是每一個盤面上的磁頭都被固定在同一個機械臂上,所以說磁頭的滑動也是同步的,所以說每一次的數據讀取,都是由兩步完成的,第一步先機械臂滑動磁頭定位磁道,第二步磁盤轉動,然後磁盤轉動使得磁頭讀取數據。

         所以我們在讀取數據的時候有一個“平均尋道時間”

         平均尋道時間,是衡量一個硬盤性能的重要指標。平均尋道時間:越短越好,有兩種方法提高尋道的速度:(1)是機械臂滑動時間縮短,(2)使磁盤的轉速提高

         市面上有:5400rpmrpm:表示多少轉每分鐘),7200rpm10000rpmSCSI接口的尋道時間有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,................

 

注意:CentOS67統統將硬盤設備文件標識爲/dev/sd[a-z]#

 

         引用設備的方式:

                   設備文件名

                   卷標

                   UUID

 

 

磁盤分區類型:

 

                   有兩種:MBR,GPT

         MBR0sector0號扇區):0磁道0扇區

                   大小爲:512字節

                   全稱:Master  Boot Record :主引導記錄

                   分爲三部分:

                            446bytes存放操作系統的加載程序:稱爲:bootloader,是一個程序,

                                      bootloader是引導啓動操作系統的程序;

                            64bytes:分區表,每16個字節標識一個分區,一共只能有4個分區;

                                     4個主分區

                                     31擴展

                                               在擴展分區中在劃分n個邏輯分區

                            2bytesMBR區域的有效性標識,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 ~]#

 

總結:上面的顯示中,centos6centos7的不同是:start

                   centos6表示從哪個柱面開始

                   centos7表示從哪個扇區開始

 

如果我們想看某一個指定的磁盤分區情況,則我們後面寫上指定的磁盤設備文件即可

 

         [root@centos7~]# fdisk  -l  /dev/sda

 

2)如果想管理分區:

                   fdisk  devicedevice表示磁盤文件名),執行這個命令能夠打開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                                                                                  extended86  NTFS volume set87  NTFS volume set                                                                          88  Linux plaintextlinux純文本);8e  Linux LVMfd                                                                           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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章