MBR
主引導記錄(Master Boot Record)512Bytes
BootLoader程式(446Bytes)
LILO: LInux LOader不能引導1024柱面以後的分區核心(嵌入式)
GRUB: GRand Unified Bootloader
剩餘空間(64bBytes)
16Bytes
辨別一個分區4個主分區 Or 主+擴充 <= 4
2Bytes
Magic Number(标記MBR是否有效)
檔案系統
是一個管理軟體,他本身不在此分區上,用Metedata編錄,實作按名對衆多檔案的快速通路
分區存儲空間劃分為2片:
1、中繼資料存儲區(直接通路塊編号)
塊位圖:為資料存儲區每一塊有1位對應的存儲位,1被使用,0空閑,加速查找空閑磁盤塊的機制。
IndexNode表:每個INode條目均有全局唯一的号碼,權限、大小、屬主組、時間戳、對應的磁盤塊編号
INode表位圖:為INode表存儲區的每一塊有1位對應的存儲位,1被使用,0空閑,加速查找空閑磁盤塊的機制。(INode表也有位圖,因為也需要存儲)
super global block全局描述資訊,目前磁盤有多少塊組
block group塊位圖,INode位圖等
2、資料存儲區(由邏輯存儲單元BLOCK組合,每個塊有編号,1表示非空閑,0表示空閑)
目錄也是檔案,也需要占據磁盤塊:IndexNode 檔案名 (目錄項 dentry)
定位 /var/log/messages 可以建立緩存條目,不用每次都查找
根INode(塊編号)-->根BLOCK(var對應的INode号碼)-->varINode(var塊編号)-->varBLOCK(log對應的INode号碼)-->logINode(log塊編号)-->logBLOCK(message對應的INode号碼)-->messageINode(message塊編号)-->message資料
建立/backup/test.txt10k
首先掃描INode表位圖,尋找空閑INode,并占用此條目,找到backup目錄對應的磁盤塊,建立test.txt名并對應之前找到的空閑INode,掃描塊位圖,給大于存儲和盡量連續的磁盤塊,剩下的磁盤塊歸為空閑在塊位圖中。
删除/backup/test.txt10k
找到backup對應的磁盤塊,删除對應條目(INode号碼+檔案名);在INode表位圖中标記其INode為可用,最後在塊位圖中标記其塊可用
複制
建立檔案+填充磁盤塊
剪切(不跨分區)
隻是修改路徑制定
剪切(新分區建立新檔案)
把老分區磁盤塊填充至新分區磁盤塊,删除老分區檔案(磁盤塊還在)
連結檔案
符号連結
本來INode應該存儲磁盤塊編号的内容變為一串字元串(路徑名),存儲大小等于字元串大小
硬連結
指向同一個INode的不同路徑彼此之間可以叫做硬連結共用磁盤塊
ls -lnumber 此檔案被硬連結的次數
小于等于1的時候才能真正删除
删除硬連結檔案隻是删除其目錄對應磁盤塊條目中的條目
建立硬連結
1、隻能對檔案建立,不能對目錄
2、不能跨檔案系統(分區),因為每個分區的INode号碼是唯一的,不可以在不同目錄下
3、建立硬連結會增加檔案被連結的次數
ln /tmp/link/a /tmp/link/b
ls -i /tmp/link/
1966427 a 1966427 b
建立符号連結
1、可以對目錄和檔案
2、可以跨檔案系統
3、不會增加被連結次數
rm a
ln -s /tmp/link/b /tmp/link/a
1966428 a 1966427 b
du 顯示目錄和目錄中每個檔案占用磁盤空間大小并顯示
-s 目錄及其目錄中所有子檔案占據磁盤空間大小之和并顯示
-h 顯示機關
df 顯示所有分區使用情況,以1K-blocks的方式顯示
-h 顯示磁盤所有分區使用大小size
-i 顯示磁盤所有分區使用情況,以INode方式顯示
裝置檔案
存儲在Inode當中的主裝置号,次裝置号,不占空間,沒有大小
裝置檔案的主要目的是作為裝置的通路入口
b按塊為機關,随機通路裝置硬碟
c按字元為機關,線性裝置
crw-rw---- 1 root tty 4, 61 Jul 25 09:43 tty61
主裝置号
辨別裝置類型
次裝置号
辨別同一種類型中不同裝置
p也沒有大小
mknod[OPTION]...NAME TYPE [MAJOR MINOR]
-m 制定權限 mknod -m 640 mydev c 66 0
硬碟裝置的裝置檔案名
IDE,ATA hd
SATA sd 看核心識别的先後次序 USB SATA SCSIsda sdb sdc /dev/sda1..4 5(第一個邏輯分區)
SCSI sd
USB sd
a,b,c.....來差別同一種類型下的不同裝置
IDE
第一個IDE口主、從
/dev/hda /dev/hdb/dev/hda1..4 5(第一個邏輯分區)
第二個IDE口主、從
/dev/hdc /dev/hdd
檢視目前系統識别了幾塊硬碟
fdisk -l [/dev/to/some_device_file]
管理磁盤
分區檔案系統本身屬于核心中的功能,建立檔案系統需要使用者控件的指令結合核心所支援的這種功能來完成
不同核心支援的檔案系統類型不盡相同
每個分區都是一個獨立的檔案系統,每個分區可以使用不用檔案系統,它們最終都要歸并到根下
這種歸并的方式稱為挂在,根是自引用,核心脫離硬碟知道根在哪裡
例如 /usr目錄如果/在1号分區,那麼/usr目錄就是/磁盤塊中的條目,/usr目錄對應的磁盤塊中存儲該目錄下的所有檔案(INode+檔案名)條目
如果/下usr目錄挂載到2好分區,那麼usr就作為通路2号分區的入口,根據入口可直接寫入資料到2号分區
不管是預設,還是作為入口,/下usr目錄都是位于1号分區的
就算再加一塊硬碟,向通路,其實也是在/下添加條目,先通路/找到該條目,作為入口過去。
可見/分區至關重要,稱作/檔案系統(/bin /sbin 不能獨立出去)
低級格式化
建立磁道
進階格式化
建立檔案系統
虛拟檔案系統(VFS)
支援衆多不同類型的檔案系統,類似于庫,讓上層通過VFS調用不同下層的時候看起來一樣。
常見檔案系統類型
FAT32 NTFS ISO9660 CIFS ext2 ext3 ext4 xfs reiserfs jfs nfs ocfs2 gfs2 swap
VFS
使用者程序沒有去操作硬體的特權,這些程序所運作的模式就是使用者模式,運作的空間叫做使用者空間
CPU從内而外有4個環
核心運作在 最裡面的是ring 0 (核心空間)檔案系統應該在核心空間
VFS也是核心的子產品功能,對于使用者進來看隻需要調用VFS接口,後續接口有VFS來完成判定
使用者程序運作在 最外面ring 3 (使用者空間)
系統調用功能調用的接口(函數)
兩個内容不同的檔案是無法使用同一個磁盤塊的
磁盤塊是檔案系統對硬碟的一種邏輯管理機制,跟硬碟本身沒有關系
概念
1024byte=1k 1024k=1M 1024M=1G 1024G=1T
資料存數區域磁盤塊有10000個,應該事先預留多少個INode呢?
每多少個塊建立一個INode,每8K建立一個INode,每個塊大小是多少呢?
對于作業系統而言,塊大是确定的,指的是2的N次方個位元組
一般來講block size 1024Byte 2048Byte 4096Byte
1KB 2KB 4KB
實際上到底有多少種情況取決于CPU,因為磁盤上的資料是不能被直接通路的
CPU使用資料必須先裝進記憶體中,一個塊不可能隻裝一半資料,要麼一個塊全裝進去,要麼一下裝幾個塊
記憶體的空間頁框(page)大小 一般一個page可以放入 1個磁盤塊 2磁盤塊 4個磁盤塊
4KB2KB1KB
page的大小通常是4K
是以如果是1K的磁盤塊 一次需要裝進4個
頁框大小取決于CPU平台不一樣
一個磁盤塊隻能屬于一個檔案,存儲最小機關
小檔案多就使用1K,減少浪費,大檔案多就使用4K,加快載入記憶體速度,page通常都為4K
通常隻有普通檔案和目錄占用磁盤塊大小
一個分區中資料存儲區又分為若幹磁盤塊組
一個分區應該有幾個磁盤塊組,取決于空間大小
一個磁盤塊組應該有多大,取決于塊位圖和INode位圖的大小
一個磁盤塊組中的每一塊對應其塊位圖中的一個位,每個位圖通常使用一個磁盤塊進行辨別的,比如一個磁盤塊1K
一個磁盤塊組隻能有一個對應的位圖
1K=1024*8=8192bit 一個bit可以辨別一個磁盤塊(一個磁盤塊可能是 1K 2K 4K) 這麼多個塊組合磁盤塊組
分區構成
中繼資料區
1、super block(備份)
多少塊組、每個塊組中包含多少塊、塊大小、空閑磁盤塊、已用磁盤塊、空閑INode、已用INode
2、GDT(塊組描述表)
每個塊組的塊組名、每個快組的起始和結束塊編号
3、塊位圖
4、INode表(一個磁盤塊組隻能有一個Inode表)
5、INode表位圖
資料存儲區
1、BootBlock多系統時候,存放另一個系統的bootloader
2、N個塊組
每個塊組中中繼資料區
1、super block不是每個塊組中都有
2、GDT(快組描述表)每個塊組的塊組名、每個快組的起始和結束塊編号
3、塊位圖
4、INode表
5、INode表位圖
資料存數區
1、Data Blocks
本文轉自 ftmoonfans 51CTO部落格,原文連結:http://blog.51cto.com/soulboy/1265231