CP命令引發(fā)的思考
? 今天同事用?cp?命令,把他給驚到了!
cp??拷貝了一個(gè) 100 G的文件,竟然一秒不到就拷貝完成了!ls??看一把文件,顯示文件確實(shí)是 100 G。sh-4.4#?ls?-lh
-rw-r--r--?1?root?root?100G?Mar??6?12:22?test.txt
sh-4.4#?time?cp?./test.txt?./test.txt.cp
real?0m0.107s
user?0m0.008s
sys?0m0.085s
cp?一秒沒(méi)到就完成了工作,驚呆了,為啥呢?分析文件
du?命令看一下,卻只有 2M ,根本不是100G,這是怎么回事?sh-4.4#?du?-sh?./test.txt
2.0M?./test.txt
stat?命令顯示的信息:sh-4.4#?stat?./test.txt
??File:?./test.txt
??Size:?107374182400?Blocks:?4096???????IO?Block:?4096???regular?file
Device:?78h/120d?Inode:?3148347?????Links:?1
Access:?(0644/-rw-r--r--)??Uid:?(????0/????root)???Gid:?(????0/????root)
Access:?2021-03-13?12:22:00.888871000?+0000
Modify:?2021-03-13?12:22:46.562243000?+0000
Change:?2021-03-13?12:22:46.562243000?+0000
?Birth:?-
stat?命令輸出解釋:Size 為 107374182400(知識(shí)點(diǎn):?jiǎn)挝皇亲止?jié)),也就是 100G ; Blocks 這個(gè)指標(biāo)顯示為 4096(知識(shí)點(diǎn):一個(gè) Block 的單位固定是 512 字節(jié),也就是一個(gè)扇區(qū)的大小),這里表示為 2M;
Size 表示的是文件大小,這個(gè)也是大多數(shù)人看到的大小; Blocks 表示的是物理實(shí)際占用空間;
現(xiàn)實(shí)的存取場(chǎng)景


文件系統(tǒng)
登記名字就是在文件系統(tǒng)記錄文件名; 生成的牌子就是元數(shù)據(jù)索引; 你的行李就是文件; 寄存室就是磁盤(pán)(容納東西的物理空間); 管理員整套運(yùn)行機(jī)制就是文件系統(tǒng);
空間管理


先寫(xiě)數(shù)據(jù):數(shù)據(jù)先按照 Block 粒度存儲(chǔ)到磁盤(pán)的各個(gè)位置; 再寫(xiě)元數(shù)據(jù):然后把 Block 所在的各個(gè)位置保存起來(lái),即inode(我用一本書(shū)來(lái)表示);

先讀inode,找到各個(gè) Block 的位置; 然后讀數(shù)據(jù),構(gòu)造一個(gè)完整的文件,給到用戶;

inode/block 概念

前 12 個(gè)槽位(也就是 0 - 11 )我們成為直接索引; 第 13 個(gè)位置,我們稱為?1 級(jí)索引; 第 14 個(gè)位置,我們稱為?2 級(jí)索引; 第 15 個(gè)位置,我們稱為?3 級(jí)索引;




為什么cp那么快?
創(chuàng)建一個(gè)文件,這個(gè)時(shí)候分配一個(gè) inode; 在 [ 0,4K ] 的位置寫(xiě)入 4K 數(shù)據(jù),這個(gè)時(shí)候只需要 一個(gè) block,把這個(gè)編號(hào)寫(xiě)到? block[0]?這個(gè)位置保存起來(lái);在 [ 1T,1T+4K ] 的位置寫(xiě)入 4K 數(shù)據(jù),這個(gè)時(shí)候需要分配一個(gè) block,因?yàn)檫@個(gè)位置已經(jīng)落到三級(jí)索引才能表現(xiàn)的空間了,所以需要還需要分配出 3 個(gè)索引塊; 寫(xiě)入完成,close 文件;

總結(jié)
首先,最關(guān)鍵的是把磁盤(pán)空間切成離散的、定長(zhǎng)的 block 來(lái)管理; 然后,通過(guò) inode 能查找到所有離散的數(shù)據(jù)(保存了所有的索引); 最后,實(shí)現(xiàn)索引塊和數(shù)據(jù)塊空間的后分配;
推薦閱讀:
關(guān)注公眾號(hào),后臺(tái)回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤(pán)鏈接。
歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵(lì),我都將銘記于心~
評(píng)論
圖片
表情
