close

總覽

https://myfamily12345.pixnet.net/blog/post/404540683

sata 介紹

https://panel.pixnet.cc/#/articles/list?per_page=40

 

磁柱-磁頭-磁區(Cylinder-head-sector,CHS)是早期對硬碟機的每一個物理資料塊進行編址的一種方法。

123.PNG

磁頭 (Head)

=>硬碟讀寫頭。

 

磁軌 (Track)

=> 當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁軌(Track)。   

 

碟片(Platters)

=> 每個碟片都有兩面,因此也會相對應每碟片有2個磁頭。

123.PNG

 

磁柱 (Cylinder) 

=> ​​​​ 在有多個碟片構成的盤組中,由不同碟片的面,但處於同一半徑圓的多個磁軌組成的一個圓柱面(Cylinder)。

 

磁區 (sector) 

=> 磁盤上的每個磁軌被等分為若干個弧段,這些弧段便是硬碟的磁區(Sector)。 硬碟最小儲存物理量,約 目前主要有 512bytes 與 4K 兩種格式

 

磁軌容量 =    每磁軌上的磁區數 * 512 Bytes (4K)

磁柱容量 =    磁頭數 * 每磁軌上的磁區數 * 512 Bytes (4K)

硬碟容量 =   C(磁柱數) * H(磁頭數) * S(每軌磁區數) * 512 Bytes (4K)

 

123.PNG

 

當初設計就是在類似磁碟盤同心圓上面切出一個一個的小區塊,這些小區塊整合成一個圓形,讓機器手臂上的讀寫頭去存取。

這個小區塊就是磁碟的最小物理儲存單位,稱之為磁區 (sector),那同一個同心圓的磁區組合成的圓就是所謂的磁軌(track)。

由於磁碟裡面可能會有多個磁碟盤,因此在所有磁碟盤上面的同一個磁軌可以組合成所謂的磁柱 (cylinder)。

原本硬碟的磁區都是設計成 512byte 的容量,但因為近期以來硬碟的容量越來越大,為了減少資料量的拆解,

所以新的高容量硬碟已經有 4Kbyte 的磁區設計!

 

Disktructure.jpg

 

Linux 磁碟的分區 MBR GPT

早期的磁碟分割主要以磁柱為最小分割單位,現在的分割通常使用磁區為最小分割單位(每個磁區都有其號碼喔,就好像座位一樣)

磁碟分割表主要有兩種格式,一種是限制較多的 MBR 分割表,一種是較新且限制較少的 GPT 分割表。

GPT 分割表除了分割數量擴充較多之外,支援的磁碟容量也可以超過 2TB。

MBR使用fdisk命令,GPT使用gdisk命令,parted命令適用於兩種分區格式,
 

硬碟的最小儲存單位是 sector , 不過資料所儲存的最小單位並不是 sector 喔,​​​​​

因為用 sector 來儲存太沒有效率了怎麼說呢因為一個 sector 只有 512 Bytes,​​​

 

為了克服這個效率上的困擾,所以就有邏輯區塊( Block )的產生了!

邏輯區塊是在 partition 進行 filesystem 的格式化時, 所指定的『最小儲存單位』,

這個最小儲存單位當然是架構在 sector 的大小上面( 因為 sector 為硬碟的最小物理儲存單位啊! ),

所以啦, Block 的大小為 sector 的 2 的次方倍數。此時,磁頭一次可以讀取一個 block ,

如果假設我們在格式化的時候指定 Block 為 4 KBytes  (亦即由連續的八個 sector 所構成一個 block)

下完 fdisk -l /dev/sda 指令之後, 看到以下。 請畫出 /dev/sda 這顆硬碟的分割圖。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     8390655     4194304   83  Linux
/dev/sda2         8390656    29362175    10485760   83  Linux
/dev/sda3        29362176    50333695    10485760   83  Linux
/dev/sda4        50333696   976773167   463219736    5  Extended
/dev/sda5        50335744   934830129   442247193   83  Linux
/dev/sda6       934834176   955801648    10483736+  83  Linux
/dev/sda7       955805696   976773167    10483736   83  Linux

 

MBR 分割表中,第一個磁區最重要,裡面有:

主要開機區(Master boot record, MBR)及分割表(partition table),

        其中 MBR 佔有 446 bytes, 而 partition table 則佔有 64 bytes,

123.PNG

 

 

MBR(Master boot record)

主開機紀錄(Master Boot Record,縮寫:MBR),又叫做主啟動磁區,是開機後存取硬碟時所必須要讀取的首個磁區,它在硬碟上的三維位址為(柱面,磁頭,磁區)=(0,0,1)。

 

Linux system 的啟動流程,

123.PNG

 GRUB
GRUB是多重引導管理器
(GRand Unified Bootloader)

如果你的系統中安裝了多個核心,你可以選擇啟動哪一個

GRUB顯示了一個啟動畫面,等待幾秒鐘,如果你不輸入任何東西,它將載入在配置檔案中指定的預設核心

GRUB能夠了解檔案系統的資訊(老一代的LILO就沒有這個能力)

