ps:期末考試 終於結束了,這下我也終於有時間開始繼續經營個人博客。這個學期上的一些課真的很是有用,感受不少課程細地講均可以寫成很是精緻的技術博文,好比流水線技術,數據庫的一些技術,大學裏的考試考的內容「不痛不癢」真正有價值的一些內容避而不考,可是追不少有的沒的的概念很雞肋。無論如何,這個暑假給本身留了不少本官方技術書籍慢慢去看,我也會在博客裏繼續補充一些本身的體會和心得。html
一. 關於設備在linux中的名字linux
附:(linux中常見設備和設備在linux中的名字的對照表)數據庫
-------------------------------------------------------------windows
| IDE接口硬盤 | /dev/hd[a~d] |架構
| SCSI/SATA/USB硬盤 | /dev/sd[a~p] |spa
| U盤 | /dev/sd[a~p] |操作系統
| 軟驅 | /dev/fp[0~1] |htm
| 打印機 | /dev/lp[0~2] |blog
| 鼠標 | /dev/usb/mouse[0~15] |接口
| | 或者 /dev/psaux |
| 當前CD ROM | /dev/cdrom |
| 當前鼠標 | /dev/mouse |
--------------------------------------------------------------
雖然說使用linux的fedora distribution有快一年多的時間了,可是其實有不少細節的知識都沒有仔細去思考了解,好比硬件設備在linux的/dev目錄下的一些命名規則。
首先看看和咱們接觸最多的硬盤:
如今主流的硬盤按照接口能夠分類爲兩種: IDE接口和SATA接口,其中IDE接口類型的硬盤幾乎大部分如今已經被淘汰了,SATA接口比較淺顯的一個特徵是由兩個接口槽組成分別是信號接口和電源接口,每一個SATA接口只能夠鏈接一個硬盤,主板上的SATA接口的個數並非固定的,隨着廠商的設定而改變。另一種硬盤的傳輸接口爲SCSI接口,比較常見於工做站以上的等級的計算機中,SCSI接口硬盤在控制器上含有一塊處理器,運行速度快並且不會消耗CPU資源。
對於IDE接口硬盤:
一個IDE扁平電纜能夠鏈接兩個IDE設備,這個兩個電纜接口分別被稱爲IDE1(primary)和IDE2(secondary),而每條扁平電纜上面的兩個設備分別被叫作Master設備和Slave設備,所以有以下名稱對應表:
---------------------------------------------------
| IDE1--Master | /dev/hda |
| IDE1--Slave | /dev/hdb |
| IDE2--Master | /dev/hdc |
| IDE2--Slave | /dev/hdd |
---------------------------------------------------
對於SATA接口硬盤:
因爲主板上的SATA接口數量不一致,SATA設備在linux中的命名每每是」先來後到「關係,假如一個主板上有10個SATA接口且SATA0號接口槽和3號接口槽上分別有一個設備而且還有一個USB設備,則命名則爲SATA0-->/dev/sda,SATA3-->/dev/sdb,U盤-->/dev/sdc,這裏的U盤之因此排在後面是由於BIOS程序每每最後識別USB線上的設備,並且大多數的U盤都是在開機完成以後再插入的因此每每就命名最靠後。
以上爲止的硬盤命名都是在爲對其進行過度區的前提之下進行的,就是所謂的」一張大餅「沒有被切開,在介入分區後的設備命名以前,先了解下關於硬盤分區及系統開機過程的一些知識。
二. 磁盤的分區和系統啓動簡述
這裏所說的硬盤是指傳統的由盤片,機械手臂,主軸馬達構成的磁盤,個人筆記本上的硬盤的規格就是這個樣子5400轉/秒,磁盤的構成的具體知識這裏不贅述了,對於硬盤來說在磁道的第一個扇區是很是重要的,它記錄了關於磁盤的兩個很是重要的信息:
(1)主引導分區(Master Boot Record)安裝引導加載程序的地方。佔用446B
(2)分區表(Partition Table)記錄硬盤分區狀態。佔用64B
首先看一下分區表:
所謂對磁盤進行的分區有三個比較重要的概念:
(1)主分區(Primary)
(2)擴展分區(Extended)
(3)邏輯分區(Logical)
最直觀意義上的磁盤分區就是主分區,主分區就是直接在64B的分區表中記錄下來4組分區的狀況,因爲64B的限制,硬盤默認的分區表最多隻能夠容納4組分區信息,那麼最直接的假設就是當咱們把一個硬盤直接分區爲4個主分區時候的命名狀況對照表以下所示(假設使用的硬盤爲SATA接口類型):
-------------------------------------------------
| 主分區1 | /dev/sda1 |
| 主分區2 | /dev/sda2 |
| 主分區3 | /dev/sda3 |
| 主分區4 | /dev/sda4 |
-------------------------------------------------
其中分區的最小單位爲 柱面(cylinder)
然而在實際中咱們使用的硬盤卻會分區爲大於4個甚至10個以上的分區,這裏是如何實現的呢?其實使用的就是擴展分區的功能,擴展分區在這裏更像是一個廣義表,裏面記錄了更下一級的分區狀況,這就是邏輯分區。以下圖所示:
那麼對上圖來說在linux中的命名對照表以下所示:
---------------------------------------------------------------------------------
| 主分區1 | /dev/sda1 |
| 擴展分區--------D | /dev/sda5 |
| --------E | /dev/sda6 |
| --------F | /dev/sda7 |
---------------------------------------------------------------------------------
這裏要注意邏輯分區的數標命名是從5開始的,由於1~4的命名只能留給主分區/擴展分區使用,除了以上的概念以外有幾點須要注意:
1.對於一塊硬盤只能有0~1個擴展分區,能夠有1~3個主分區,也就是說 |主分區|+|擴展分區|<=4
2.可以做爲數據進行訪問的分區只有主分區和邏輯分區,擴展分區沒法格式化!
3.linux中IDE硬盤最多有59個邏輯分區,SATA硬盤最多有11個邏輯分區
4.所謂的分區過程只是在對分區表內的那64B內容進行修改。
接下來經過第一個扇區中MBR(Master Boot Record)看一下計算機啓動的主要過程:
1.系統加點自檢,經過CMOS和BIOS主動執行開機。CMOS主要存儲有關開機啓動的一些參數,BIOS的功能這裏就不贅述啦。
2.經過MBR執行bootloader程序,bootloader提供不一樣的開機選項,載入內核文件或者將引導加載功能轉交給其餘的loader負責。
(如下是隨便嘮叨兩句,若已經瞭解推薦跳過)
既然說到了loader的轉交,就不得不提多操做系統的實現,當今最主流的多操系統引導程序莫過於grub,grub就是被寫進了mbr中的,正常的操做系統啓動好比windows啓動的時候,在mbr中的引導程序執行的時候會直接把計算機的控制權交給windows內核,然而grub在這裏作的事情就是實現了一個」菜單「,不一樣的選項會把產生分支引導不一樣的操做系統引導程序,這些引導程序是卸載不一樣的分區之中的,每一個分區都會有一個啓動扇區,其功能和MBR一致。引導程序只認識在本身分區內的內核文件,這樣一來就是實現了操做系統之間的隔離,可是因爲是在同一個硬盤之中的不一樣分區完成的,因此分區狀況對於用戶仍是不透明的,好比你能夠在linux上明顯看到windows內核文件所在的分區(嗯,打不開!)
三. linux文件系統和磁盤分區
(對於linux文件系統架構原理沒有初步瞭解的朋友,請看我以前的博文:http://www.cnblogs.com/guguli/p/4556445.html )
首先,仍是那句老話,linux下的一切設備都是以文件形式進行管理,這個形式歸功於linux的虛文件系統VFS對功能模塊進行的分離作到的。然而linux中的文件都是以樹結構進行管理的,這種向下分支的結構和磁盤的分區有着很大的聯繫:
在VFS的管理下,同一個磁盤的不一樣分區或者不一樣的磁盤之間的關係都是一致的,都是文件系統中的節點。假設咱們的SATA硬盤被分爲了兩個主分區sda1和sda2,在抽象爲vfsmount完成了像文件系統目錄的掛載之中,假設sda1被掛載到了「/」根目錄,sda2被掛載到了「/test」目錄,那麼好比我對/test/file1進行的讀寫操做天然就會被寫入磁盤的第二個主分區,過程細化來說就是:首先從file1文件的目錄向上回溯,依次看各個目錄節點是不是文件系統的掛載點(參見super_block結構體),這裏向上回溯到/test目錄發現這是一個掛載點,而後找到原來這是sda硬盤的第二個主分區,再經過sda硬盤的第一個扇區中的分區表找到屬於第二個主分區的柱面範圍,而後按地址進行讀寫。