存儲管理:
一、硬盤、分區及文件系統
二、硬盤配額限制
一、硬盤、分區、文件系統
硬盤的物理概念:硬盤其實由許多的圓形硬盤片組成,按照硬盤片能容納的數據量,分為單盤(一塊硬盤裡面只有一個硬盤片)或者多盤(一塊硬盤裡含有多個硬盤片)的硬盤。
硬盤裡有刺磁頭(head)在硬盤片上讀寫,磁頭固定在機械手臂上,機械手臂上有多個磁頭,可以進行讀取。當磁頭固定不動時(假設機械手臂不動),硬盤片轉一圈所畫出來的圓就是磁道。一塊硬盤可能有多個硬盤片,所有硬盤片上相同半徑的那個磁道就組成了柱面。
兩個硬盤片上的同一磁道就是一個柱面。這個柱面也是分區時最小的單位;由圓心想外畫直線,可以將磁道再細分為扇區,扇區就是硬盤片上最小的存儲物理量。通常一個扇區的大小為512字節。這些就是硬盤的基本組成。
在計算整個硬盤的存儲量時,簡單的公式就是:柱面*磁頭*扇區*512字節
分區:為什麼要分區呢?因為我們必須要告訴操作系統:這塊硬盤可以訪問的區域是由A柱面到B柱面,如此一來操作系統才能控制磁盤的磁頭去A~B范圍內的柱面訪問數據,如果沒有指定A-B柱面為一個分區或者D-E柱面為一個分區那麼操作系統就不知道該到哪裡去訪問數據了,分區大小的要點是:起始柱面與結束柱面。
那麼分區的起始與結束柱面的信息存放在哪裡呢?就是MBR(Master Boot Recorder)主引導區,它是硬盤的第0軌上的,這是計算機啟動後要去使用硬盤時必須首先讀取的第一個區域!它記錄了所有的分區信息,以及啟動時可以寫入引導程序的位置。當一個硬盤的MBR壞掉時,由於分區的信息不見了,這個硬盤也可以說是壽終正寢了。
MRB一般為512Byte(字節),因此mrb僅能提供最多4個分區的記憶,這就是主分區P(primary)與擴展分區E(Extended)最多只能有4個的原因,如果超過4個分區就要使用3P+E的方式:3個主分區+一個擴展分區,再由一個擴展分區劃分成若干個邏輯分區使用。
這裡給一個備份硬盤MBR的命令:dd if /dev/sda /mbr bs=512 count=1 將sda硬盤的mbr備份到/mbr文件
Mbr是硬盤的第一個區域,大小為512B,dd命令可以根據設備進行備份,bs=512為備份規劃的一個塊的大小,如果沒有指定默認為512,count=1指bs的數量。這裡只備份mbr所以只需要備份第一個512B大小的區域就可以了。如果要備份整個分區:dd if /dev/sda5 /sda5,if輸入文件,of輸出文件。
這裡一個block默認規劃為了4K,所以mbr這個文件占用了一個block大小,浪費了4096B-512B的空間
文件系統:在高職系統分區所在的起始柱面與結束柱面後,隨後要將分區格式化為“操作系統能夠識別的文件系統”因為每個操作系統能夠識別的文件系統並不相同(windows:fat、fat32、ntfs... linux:ext2、ext3...),例如windows在默認狀態下就無法識別linux的文件系統,不同的文件系統有不同的數據讀取方式區分。
歸根結底數據時要存到硬盤中的,在硬盤(分區)中存儲數據的最小單位是扇區。而扇區只有512B大小,磁頭在讀取的時候要一個扇區一個扇區的移動,這樣160G的硬盤要分多少個512的扇區啊,磁頭在讀取數據時候要一個扇區一個扇區的移動,效率太低下了。所以為了解決這個問題就出現了邏輯塊block的概念,block的容量是以扇區的大小為基礎,是扇區大小的整數倍,512的整數倍512、1024、2096...
查看block的命令:dumpe2fs -h /dev/sda
一個文件或目錄就存儲在一個block或者多個中。假設block塊的大小是2048B,一個文件的大小是512B,那麼這個文件就占用了一個block塊,其中有2048-512B的容量被浪費了。所以在劃分分區的時候一定要根據使用的數據類型來規劃block的大小。
現在知道了分區中是以block作為最小單位的,那麼在分區中的第一個內容block中記載著這個分區中所有的block、indoe還有文件關聯等信息,這個分區中第一個塊被稱為超級塊,功能類似於硬盤中的mbr區域。
文件和目錄的索引和文件的時間
文件在操作系統中分為2個元素,一個是indoe一個是block,indoe就是記錄文件內容的一個指針,而block中才是文件真正的內容。操作系統在讀取一個文件的時候首先要找到文件的indoe,然後根據indoe上記錄的文件的block內容的位置去讀取真正的文件的內容。
目錄和文件類似,也具有indoe和block2個元素,目錄的indoe記錄了目錄的block所在的位置,而目錄的block則記錄了目錄下的文件的indoe的位置信息。這樣操作系統需要訪問某個文件的時候就會先去查找這個文件所在目錄的indoe,通過目錄的indoe去查找到了目錄的block,然後從目錄的block中查找到了目錄下的該文件的indoe,然後在從該文件的indoe中知道了該文件的block的位置,然後去讀取該文件的block塊的內容,才是真正的讀取了文件的內容。舉個例子,我們在同一個分區中剪切文件的時候(不管多大)速度很快,而在不同分區之間剪切文件的時候就相對慢的多,是為什麼呢,是因為在同一個分區中文件的block是存在的,而改變了文件的位置只是更改一下indoe的指針指向block的位置而已,所以很快。而將一個文件剪切到另一個分區,因為另一個分區並沒有這個文件的block和indoe所以需要創建block和indoe,故而慢。
基本上indoe和文件的數量是對應的,當文件過大,比如一個文件的大小占用了多個block的時候,那麼這個文件的indoe就指向了多個block。這就是每次安裝完操作系統,空分區也會少一些空間的緣故,一方面是系統自動建立了indoe表占用了空間,一方面是系統默認有一些預留空間以防止空間不足的時候應用程序啟動的時候產生臨時文件而沒有空間。
文件或目錄有三個時間,分別是Access-time、Modify-time、Change-time,查看命令stat
linux-suse:/ # stat /test
Access: 2013-05-23 06:42:14.000000000 -0400 文件最後訪問時間
Modify: 2013-05-23 06:42:14.000000000 -0400 文件內容最後的更改時間
Change: 2013-05-23 06:42:14.000000000 -0400 文件屬性最後更改時間
Access-time是文件的最後訪問時間,比如用test restart、vi test、cat test等訪問過文件,不管內容是否改變就會有變化
Modify-time是文件內容的最後更改時間,比如用vi在文件中添加、修改內容時會改變
Change-time是文件屬性的最後更改時間,比如文件的權限、位置(indoe發生變化了)、屬組等發生變化話會改變
touch是創建文件的命令,但是如果對於一個已經存在的文件touch test就會更改test的三個時間到當前,多用於由於時間戳產生的系統文件無法運行,服務無法運行等故障。
在ls -l 中顯示的文件時間是Modify-time
分區的操作
在linux中使用fdisk來做磁盤的分區規劃等操作
使用命令為fdisk /dev/sda(磁盤設備)
進入fdisk的命令界面按h是查看幫助
主要參數:p 查看分區
n 創建一個分區P為主分區、E為邏輯分區
d 刪除一個分區
w 保存
q 退出不保存
L 查看文件系統對應的ID號
例如:創建一個500M的主分區和一個1G的邏輯分區
1.添加硬盤一塊
2.使用fdisk打開該硬盤
fdisk /dev/sdb
3.n創建主分區和邏輯分區(從擴展分區中創建)
4.查看創建的分區確認
5.保存w
這個First sector是分區起始柱面,Last sector是分區結束柱面。這個柱面的多少來決定分區的大小,這個分區一共可以用2048-10485759這麼多個柱面(應該是5G的大小)前2048應該是用於indoe表了,所以空間柱面就從2048可以用,這個磁盤5G的總共有10485759這麼多個柱面,但是我們一般不知道一個柱面是多少G或者多少M,所以我們再起始柱面的時候默認就從2048開始用(也可以從3048、5987開始用,但是這樣就會造成空間使用不連續磁盤讀取數據效率低了),在Last sector的時候可以用容量來表示,+500M就是增加500M的容量,讓系統自己計算是多少個柱面就可以了,+1G就是分配了1G的空間。去掉“+”表示最大空間
6.刷新內核識別新增分區(如果是刪除分區需要在內核中先刪除緩存記錄在刷新)
partprobe或者partx -a /dev/sdb
當刪除原有分區在創建新分區時候要使用partx -d /dev/sdb 再用 partx -a /dev/sdb
man對於partprobe或者partx解釋:
1.partprobe is a program that informs the operating system kernel of par-tition table changes, by requesting that the operating system re-read the partition table.
2.partx - tell the Linux kernel about the presence and numbering of on-disk partitions
8.掛載使用
9.開機掛載
補充:1.硬盤檢測壞道命令:fsck /dev/sdb 和
2.將內存中的數據裝回硬盤sync,需要在關機前多執行幾次保證數據不會在內存中沒回到硬盤而斷電丟失