[儲存]資料儲存的基礎知識 - File storage

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
2
3
4
5
6
7
8
9
#> stat demo.txt
File: ‘demo.txt’
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 238749826 Links: 1
Access: (0644/-rw-r--r--) Uid: (51426876/ ckaijia) Gid: ( 201/ mts)
Access: 2021-08-28 07:27:02.001795167 -0700
Modify: 2021-08-28 07:27:02.001795167 -0700
Change: 2021-08-28 07:27:02.001795167 -0700
Birth: -

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有目錄結構、容易記住的名字,方便共享、安全、成本低
  • 但也有資料讀寫慢、難以遷移、權限控制不夠細緻等缺點