Linux中的文件存儲,磁盤調度

磁盤調度

磁盤訪問延遲 = 隊列時間 + 控制器時間 + 尋道時間 + 旋轉時間 + 傳輸時間

磁盤調度的目的是減小延遲,其中前兩項可以忽略,尋道時間是主要矛盾。

磁盤調度算法

  • FCFS

    先進先出的調度策略,這個策略具有公平的優點,因爲每個請求都會得到處理,並且是按照接收到的順序進行處理。

  • SSTF(Shortest-seek-time First 最短尋道時間優先)

    選擇使磁頭從當前位置開始移動最少的磁盤I/O請求,所以 SSTF 總是選擇導致最小尋道時間的請求。

    總是選擇最小尋找時間並不能保證平均尋找時間最小,但是能提供比 FCFS 算法更好的性能,會存在飢餓現象。

  • SCAN

    SSTF+中途不回折,每個請求都有處理機會。

    SCAN 要求磁頭僅僅沿一個方向移動,並在途中滿足所有未完成的請求,直到它到達這個方向上的最後一個磁道,或者在這個方向上沒有其他請求爲止。

    由於磁頭移動規律與電梯運行相似,SCAN 也被稱爲電梯算法。

    SCAN 算法對最近掃描過的區域不公平,因此,它在訪問局部性方面不如 FCFS 算法和 SSTF 算法好。

  • C-SCAN

    SCAN+直接移到另一端,兩端請求都能很快處理。

    把掃描限定在一個方向,當訪問到某個方向的最後一個磁道時,磁道返回磁盤相反方向磁道的末端,並再次開始掃描。

    其中“C”是Circular(環)的意思。

  • LOOK 和 C-LOOK

    釆用SCAN算法和C-SCAN算法時磁頭總是嚴格地遵循從盤面的一端到另一端,顯然,在實際使用時還可以改進,即磁頭移動只需要到達最遠端的一個請求即可返回,不需要到達磁盤端點。這種形式的SCAN算法和C-SCAN算法稱爲LOOK和C-LOOK調度。這是因爲它們在朝一個給定方向移動前會查看是否有請求。

文件系統

