1. 程式人生 > >讀書筆記: 鳥哥基礎篇第四版(第一、二章 磁碟劃分)

讀書筆記: 鳥哥基礎篇第四版(第一、二章 磁碟劃分)

主要內容:

  1. Linux硬體的命名
  2. MBR和GPT分割槽的區別, 對應分割槽槽的命名,primary, extended, logical分割槽
  3. 掛載點

Chap1 Linux 是什麼與如何學習

1.1 Linux是什麼

1.1.1 作業系統位置

在這裡插入圖片描述

向下管理硬體,向上提供API呼叫。每種作業系統都是針對它專門的硬體機器執行

1.1.2 Unix發展

Linux 的核心是由 Linus Torvalds 在 1991 年的時候給他開發出來的

1960年, MIT提出了 Compatible Time-Sharing System `CTSS`1965年, MIT, Bell Lab, GE 的 Multics計劃
1969年前後Bell Lab退出1969年Ken Thompson趁老婆回家探親,一個月用匯編語言寫出了作業系統原型1973年Dennis Ritchie改寫出了C語言C語言改寫 Unics核心,更名為 Unix1973年Unix在學術界於 Berkley合作,被後者改寫出了BSD(Berkley Software Distribution)AT&T 改寫了自己的Unix( System V)1979年,AT&T 的 System V第七個版本,收回版權Tanenbaum教授不看Unix核心程式碼,從1984-1986年寫出了Minix用於教學1984年Richard Mathew Stallman發起GNU計劃
1985年GNU 發表GPL1988年 MIT和第三方公司發表 X Window System,有了圖形介面1991年 Linux面世

注:

  1. 早期的windows下的個人電腦的CPU架構 不支援多工,所以沒有Unix版本
  2. 純種Unix指的就是 System V和 BSD兩個版本
  3. GNU寫了可以在Unix上跑的軟體,包括 gcc, Emacas, Bash Shell,還有C函式庫
  4. GNU由自己的核心,叫做hurd,但是開發時對系統要求特別嚴謹,所以一再推遲面世

1.1.3 自由軟體 與 GNU計劃

“Free software” is a matter of liberty, not price. To understand the concept, you should think of “free speech”, not “free beer”. “Free software” refers to the users’ freedom to run, copy, distribute, study, change, and improve the software

  • GPL
  • Open Source

1.2 發展歷史

參考Minix+使用i385Linux0.0.2版本放在BBS改寫核心來相容POSIX為了應對需求變化快,Linux逐漸發展成模組化

1.2.1 版本號

uname -r
3.10.0-123.el7.x86_64
主版本.次版本.釋出版本-修改版本

1.2.2 Linux Distribution

Linux是 GNU GPL模式的軟體。

Distribution = Kernel + tools + software + 可安裝程式 在這裡插入圖片描述

為了讓所有的Linux Distribution差異不會過大,這些開發商在開發Distribution的時候都有所依據,比如Linux Standard Base還有File Sytem Hierarchy Standard , 唯一差別的可能就是開發者自家的 管理工具以及管理模式

RPM軟體管理 DPKG軟體管理 未分類
商業公司 RHEL, SuSE Ubuntu
社群 Fedora, CentOS, OpenSuSE Debian, B2D Gentoo

1.3 Linux的角色

X Window System 僅只是 Linux 上面的一套軟體, 而不是核心喔!所以即使 X Window 掛了,對 Linux 也可能 不會有直接的影響呢!

1.4 如何學習

Chap2 主機規劃和磁碟劃分

2.1 與硬體搭配

各個元件或裝置在 Linux 底下都是『一個檔案!』

2.1.1 硬體裝置在Linux中的名字

幾乎所有硬體都在 /dev資料夾下, 硬碟的名字是 /dev/sd[a-d]

裝置 檔名字
硬碟 /dev/sd[a-p]
虛擬IO /dev/vd[a-p] (用於虛擬機器內)
印表機 /dev/lp[0-2] /dev/usb/lp[0-15]
滑鼠 /dev/input/mouse[0-15] /dev/psaux (PS/2介面) /dev/mouse (當前滑鼠)
CDROM/DVDROM /dev/scd[0-1] /dev/sr[0-1] /dev/cdrom (當前CDROM)

2.2 磁碟分割槽

2.2.1 磁碟連線的方式與裝置檔名的關係