GRUB配置檔案是/boot/grub/grub.conf(/etc/grub.conf是它的一個連結檔案)。這是CentOS系統中grub.conf的樣例

 

核心

按照grub.conf中“root="配置來掛載根檔案系統

核心執行/sbin/init程式

既然這是被Linux核心執行的第一個程式,它的程序ID(PID)當然就是1了。執行”ps -ef | grep init"來檢視一下PID。

 

initrd表示Initial RAM Disk

initrd被核心用作臨時的根目錄,直到核心啟動完成並且真正的根目錄掛載成功。它也包括一些編譯好的必要的驅動程式,這些程式有助於它訪問硬碟和其他硬體。

 

 

 

磁碟分割完畢後還需要進行格式化(format),之後作業系統才能夠使用這個檔案系統。 為什麼需要進行『格式化』呢?

這是因為每種作業系統所設定的檔案屬性/權限並不相同, 為了存放這些檔案所需的資料,因此就需要將分割槽進行格式化,
 

以成為作業系統能夠利用的『檔案系統格式(filesystem)』。

每種作業系統能夠使用的檔案系統並不相同。 舉例來說, windows 98 以前的微軟作業系統主要利用的檔案系統是 FAT (或 FAT16),windows 2000 以後的版本有所謂的 NTFS 檔案系統     至於 Linux 的正統檔案系統則為 Ext2 (Linux second extended file system, ext2fs)這一個 ,

在預設的情況下, windows 作業系統是不會認識 Linux 的 Ext2 的 

123.PNG

 

那麼檔案系統是如何運作的呢?這與作業系統的檔案資料有關。較新的作業系統的檔案資料除了檔案實際內容外, 通常含有非常多的屬性,例如 Linux 作業系統的檔案權限(rwx)與檔案屬性(擁有者、群組、時間參數等)。

檔案系統通常會將這兩部份的資料分別存放在不同的區塊,權限與屬性放置到 inode 中,至於實際資料則放置到 data block 區塊中。 另外,還有一個超級區塊 (superblock) 會記錄整個檔案系統的整體資訊,包括 inode 與 block 的總量、使用量、剩餘量等。

 

每個 inode 與 block 都有編號,至於這三個資料的意義可以簡略說明如下:

  • superblock:記錄此 filesystem 的整體資訊,包括inode/block的總量、使用量、剩餘量, 以及檔案系統的格式與相關資訊等;
  • inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的資料所在的 block 號碼;
  • block:實際記錄檔案的內容,若檔案太大時,會佔用多個 block 。

 

Superblock 是記錄整個 filesystem 相關資訊的地方, 沒有 Superblock ,就沒有這個 filesystem 了。他記錄的資訊主要有:

  • block 與 inode 的總量;
  • 未使用與已使用的 inode / block 數量;
  • block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128bytes 或 256bytes);
  • filesystem 的掛載時間、最近一次寫入資料的時間、最近一次檢驗磁碟 (fsck) 的時間等檔案系統的相關資訊;
  • 一個 valid bit 數值,若此檔案系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。

 

 Ext2 檔案系統在格式化的時候基本上是區分為多個區塊群組 (block group) 的,每個區塊群組都有獨立的 inode/block/superblock 系統。感覺上就好像我們在當兵時,一個營裡面有分成數個連,每個連有自己的聯絡系統, 但最終都向營部回報連上最正確的資訊一般!這樣分成一群群的比較好管理啦!整個來說,Ext2 格式化後有點像底下這樣: ​​​​​​​

unnamed.jpg

 

我們將 inode 與 block 區塊用圖解來說明一下,如下圖所示,檔案系統先格式化出 inode 與 block 的區塊,假設某一個檔案的屬性與權限資料是放置到 inode 4 號(下圖較小方格內),而這個 inode 記錄了檔案資料的實際放置點為 2, 7, 13, 15 這四個 block 號碼,此時我們的作業系統就能夠據此來排列磁碟的讀取順序,可以一口氣將四個 block 內容讀出來! 那麼資料的讀取就如同下圖中的箭頭所指定的模樣了。 ​​​​​​​

 

filesystem-1.jpg

 

資料來源:

https://zh.wikipedia.org/wiki/%E6%9F%B1%E9%9D%A2-%E7%A3%81%E5%A4%B4-%E6%89%87%E5%8C%BA

https://lionrex.pixnet.net/blog/post/118529271

https://dywang.csie.cyut.edu.tw/dywang/linuxSystem/node14.html

https://blog.xuite.net/wliomsky/wliomsky/21453820-%E7%A1%AC%E7%A2%9F%E5%A4%A7%E5%B0%8F%E4%BA%8B

http://linux.vbird.org/linux_basic/0105computers.php#pc_hd

https://hongxiaohong.gitbooks.io/linux-handle-book/ying_die_yu_ying_die_fen_ge_qu.html ​​​​​​​

arrow
arrow
    創作者介紹
    創作者 kingsman 的頭像
    kingsman

    Kingsman的部落格

    kingsman 發表在 痞客邦 留言(0) 人氣()