低級格式化: 廠商設置,用於創建磁盤隧道
Paration:劃分獨立的文件系統
MBR:主引導記錄(512Byte) 只關重要
Master Boot Record
446Bytes:BootLoader
64Bytes:
16Bytes:標識一個主分區
2Bytes:Magic Number
主分區選擇一個作為擴展分區
主+擴戰<=4 做多只能有4個主分區
擴展分區裏存放指針指向更大的空間在更大的空間可以劃分多個分區
按柱面存儲同時按柱面分區
磁盤的讀寫與延遲:磁頭轉到數據所在的相應磁道以及數據需要再轉一圈與磁頭相碰
磁道越靠近外圍,讀寫速率越高,因此經常訪問的數據存儲在磁道外圍
文件系統本身不在分區上,文件系統裏的數據在分區上,文件系統只是一種軟件
文件系統:
元數據存儲區:
塊位圖:位圖為0表示沒用過的邏輯存儲區
iNode去
數據存儲區:
邏輯存儲單元(block 磁盤塊) 有編號
iNode(索引):存儲有屬主屬組擴展屬性等,就是沒有文件名
文件名在目錄下
例如:/var/log/messages
先在iNode位圖中找到根所對應的iNode號
再根據根的iNode號找到對應的存儲單元
根的存儲單元裏存儲的是var文件名以及var對應的iNode號
回到塊位圖
根據找到var對應的iNode,找到對應的存儲單元
var的存儲單元裏存儲的是log文件名及log對用的iNode
回到塊位圖
根據找到log的iNode,找到對應存儲單元
log的存儲單元裏存儲的是messag文件名及messag對應的iNode
回到塊位圖
根據message的iNode,找到對應的存儲單元
所以目錄不是容器,它也是個文件,是個路徑映射表
創建文件 例如/backup/a.txt 假設backup目錄已經存在
先掃描iNode位圖找一個沒人用的iNode號
找backu對應的iNode,根據iNode找到存儲塊
存儲塊的內容為a.txt及剛開始的iNode號
到塊位圖中給其分配n個存儲塊
最開始找的iNode號即指向這些存儲塊
刪除文件:
將對應的iNode號標為未使用
將對應的存儲塊標記為空(原來的數據並未刪除)新的數據來時選擇直接覆蓋
同一分區剪切 速度比較快
只是將原來的目錄裏對應的映射內容刪除了
在新的目錄裏創建映射
文件的iNode和磁盤塊(存儲單元)都未動
每個分區有很多塊組,沒一個塊組都有源數據存儲區和數據存儲區
硬鏈接和符號鏈接(軟鏈接)
硬鏈接指向的是同一個文件 iNode號相同,只是有不同的路徑
軟鏈接指向的是不同的文件 iNode號不同
硬鏈接刪除其中一個也能訪問另一個
軟鏈接刪除a-->b中的b 則a不能訪問
找到/backup/a/m.txt的iNode 但是該iNode不是指向存儲塊而是指向/backup/b/n.txt的路徑名稱
則該/backup/a/m.txt文件的大小顯示為/backup/b/n.txt的字符個數
ln [-s -v] SRC DEST
硬鏈接:
1、只能對文件創建,不能用於目錄
2、不能跨文件系統
3、創建硬鏈接會增加文件被鏈接的次數
4、原文件被刪除後仍能通過鏈接文件訪問內容
符號鏈接:
1、可用於目錄
2、可跨文件系統
3、不會增加被鏈接文件的鏈接次數
4、大小為指定路徑所包含的字符個數
5、原文件刪除後鏈接文件不能訪問原內容
du
-s
-h
df:分區使用情況
-i iNode
-h
-P 在同一行顯示
/dev
major number
minor number
標識同一類型的不同設備
主次設備號均放在iNode中,不占實際物理內存
mknod 創建塊設備文件或字符設備文件
mknod [options] NAME TYPE [MAJOR MINOR]
-m MODE
硬盤設備的設備文件名:
IDE,ATA: hd
STAT:sd
SCSI: sd
USB: sd
a,b,c...來區別同一種類型下的不同設備
IDE
第一個IDE口:主、從
/dev/hda /dev/hdb
第二個IDE口:主、從
/dev/hdc /dev/hdd
sda,sdb,sdc...
hda:
hda1:第一個主分區
hda2:
hda3:
hda4:
hda5:第一個邏輯分區
查看當前系統識別了幾塊硬盤
fdisk -l [/dev/to/some_device_file]
文件系統屬於內核的功能
mkfs -t 文件系統類型
VFS(Virtual File System)
mkdir 這個命令可能只對ext3這個文件類型的系統有效,對於其他文件系統無效,為了讓mkdir對於所有類型的文件系統都有效,在所有不同類型的文件系統上抽象出一個VFS
VFS為mkdir提供統一的接口
一個分區就是一個獨立的文件系統
只有根是自引用的
例如:/usr/var 假若根在第一個分區,若將usr關聯到第二分區,則usr本身在第一分區。而usr裏的內容在第二分區,此時usr只是作為第二分區的入口,本身屬於第一分區,不關聯的話,usr裏的內容還是在第一分區
根所在的分區稱為根分區或者根文件系統
管理磁盤分區
fdisk /dev/sda
p:顯示當前硬件的分區,包括沒保存的改動
n:創建新分區
e:擴展分區
p:主分區
d:刪除分區
w:保存退出
q:不保存退出
t: 修改分區類型
l:顯示所支持的所有類型
partprobe 讓內核重讀分區表
進程在用戶模式,用戶空間
內核模式,內核空間
CPU有4個級別圓環。由內往外ring0,ring1,ring2,ring3,ring4
ring0 內核 與外部硬件交互
ring1 不使用
ring2 不使用
ring3 用戶進程
blocksize:1024,2048,4096Bytes 即 1k 2k 4k linux上
設備文件 套接字文件 管道文件都不需要磁盤塊 所以沒有文件大小
iNode map
通過掃描位圖來判斷iNode和磁盤塊是否沒被錄用
block map
將數據存儲區分為多個塊組,每個塊組都有各自的iNode bitmap 和
block bitmap
塊組的大小個數由源數據區的super block 確定
為了防止super block崩潰,可有多個備份
superblock 包含的信息:
有幾個塊組
每個塊組有多少個磁盤塊
空閑iNode
空閑磁盤塊
等等
塊組描述符表(GDT group description table)
boot block blockgroup0 blockgroup1 blockgourp2...
blockgroup0:superblock
GDT
block bitmap
iNode bitmap
iNode table
data blocks
超級塊
描述整個分區的文件系統信息,例如塊大小,文件系統版本號,上次mount時間等待
超級快在每個組的開頭都有一份拷貝
塊組描述符
由很多塊組描述組成,整個分區分成多個個塊組對應有多少個塊組描述符
每個塊組描述符存儲一個組的描述信息,例如在這個塊組中從哪兒開始是iNode表,從哪兒開始是數據塊,空閑的iNode和數據塊還有多少等等。
和超級塊類似,塊組描述符表在每個塊組的開頭都有一份拷貝,這些信息十分重要,一旦超級塊意外損壞就會丟失整個分區的數據,一旦塊組描述符意外損壞就會丟失整個塊組的數據,因此他們有很多拷貝
塊位圖(Block Bitmap)
塊位圖就是用來描述整個塊組中哪些塊已用哪些空閑。它本身占一個塊,其中的每個bit代表本塊組中的一個塊,這個bit為1表示塊已用,為0表示該空閑塊可用
iNode位圖
和塊位圖類似,本身占一個塊,其中的每個bit表示一個inode是否空閑可用
inode表(inode Table)
一個文件除了數據需要存儲之外,一些描述信息也需要存儲,例如文件類型(常規、目錄、符號鏈接等),權限,文件大小,創建/修改/訪問時間等,也就是ls -l命令看到的那些信息,這些信息存在inode中而不是數據塊中
每個文件都有一個inode,一個塊組中的所有inode組成了inode表
inode表占多少個塊在格式化時就要決定並寫入塊組描述符中
mke2fs格式化工具的默認策略是一個塊組有多少個8KB就分配多少個inode
數據塊(Data Block)
對於常規文件,文件的數據存儲在數據塊中
對於目錄,該目錄下的所有文件名和目錄名存儲在數據塊中,文件名保存在它所在目錄的數據塊中
除文件名之外,ls -l命令看到的其它信息都保存在該文件的inode中
目錄也是一種文件,是一種特殊類型的文件
對於符號鏈接,如果目標路徑名較短則直接保存在inode中以便更快地查找,如果目標路徑名較長則分配一個數據塊來保存
設備文件、FIFO和socket等特殊文件沒有數據塊,設備文件的主設備號和次設備號保存在inode中
iNode號內容有 MODE,Owner Info,Group Info,Size,TimesStamps,磁盤塊的序列號,主次設備號
磁盤分割在文件系統創建的那一刻起已經把元數據區域預留出來
- Jul 18 Sat 2015 23:57
Linux之文件系統理論
close
全站熱搜
留言列表
發表留言