file storage 一種讓人易於了解的儲存方式
在學完Block storage之後,是否發現如果要和硬碟直接打交道,這是唯一的方式?是的,這就是唯一的方式,只是Block storage對人非常不友好,我們怎麼知道我的資料存在哪裏?是連續的存呢?還是分散的存?如果每筆資料都連續的存,那肯定對硬碟的利用率不友好
任何架構的難題只需要加一層就可以解決,如果不行,那就兩層
我忘了這是誰說的,但是我非常喜歡和同意這句話,為了讓人能夠輕鬆的操作儲存數據,在Block storage上面加了一層檔案系統,也就是File storage
我們平常用的Windows就是File storage,這大家應該很熟悉,由於File storage就是Block storage上面加一層,所以檔案的數據都是存在一個個的block中
除了檔案的內容之外,文件的metadata比如創建時間、權限、大小等等也需要存在另一個地方,專門存這些文件metadata的就叫做inode
一個檔案的inode可以透過stat來查詢
#> 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
最後,根據indoe的data,找到檔案裡的數據存在哪個block