File storage(檔案系統)
有了File storage,就能讓我們輕鬆地寫程式來操作資料!
如果要和硬碟直接打交道,Block storage是唯一的方式,只是對人非常不友好。你怎麼知道你的資料存在哪個Block?是連續存還是分散存?如果每筆資料都連續存,那硬碟的利用率會很差;如果分散存,需要用Linked-List資料結構來記錄位置。任何架構的難題只需要加一層就可以解決,如果不行,那就加兩層。為了讓人能夠輕鬆操作儲存資料,作業系統在Block storage上加了一層File system。
我們平常用的Windows系統為了讓使用者方便存取資料,就是使用File system,這大家應該很熟悉。用滑鼠點一點、鍵盤敲一敲,就可以對檔案進行存取。由於File system就是在Block storage上加一層,所以檔案的內容都是存放在一個個的block中。
除了檔案的內容之外,檔案的metadata,比如創建時間、權限、大小等等,也需要存放在另一個地方,專門存這些metadata的地方就叫做inode。
一個檔案的inode可以透過stat來查詢:
1 | #> stat demo.txt |
inode也會消耗儲存空間,所以格式化硬碟時,作業系統會將硬碟分成兩個區域,一個存數據,一個存inode,並且指定一個inode的大小。這樣,即使檔案很小,硬碟裡的檔案數量還是有限制的。
作業系統是如何讀取檔案資料?
首先,作業系統不是透過檔案名字來讀取資料,檔案名字只是讓使用者方便識別。作業系統是透過inode ID來找到資料的。每個inode都有一個號碼,根據使用者點開的檔案找到inode號碼,可以透過ls -i demo.txt
看到對應的inode號碼。
第二,根據inode號碼找到inode的data。
最後,根據inode的data,找到檔案裡的數據存在哪個block。
優點
File system最大的優點就是對人類友好,有目錄結構、容易記住的名字等等,方便UI呈現,除此之外還有以下優點:
- 方便共享:
一個inode就能與其他同台電腦上的使用者直接分享檔案,而且有權限控制。 - 安全:
如上述所示,Linux有三種權限控制 - 自己、組和其他。 - 成本低:
不需要昂貴的光纖,只要買機器,接上外接硬碟,透過作業系統上的File system,就可以使用。
缺點
- 資料讀寫慢:
因為讀取跟寫入都有兩層,除了讀寫本身資料(Block storage)之外,還有inode裡的metadata需要處理。 - 難以遷移:
如果想把文件搬遷到另一個作業系統會有點困難,如果file storage的格式不同或inode的演算法不同就更糟了。 - 權限控制:
權限控制只有三層 - 自己、group、others,無法滿足更複雜的需求。
總結
- File storage讓我們能夠輕鬆操作資料
- 作業系統透過File system在Block storage上加一層,方便使用
- File system有目錄結構、容易記住的名字,方便共享、安全、成本低
- 但也有資料讀寫慢、難以遷移、權限控制不夠細緻等缺點