磁碟在 Linux中的名字具體 是按照Linux核心偵測到磁碟的順序來命名的,比如主機板上的 SATA1和 SATA5上面有2塊磁碟,那麼第一塊就是 sda, 第二塊就是 sdb.

物理磁碟上有 扇區sector, 磁軌track,還有磁柱cylinder, 扇區一般有 512bytes 和 4kbytes的。 早期第一個扇區記錄了重要的資訊,稱作MBR格式; 但後來多了一種磁碟分割槽格式:GPT格式。

在這裡插入圖片描述

2.2.2 MSDOS (MBR) 和 GPT磁碟分割槽表(partition table)

以前分割槽槽是根據 磁柱cylinder來劃分,而 GPT可以根據 扇區sector來劃分。

a. MSDOS(MBR) 分割槽表格式 與 限制

1. MBR格式的第一個扇區內容

早期的 Linux 系統為了兼容於 Windows 的磁碟,因此使用的是支援 Windows 的 MBR(Master Boot Record, 主要開機紀錄區) 的方式來處理開機管理程式與分割槽表而開機管理程式紀錄區與分割槽表則通通放在磁碟的第一個扇區, 這個扇區通常是 512bytes 的大小。所以第一個扇區有下面2個數據:

  1. 主要啟動記錄區(Master Boot Record, MBR):可以安裝開機管理程式的地方,有 446 bytes
  2. 分割槽表(partition table)記錄整顆硬碟分割槽的狀態,有 64 bytes

由於只有64bytes來記錄分割槽記錄, 所以最多隻能有4個記錄區,每個記錄區 記載了該分割槽的起始磁柱編號:

在這裡插入圖片描述

如果這個磁碟是 /dev/sda的話,這4個分割槽分別叫做:

  1. /dev/sda1
  2. /dev/sda2
  3. /dev/sda3
  4. /dev/sda4
2. Primary、Extended、Logical分割槽

每一個記錄區要麼是 Primary,要麼是 Extended

在這裡插入圖片描述

Extended分割槽本身不能被格式化, 它被繼續分成 Logical 分割槽:

  • P1:/dev/sda1
  • P2:/dev/sda2
  • L1:/dev/sda5
  • L2:/dev/sda6
  • L3:/dev/sda7
  • L4:/dev/sda8
  • L5:/dev/sda9

注: [1-4]的編號是留個4個 Primary/Extended使用的,就算沒有那麼多,也會保留,所以Logical分割槽是從 sd5開始的。

小結

  • 其實所謂的『分割槽』只是針對那個 64 bytes 的分割槽表進行設定而已!
  • 硬碟預設的分割槽表僅能寫入四組分割槽資訊
  • 這四組分割槽資訊我們稱為主要(Primary)或延伸(Extended)分割槽槽
  • 分割槽槽的最小單位『通常』為磁柱(cylinder)
  • 當系統要寫入磁碟時,一定會參考磁碟分割槽表,才能針對某個分割槽槽進行資料的處理
  • 主要分割槽與延伸分割槽最多可以有四筆(硬碟的限制)
  • 延伸分割槽最多隻能有一個(作業系統的限制)
  • 擴充套件分割槽繼續劃分出邏輯分割槽;
  • 主分割槽和邏輯分割槽能被格式化儲存內容, 擴充套件分割槽不可以;
  • 邏輯分割槽的數量依作業系統而不同,在 Linux 系統中 SATA 硬碟已經可以突破 63 個以上的分割槽限制

如果整顆硬碟的第一個扇區(就是 MBR 與 partition table 所在的扇區)物理實體壞掉了,那這個 硬碟大概就沒有用了

3. MBR的缺點

因為每組分割槽表的條目 只有 16bytes,所以記錄的內容相當有限:

  • 作業系統無法抓取到 2.2T 以上的磁碟容量!
  • MBR 僅有一個區塊,若被破壞後,經常無法或很難救援。
  • MBR 內的存放開機管理程式的區塊僅 446bytes,無法容納較多的程式程式碼。

b. GUID partition table, GPT 磁碟分割槽表

後來磁碟出現了 4k bytes扇區的, 所以為了相容 兩者, 磁碟使用Logical Block Address來處理扇區的編號。 GPT將磁碟的所有區塊 以 LBA來劃分,每個LBA大小為 512bytes, 第一個LBA稱為LBA0

