2008年5月23日 星期五

FileSystem

Dos , Windows 95 系統的檔案系統格式為 FAT16 ,
Windows 98 的檔案系統格式為 FAT32 ,
Windows NT , 2000 , 2003 , xp ...... 為 NTFS(NTFS 還有分不同的版本) ,
而 Linux 的檔案系統格式則是 ext2 , ext3 .
這裡大概來了解一下下 ext2 , ext3 .... 的檔案系統(FileSystem)是如何存放檔案的 .




一個 Partition 在 Format 時 , 就被格式成幾個區域 ,
其中這裏要提的便是 inode 區 , 及 Data block 區 .
Format 後 ,
inode 區可以放幾個 inode ,
一個 block 有多大 , 及 共有多少個 block 都已經確定了 .


那 inode 及 block 各是做什麼的呢 ?

系統在把檔案存檔時 , 會把檔案的內容存放在 block , 若檔案內容一個 block 放不下 , 剩下的檔案內容則會存到另一個 block 中 , 直到把內容都存完 .
譬如有一個檔案要存檔 , 這個檔案大小為 10k , 假若一個 block 大小為 4k , 那就必須用 3 個 block 來存放這個檔案 , 所以會佔硬碟空間 12k .



註: 一個 block 的大小不一定是 4k , 一般來說 , 較小的 partition 在 format 時 , block 會較小 , 可能一個 block 只有 1k , 較大的 partition 在 format 時 , block 可能給到 4k , dumpe2fs 這個指令可以看到已經分割好的某一 partition 中 , 一個 block 的大小 .  而在 format 一個 partition 時 , 若不想讓系統自動設定 block 大小 , 是可以手動指定的 .



系統怎麼知道哪一個檔案存放在哪些 block 中呢 ?
一個檔案佔用一個 inode , 一個 inode 擁有一個 inode 號碼 ,
裏面就存放著這個檔案的相關資訊(屬性) , 記錄著這個檔案佔用的 block 的位置 ,
如 :


檔案形態 , 擁有者 , 群組 , 權限 , block 位置 , ctime , atime , mtime..........等等 .


inode 裏沒有記錄檔案的名稱 , 檔案名稱是記錄在資料夾的 block 中 ,
是的 , 目錄跟檔案一樣 , 佔用一個 inode 及 block ,
資料夾的 inode 跟檔案的 inode 一樣 , 記錄著相關屬性 , 資料夾內容一樣存放在 block 中 ,
而資料夾的 data block 中就是記錄這個資料夾內有哪些檔案或資料夾(檔案列表)及其 inode 號碼 ,
如 :


inode ID , 資料夾一
inode ID , 資料夾二
inode ID , 檔案一
inode ID , 檔案二
....
...
..
.



好了 , 如果我們要讀取 /etc/mail/access 的檔案內容 , 它就是這樣跑的 :

1. 依據 / 的內容(data block) , 找到 etc 這個資料夾的 inode 號碼(ID) ,
2. 讀取 etc 的 inode , 對應其權限是否許可 , 再找到 etc 這個資料夾的 data block ,
3. 讀取 etc 的 data block , 找到 mail 這個資料夾的 inode ID ,
4. 讀取 mail 的 inode , 對應其權限是否許可 , 再找到 mail 這個資料夾的 data block ,
5. 讀取 mail 的 data block , 找到 access 這個檔案的 inode ID ,
6. 讀取 access 的 inode , 對應其權限是否許可 , 再找到 access 這個檔案的 data block ,
7. 讀取 access 的 data block , 將其顯示出來給我們看 .





沒有留言: