您好,登錄后才能下訂單哦!
文件系統結構,理解文件系統,要從文件儲存說起。
硬盤結構:
互動:磁盤內部是真空的嗎? 是:1 ,不是:2
磁盤內部不是真空,只不過里面的空氣很干凈。如果是真空,還不利于散熱
磁盤相關專業術語:
硬盤的內部是金屬盤片,將圓形的盤片劃分成若干個扇形區域,這就是扇區。若干個扇區就組成整個盤片。為什么要分扇區?是邏輯化數據的需要,能更好的管理硬盤空間。 以盤片中心為圓心,把盤片分成若干個同心圓,那每一個劃分圓的“線條”,就稱為磁道。
硬盤內的盤片有兩個面,都可以儲存數據,而硬盤內的盤片往往不止一張,常見的有兩張,那么,兩張盤片中相同位置的磁道,就組成一個“柱面”,盤片中有多少個磁道,就有多少個柱面。盤片兩面都能存數據,要讀取它,必須有磁頭,所以,每一個面,都有一個磁頭,一張盤片就有兩個磁頭。
硬盤的存儲容量=磁頭數×磁道(柱面)數×每道扇區數×每道扇區字節數。
磁道從外向內自0開始順序進行編號,各個磁道上的扇區數是在硬盤格式化時確定的。
文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當于0.5KB)。
比較古老的CHS (Cylinder/Head/Sector :磁頭(Heads)、柱面(Cylinder)、扇區(Sector))結構體系. 因為很久以前,在硬盤的容量還非常小的時候,人們采用與軟盤類似的結構生產硬盤。也就是硬盤盤片的每一條磁道都具有相同的扇區數,由此產生了所謂的3D參數,即是磁頭數(Heads)、柱面數(Cylinders)、扇區數(Sectors)以及相應的3D尋址方式。
互動 : 如上的磁盤結構有沒有問題???
這種結構有問題:
以前老式的磁盤,每個磁道的扇區都一樣,這樣外磁道整個弧長要大于內部的扇區弧長,因而其磁記錄密度就要比內部磁道的密度要小。最終,導致了外部磁道的空間浪費。
如查你磁盤設計工程師,你打算怎么解決? 你選擇下面哪種方法?
方法1:每個磁道的寬度不一樣,從而讓每個扇區面積盡量一樣
方法2:不再一刀切,讓磁道中的扇區數量可以不一樣
現在硬盤都采用這種技術:ZBR(Zoned Bit Recording)區位記錄 (Zoned zōnd )
Zoned-bit recording(ZBR 區位記錄)是一種物理優化硬盤存儲空間的方法,此方法通過將更多的扇區放到磁盤的外部磁道而獲取更多存儲空間。
ZBR磁盤扇區結構示意圖
互動: 從外面讀數據快? 還是從里面快? 里:1 外:2
使用ZBR 區位記錄法做的磁盤有以下特點:讀外圈的數據快,讀內圈的數據慢,所以測試硬盤經常看到讀取速度越來越慢的曲線圖就很正常了。
互動:windows安裝系統的C盤或Linux boot分區一般安裝在磁盤最外面還是最里面?
windows : C盤安裝最外,速度也是最快
Linux : boot分區和 swap分區,裝最外面
磁盤寫數據時,先從外面往里。
13.1.2 簇和block
簇類似于Linux系統中的block
例:在win10系統,新一個文本文件“新建文本文檔.txt”,只輸入aa兩個字符。
右擊屬性查看大小: 說明我的NTFS文件系統中默認的簇大小為4KB
[root@xuegod63 ~]# stat /etc/passwd #查看Linux block 大小
文件:"/etc/passwd"
大小:2053 塊:8 IO 塊:4096 =4KB 普通文件
13.2 文件系統結構
Linux文件系統由三部分組成 : 文件名,inode,block
Linux文件系統: ext3,ext4,xfs
windows文件系統: FAT32,NTFS
13.2.1 文件名:
[root@xuegod63 ~]# cp /etc/passwd a.txt
[root@xuegod63 ~]# ls a.txt # a.txt 就是文件名
13.2.2 inode的內容
inode包含文件的元信息,具體來說有以下內容:
文件的字節數
文件擁有者的User ID
文件的Group ID
文件的讀、寫、執行權限
文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。
鏈接數,即有多少文件名指向這個inode
* 文件數據block的位置
可以用stat命令,查看某個文件的inode信息:
[root@xuegod63 ~]# stat a.txt
File: ‘a.txt’
Size: 2053 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 18521833 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access最近訪問時間: 2018-05-16 14:55:36.061095050 +0800
Modify最近更改時間: 2018-05-16 14:55:36.062095050 +0800
Change最近改動時間: 2018-05-16 14:55:36.062095050 +0800
Birth創建時間: -
[root@xuegod63 ~]# ll /etc/passwd #ll 其實就是查看passwd的inode信息
-rw-r--r--. 1 root root 2053 Sep 19 2017 /etc/passwd #ll查看到時間是ctime時間
互動:
ctime是什么? 是創建時間嗎? 不會:1
mtime : modify time 修改文件內容的時間
atime : access time 訪問文件內容的時間
ctime指inode上一次文件屬性變動的時間,change time 。 比如: chmod +x a.sh
mtime指文件內容上一次變動的時間,modify time 。如:echo aa >> a.sh 或vim a.sh 修改內容
atime指文件上一次查看文件的時間,access time 。 如: cat a.sh
例2:測試mtime時間,***先修改時間,再植入***程序,防止 find / -mtime 查看***文件
[root@xuegod63 ~]# stat a.txt #查看時間
[root@xuegod63 ~]# date -s '13:42'
[root@xuegod63 ~]# vim a.txt #寫入aaaa,vim會修改mtime和atime時間
[root@xuegod63 ~]# stat a.txt #查看時間
[root@xuegod63 ~]# chmod +x a.txt #修改ctime,有時***忘記修改ctime時間了,所以你可以find / -ctime 查看***文件
[root@xuegod63 ~]# stat a.txt #查看時間
這個一招學到手:1
13.2.3 inode的大小
inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。
每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,假定在一塊1GB的硬盤中,每個inode節點的大小為128字節,每1KB就設置一個inode,那么inode table的大小就會達到128MB,占整塊硬盤的12.8%。
inode號碼
每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。
Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對于系統來說,文件名只是inode號碼便于識別的別稱或者綽號。表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最后,根據inode信息,找到文件數據所在的block,讀出數據。
例1: 使用ls -i命令,可以看到文件名對應的inode號碼
[root@xuegod63 ~]# ls -i a.txt
440269 a.txt
例2:查看每個硬盤分區的inode總數和已經使用的數量,可以使用df命令。
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 640848 151010 489838 24% /
tmpfs 145579 1 145578 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
注:由于每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬盤還未存滿的情況。這時,就無法在硬盤上創建新文件。
13.2.4 目錄文件
Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。
目錄文件的結構非常簡單,就是一系列目錄項的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。
[root@xuegod63 ~]# ls -id /etc
8388673 /etc
例:ls -i命令列出整個目錄文件,即文件名和inode號碼:
[root@xuegod63 ~]# ls -i /etc
13.2.5 block塊大小
block 是真正存儲數據的地方。
block是 文件系統 中最小的存儲單位
扇區 是 磁盤 中最小的存儲單位
在linux下中叫:block,在windows中叫:簇
互動:為什么要有block,直接使用扇區可以嗎?
操作系統讀取硬盤的時候,不會一個個扇區(512字節)地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是1KB,即連2個 sector扇區組成一個 block。或4K。
情景: 如果沒有block? 會怎么樣?
夜深人靜,下了3.6G cang.avi 的電影,一次讀512B , 尋址次太多,太慢了。。。
結果。。。你懂得 。。。?
結果: avi看成了 jpg
例1:格式化修改磁盤,修改簇大小
實戰:簇和block大小設定
你喜歡大一些,還是小一些?
簇和block調大:
優點: 速度快,節約尋址時間,缺點:空間浪費
比如: 2T硬盤, 前1.5T,使用4K, 把剩下的500G格式化成64K簇。用空間換時間
例2:查看Linux系統塊大小
[root@xuegod63 ~]# stat /etc/passwd | grep IO
大小:2053 塊:8 IO 塊:4096 普通文件
#block到是4K
總結:
硬盤的結構:ZBR 區位記錄
inode(inode表中主要看inode號)
inode號唯一標識一個文件(一個文件系統里面)
inode用完了,文件就不能創建了。
inode數據量設置大一些:可以創建多個文件。占用空間比較大
inode數據量設置小一些:可以創建很少文件。占用空間比較小
block
block設置大:效率高,利用率低。
block設置小:效率低,利用率高。
13.3 文件的硬鏈接和軟鏈接
13.3.1 Linux鏈接概念
Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為軟鏈接,即符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接。
【硬連接】:硬連接指通過索引節點號來進行連接。inode是可以對應多個文件名的
在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。
在Linux中,多個文件名可以指向同一索引節點。一般這種連接就是硬連接。
硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。
只刪除一個連接并不影響索引節點本身和其它的連接,只有當最后一個連接被刪除后,文件的數據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。
【軟連接】:另外一種連接稱之為符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似于Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息
13.3.2 實戰-1: ln命令創建硬鏈接
語法格式:ln 源文件 目標文件
[root@xuegod63 ~]# echo 1111 > a.txt
硬鏈接的原理就是多個文件名指向同一個inode,因此多個文件名共用一個inode號,達到共享與備份的目的
注意:源文件被刪除,不影響鏈接文件的正常使用
硬鏈接不能針對目錄創建
硬鏈接不能跨分區進行創建
硬鏈接的特點: 無法針對目錄,跨分區無法實現。因為每個分區都有自己獨立的INDOE編號
互動:為什么剛創建的一個目錄,鏈接數就是2?
[root@xuegod63 ~]# mkdir test
[root@xuegod63 ~]# ll -d test/
drwxr-xr-x 2 root root 6 5月 16 15:55 test/
默認新一個空目錄,此目錄的第二字段就是2(包含兩個隱藏目錄,因為每一個目錄都有一個指向它本身的子目錄"." 和指向它上級目錄的子目錄".."),所以test是一個鏈接, 隱藏目錄. 是第二個鏈接
[root@xuegod63 ~]# ll -id test/ #兩個inode號是一樣的
2453723 drwxr-xr-x 2 root root 6 5月 16 15:55 test/
[root@xuegod63 ~]# ll -id test/.
2453723 drwxr-xr-x 2 root root 6 5月 16 15:55 test/.
13.3.3 ln -s 創建軟連接
軟鏈接:相當于windows中的快捷方式
語法:ln -s 源文件 軟鏈接的名字
例:
[root@xuegod63 ~]# cp /etc/passwd a.txt
[root@xuegod63 ~]# ln -s a.txt a-link.txt
[root@xuegod63 ~]# ll a-link.txt
lrwxrwxrwx 1 root root 5 5月 16 16:10 a-link.txt -> a.txt
[root@xuegod63 ~]# rm -rf a.txt
[root@xuegod63 ~]# ll a-link.txt
lrwxrwxrwx 1 root root 5 5月 16 16:10 a-link.txt -> a.txt
注:源文件被刪除,鏈接文件失效
例2:能針對目錄和跨分區創建軟鏈接
[root@xuegod63 ~]# ln -s /boot/grub grub-link
總結:
13.1 硬盤結構
13.2 文件系統結構
13.2 硬鏈接和軟鏈接
13.4 實戰:解決磁盤有空間但創建不了文件-修復服務器文件系統
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。