GPT使用了34個 LBA來記錄分割槽記錄,並且除了這開頭的34個LBA,還是用了磁碟最後的33個LBA來作磁碟備份。

在這裡插入圖片描述

LBA0: 和MBR類似,包含開機管理程式, 但是在分割槽表的部分,僅僅放入了特殊標誌來表示是 GPT,所以不懂GPT的管理程式就不能識別它 LBA1: GPT表頭記錄,記錄了分割槽表本身大小,還有備份區塊的位置,放置了檢驗碼,作業系統可以根據它來檢驗區塊是否正常,並且根據它表示的備份區塊位置來還原 LBA2-33: 實際分割槽記錄處,每個LBA都可以記錄4個分割槽記錄,所以一共可以有128個。

  1. GPT分割槽中沒有了 Primary, Extended, Logical分割槽的區別
  2. 磁碟管理工具上 ,fdisk不識別GPT,要gdisk或者parted
  3. 開機管理程式上, grub第一版不認識GPT,要grud2

2.2.3 BIOS 和 UEFI

a. BIOS

主機板上CMOS記錄各個硬體引數, BIOS是寫入到主機板上的軟體,在開機的時候由主機執行的第一個程式。

BIOS會根據設定的第一個開機硬碟, 去裡面讀取第一個扇區MBR資料,就是裡面446bytes的開機管理程式。之後就由MBR接管了開機的工作。 MRB裡面的這個開機管理程式接著就去讀取 作業系統的核心檔案, 因為安裝的時候開機管理程式是和硬碟格式相關的,所以它能認識作業系統核心檔案。 之後的任務就給作業系統來完成開機了。

簡單而言:

  1. 執行BIOS的程式,由它去讀取MBR
  2. MBR執行開機管理程式,去載入作業系統核心
  3. 作業系統啟動

對於GPT來說,BIOS也會去讀取第一個 LBA0的程式碼,但是如果開機管理程式不認識GPT,那它就無法去載入(load)作業系統核心檔案。

由於LBA0僅提供了開機管理程式程式碼, 所以如果使用類似於 grub的開機管理程式的話,需要額外分出一個 BIOS boot 分割槽,把其他開機所需的程式程式碼放在裡面。

所以Boot loader是作業系統寫入MBR的一個程式, 主要功能有:

  1. 提供不同開機引導選項
  2. 載入核心檔案
  3. 轉交給其他的loader

在這裡插入圖片描述

解釋: MBR中有2個啟動選項,如果選擇第一個選項,則直接載入 分割槽1中的核心啟動檔案; 如果選擇第二個選項,則將控制權交給 第二個分割槽的 啟動扇區,而這個啟動扇區裡面有一個loader選項,就指向的是第二個分割槽的核心。

總結:

  • 每個分割槽槽都擁有自己的啟動扇區(boot sector)
  • 圖中的系統槽為第一及第二分割槽槽,
  • 實際可開機的核心檔案是放置到各分割槽槽內的!
  • loader 只會認識自己的系統槽內的可開機核心檔案,以及其他 loader 而已;
  • loader 可直接指向或者是間接將管理權轉交給另一個管理程式。

先安裝哪個系統: 如果先有Windows,再安裝Linux,那麼Linux的loader可以寫在自己的分割槽,或者MBR中,在loader內可以新增Windows的啟動項; 如果先有Linux再安裝Windows,那麼Windows會全部覆蓋掉MBR的內容,所以找不到Linux的啟動項了,只能通過救援模式來修復。

b. UEFI

因為BIOS本身不認識GPT,需要以GPT提供相容模式才能夠載入,所以有了UEFI。

在這裡插入圖片描述

UEFI可能效率低一點,所以在載入作業系統之後,一般就會停止工作,交給作業系統來管理。UEFI也加入了安全啟動機制(secure boot),有時甚至會阻止linux的啟動,這就需要自己手動關掉。

注意:

  1. 雖然UEFI可以認識GPT分割槽,但是最好還是有 BIOS boot分割槽
  2. 為了提供第三方廠商的UEFI應用儲存空間,最好格式化一個 vfat的檔案系統,大概 512MB~1G左右,以便讓UEFI執行方便
  3. 由於上面2個存在,/boot 已經不再是**/dev/sda1了,幾乎都是/dev/sda3**了

2.3 安裝Linux前的規劃

  • 懶人分割槽: /swap
  • 稍微麻煩點: /boot / /home /var Swap /tmp /usr