分區表

  • MBR:支持最大卷爲2 TB(Terabytes)並且每個磁盤最多有4個主分區(或3個主分區,1個擴展分區和無限制的邏輯驅動器)
  • GPT:支持最大卷爲18EB(Exabytes)並且每磁盤的分區數沒有上限,只受到操作系統限制(由於分區表本身需要佔用一定空間,最初規劃硬盤分區時,留給分區表的空間決定了最多可以有多少個分區,IA-64版Windows限制最多有128個分區,這也是EFI標準規定的分區表的最小尺寸。另外,GPT分區磁盤有備份分區表來提高分區數據結構的完整性。

RAID 技術

磁盤陣列(Redundant Arrays of Independent Disks,RAID),獨立冗餘磁盤陣列之。原理是利用數組方式來作磁盤組,配合數據分散排列的設計,提升數據的安全性。

  • RAID 0

    RAID 0是最早出現的RAID模式,需要2塊以上的硬盤,可以提高整個磁盤的性能和吞吐量。

    RAID 0沒有提供冗餘或錯誤修復能力,其中一塊硬盤損壞,所有數據將遺失。

  • RAID 1

    RAID 1就是鏡像,其原理爲在主硬盤上存放數據的同時也在鏡像硬盤上寫一樣的數據。

    當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工作。因爲有鏡像硬盤做數據備份,所以RAID 1的數據安全性在所有的RAID級別上來說是最好的。

    但無論用多少磁盤做RAID 1,僅算一個磁盤的容量,是所有RAID中磁盤利用率最低的。

  • RAID 2

    這是RAID 0的改良版,以漢明碼(Hamming Code)的方式將數據進行編碼後分區爲獨立的比特,並將數據分別寫入硬盤中。因爲在數據中加入了錯誤修正碼(ECC,Error Correction Code),所以數據整體的容量會比原始數據大一些,RAID2最少要三臺磁盤驅動器方能運作。

  • RAID 3
    採用Bit-interleaving(數據交錯存儲)技術,它需要通過編碼再將數據比特分割後分別存在硬盤中,而將同比特檢查後單獨存在一個硬盤中,但由於數據內的比特分散在不同的硬盤上,因此就算要讀取一小段數據資料都可能需要所有的硬盤進行工作,所以這種規格比較適於讀取大量數據時使用。

  • RAID 4

它與RAID 3不同的是它在分區時是以區塊爲單位分別存在硬盤中,但每次的數據訪問都必須從同比特檢查的那個硬盤中取出對應的同比特數據進行覈對,由於過於頻繁的使用,所以對硬盤的損耗可能會提高。(塊交織技術,Block interleaving)

RAID 2/3/4 在實際應用中很少使用

  • RAID 5

    RAID Level 5是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案。它使用的是Disk Striping(硬盤分區)技術。

    RAID 5至少需要三塊硬盤,RAID 5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,並且奇偶校驗信息和相對應的數據分別存儲於不同的磁盤上。

    RAID 5 允許一塊硬盤損壞。

    實際容量 Size = (N-1) * min(S1, S2, S3 ... SN)

  • RAID 6

    與RAID 5相比,RAID 6增加第二個獨立的奇偶校驗信息塊。兩個獨立的奇偶系統使用不同的算法,數據的可靠性非常高,即使兩塊磁盤同時失效也不會影響數據的使用。

    RAID 6 至少需要4塊硬盤。

    實際容量 Size = (N-2) * min(S1, S2, S3 ... SN)

  • RAID 10/01(RAID 1+0,RAID 0+1)

    RAID 10是先鏡射再分區數據,再將所有硬盤分爲兩組,視爲是RAID 0的最低組合,然後將這兩組各自視爲RAID 1運作。

    RAID 01則是跟RAID 10的程序相反,是先分區再將數據鏡射到兩組硬盤。它將所有的硬盤分爲兩組,變成RAID 1的最低組合,而將兩組硬盤各自視爲RAID 0運作。

    當RAID 10有一個硬盤受損,其餘硬盤會繼續運作。RAID 01只要有一個硬盤受損,同組RAID 0的所有硬盤都會停止運作,只剩下其他組的硬盤運作,可靠性較低。如果以六個硬盤建RAID 01,鏡射再用三個建RAID 0,那麼壞一個硬盤便會有三個硬盤脫機。因此,RAID 10遠較RAID 01常用,零售主板絕大部份支持RAID 0/1/5/10,但不支持RAID 01。

    RAID 10 至少需要4塊硬盤,且硬盤數量必須爲偶數。

常見文件系統

  • Windows: FAT, FAT16, FAT32, NTFS
  • Linux: ext2/3/4, btrfs, ZFS
  • Mac OS X: HFS+

Linux文件權限

Linux文件採用10個標誌位來表示文件權限,如下所示:

-rw-r--r--  1 skyline  staff    20B  1 27 10:34 1.txt
drwxr-xr-x   5 skyline  staff   170B 12 23 19:01 ABTableViewCell

第一個字符一般用來區分文件和目錄,其中:

  • d:表示是一個目錄,事實上在ext2fs中,目錄是一個特殊的文件。
  • -:表示這是一個普通的文件。
  • l: 表示這是一個符號鏈接文件,實際上它指向另一個文件。
  • b、c:分別表示區塊設備和其他的外圍設備,是特殊類型的文件。
  • s、p:這些文件關係到系統的數據結構和管道,通常很少見到。

第2~10個字符當中的每3個爲一組,左邊三個字符表示所有者權限,中間3個字符表示與所有者同一組的用戶的權限,右邊3個字符是其他用戶的權限。

這三個一組共9個字符,代表的意義如下:

  • r(Read,讀取):對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽目錄的權限
  • w(Write,寫入):對文件而言,具有新增、修改文件內容的權限;對目錄來說,具有刪除、移動目錄內文件的權限。
  • x(eXecute,執行):對文件而言,具有執行文件的權限;對目錄來說該用戶具有進入目錄的權限。

權限的掩碼可以使用十進制數字表示:

  • 如果可讀,權限是二進制的100,十進制是4;

  • 如果可寫,權限是二進制的010,十進制是2;

  • 如果可運行,權限是二進制的001,十進制是1;

  • 具備多個權限,就把相應的 4、2、1 相加就可以了:

    若要 rwx 則 4+2+1=7
    若要 rw- 則 4+2=6
    若要 r-x 則 4+1=5
    若要 r-- 則 =4
    若要 -wx 則 2+1=3
    若要 -w- 則 =2
    若要 --x 則 =1
    若要 --- 則 =0

默認的權限可用umask命令修改,用法非常簡單,只需執行umask 777命令,便代表屏蔽所有的權限,因而之後建立的文件或目錄,其權限都變成000,

依次類推。通常root帳號搭配umask命令的數值爲022、027和 077,普通用戶則是採用002,這樣所產生的權限依次爲755、750、700、775。

chmod命令

chmod命令非常重要,用於改變文件或目錄的訪問權限。用戶用它控制文件或目錄的訪問權限。

該命令有兩種用法。一種是包含字母和操作符表達式的文字設定法;另一種是包含數字的數字設定法。

  1. 文字設定法

chmod [who] [+ | - | =] [mode] 文件名

命令中各選項的含義爲:

操作對象who可是下述字母中的任一個或者它們的組合:

  • u 表示“用戶(user)”,即文件或目錄的所有者。
  • g 表示“同組(group)用戶”,即與文件屬主有相同組ID的所有用戶。
  • o 表示“其他(others)用戶”。
  • a 表示“所有(all)用戶”。它是系統默認值。

操作符號可以是:

    • 添加某個權限。
    • 取消某個權限。
  • = 賦予給定權限並取消其他所有權限(如果有的話)。

設置mode所表示的權限可用下述字母的任意組合:

  • r 可讀。
  • w 可寫。
  • x 可執行。
  • X 只有目標文件對某些用戶是可執行的或該目標文件是目錄時才追加x 屬性。
  • s 在文件執行時把進程的屬主或組ID置爲該文件的文件屬主。方式“u+s”設置文件的用戶ID位,“g+s”設置組ID位。
  • t 保存程序的文本到交換設備上。
  • u 與文件屬主擁有一樣的權限。
  • g 與和文件屬主同組的用戶擁有一樣的權限。
  • o 與其他用戶擁有一樣的權限。

文件名:以空格分開的要改變權限的文件列表,支持通配符。

在一個命令行中可給出多個權限方式,其間用逗號隔開。例如:chmod g+r,o+r example 使同組和其他用戶對文件example 有讀權限。

  1. 數字設定法

直接使用數字表示的權限來更改:

例: $ chmod 644 mm.txt

chgrp命令

功能:改變文件或目錄所屬的組。

語法:chgrp [選項] group filename

例:$ chgrp - R book /opt/local /book

改變/opt/local /book/及其子目錄下的所有文件的屬組爲book。

chown命令

功能:更改某個文件或目錄的屬主和屬組。這個命令也很常用。例如root用戶把自己的一個文件拷貝給用戶xu,爲了讓用戶xu能夠存取這個文件,root用戶應該把這個文件的屬主設爲xu,否則,用戶xu無法存取這個文件。

語法:chown [選項] 用戶或組 文件

說明:chown將指定文件的擁有者改爲指定的用戶或組。用戶可以是用戶名或用戶ID。組可以是組名或組ID。文件是以空格分開的要改變權限的文件列表,支持通配符。

例:把文件jsbintask.c的所有者改爲jsbintask。

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