天天看點

Linux 檔案的屬性(上半部分)

第八節 linux 檔案的屬性(上半部分)

标簽(空格分隔):linux實戰教學筆記

linux裡一切皆檔案

linux系統中的檔案或目錄的屬性主要包括:索引節點(inode),檔案類型,權限屬性,連結數,所歸屬的使用者和使用者組,最近修改時間等内容:

Linux 檔案的屬性(上半部分)
文字解釋: 第一列:inode索引節點編号(相當于人的身份證,全國唯一) 第二列:檔案類型及權限 第二列共11個字元:其中第一個字元為檔案類型,随後的9個字元為檔案的對應權限,最後一個字元點号“.”是和selinux有關的一個辨別; 第三列:硬連結個數(詳細參看ln指令的講解); 相當于超市的多個入口,可以從不同的檔案入口進入檔案,還可以互為備份(消防通道) 第四列:檔案或目錄所屬的使用者 檔案的所有者(屬主); linux裡面檔案和程式的存在必須要有使用者群組滿足相應的存在需求。 第五咧:檔案或目錄所屬的組 第六列:檔案或目錄的大小; 第七八九列:檔案或目錄的修改時間:預設月日時分 第十列:實際的檔案或目錄名 檔案名不算檔案的屬性

下面我們以chensiqi檔案為例進行說明,具體列的内容參考下上面的圖:

1736707 -rwx-xr-x- 1 root root 35 oct 28 11:29 chensiqi

inode索引節點編号:1736707

檔案類型,檔案類型是-,表示這是一個普通檔案;

檔案權限:檔案權限是rwxr-xr-x,表示檔案屬主可讀,可寫,可執行,檔案歸屬的使用者組可讀可執行,其他使用者可執行。

硬連結個數:表示chensiqi這個檔案沒有其它的硬連結,因為連接配接數是1,就是他本身;

檔案屬主:這個檔案所屬的使用者,這裡意思是chensiqi檔案被root使用者擁有,注意,是第一個root;

檔案屬組:這個檔案所屬的使用者組,在這裡是root使用者組,是顯示資訊裡的第二個root

檔案大小:檔案大小是35個位元組

檔案修改時間:這裡的時間是該檔案最後被更新(包括檔案建立,内容更新,檔案名更新等)的時間,可用如下指令檢視檔案的修改,通路,建立的時間

硬碟要存儲資料,首先要分區,然後格式化建立檔案系統,最後挂載,才能存資料。

inode,中文意思是索引節點(index node)。在每個linux儲存設備或儲存設備的分區(儲存設備可以是硬碟,軟碟,u盤...)被格式化為ext4(centos6.8)檔案系統後,一般生成兩部分:第一部分是inode(很多個),第二部分是block(很多個)。

這個block是用來存儲實際資料用的,例如:照片,視訊等普通檔案資料。

而inode就是用來存儲這些資料屬性資訊的(也就是ls -l的結果),inode屬性資訊包括不限于檔案大小,屬主(使用者),歸屬的使用者組,檔案權限,檔案類型,修改時間,還包含指向檔案實體的指針功能(inode節點--block的對應關系)等,但是,inode裡面唯獨不包含檔案名本身

*身份證号 ==== inode号

身高體重三圍有沒有頭發(屬性)====inode*

inode除了記錄檔案屬性的資訊外,還會為每個檔案進行資訊索引,是以就有了inode的數值。作業系統根據指令,即可通過inode的值最快的找到相對應的檔案實體。檔案,inode,block之間的關系見下圖:

Linux 檔案的屬性(上半部分)
為了能讓大家更形象的了解,我舉個例子。假如有一本書,儲存設備和分區就相當于這本書,block相當于書中的每一頁内容,而inode就相當于這本書前面的目錄,一本書有很多内容,一個知識點可能有多頁,如果想查找某部分或某知識點的内容,我們一般先查書的目錄,通過目錄能更快的找到我們想要看的知識點的内容。雖然不太恰當,但還是比較形象。
Linux 檔案的屬性(上半部分)

當我們用ls檢視某個目錄或檔案時,如果加上-i參數,就可以看到inode節點了;

【root@chensiqi /】# ls -i
Linux 檔案的屬性(上半部分)

上圖第一列inode值259615;檢視一個檔案或目錄的inode,通過ls指令的-i參數即可。

因為inode要存放檔案的屬性資訊,是以每個inode本身是有大小的,centos5系列inode的預設大小是128位元組,而centos6系列inode的預設大小是256位元組,inode的大小在分區被格式化建立檔案系統之後定下來的,格式化以後就無法更改inode大小,格式化前可以通過參數指定inode的大小,但是一般企業工作環境沒這個需求。

不同centos版本inode大小不同

Linux 檔案的屬性(上半部分)

檢視檔案系統inode總量以及剩餘量

【root@chensiqi /】# df -i
Linux 檔案的屬性(上半部分)

檢視磁盤使用量

[root@chensiqi /]# df -h
Linux 檔案的屬性(上半部分)

inode:存放檔案的屬性+檔案内容的位置(block的位置) df - l 檢視使用量

block:存放實際資料

模拟磁盤滿的情況

磁盤滿的一個特征(no space left on device)

Linux 檔案的屬性(上半部分)
Linux 檔案的屬性(上半部分)
學會給階段性的知識做小結是學好linux運維的好習慣。

誕生:磁盤被分區并格式化為ext4檔案系統後,會生成一定數量的inode和block

inode稱為索引(目錄)節點,它的作用是存放檔案的屬性資訊以及作為檔案的索引(指向檔案的實體block)

ext3/ext4 檔案系統的block 存放的是檔案的實際内容(資料)。

inode是磁盤上的一塊存儲空間,centos6非啟動分區inode預設大小256位元組,centos5是128位元組

inode的表現是形式一串數字,不同的檔案對應的inode(一串數字)在檔案系統裡是唯一的。

inode節點号相同的檔案,互為硬連結檔案,可以認為是一個檔案的不同入口。

ext3/ext4檔案系統下,一個檔案至少要占用一個inode和一個block。(檔案size比較大)

ext3/ext4檔案系統下,正常情況一個檔案占用且隻能占用一個inode(人和身份證号)

block是用來存儲實際資料的,每個block的大小一般有1k,2k,4k幾種。其中引導分區等為1k,其他普通分區多為4k(centos6)

如果一個檔案很大(高清大片4g),需要占用多個block,如果檔案很小(0.01k),至少占一個block,并且這個block的剩餘空間就浪費了,即無法在存儲其他資料

磁盤讀取資料是按block為機關讀取的

一個檔案可能占用多個block。每讀取一個block就會消耗一次磁盤i/o

如果要提升磁盤i/o性能,那麼就要盡可能一次性讀取資料盡量的多。

一個block隻能存放一個檔案的内容,無論内容多小。如果block預設是4k大小,那麼存放一個1k的檔案,剩餘3k就不能存放别的檔案,隻能浪費了

block并非越大越好。block太大對于存放小檔案就會浪費磁盤空間,例如:1000k的檔案,block大小為4k,占用250個block,如果block預設為1k,則需要占用1000個block。通路效率誰更高?消耗i/o分别為250次和1000次。

根據業務需求,确定預設的block大小,如果是大檔案(大于16k)一般設定block大一點,小檔案(小于1k)一般設定block小一點

block太大,例如4k,檔案都是0.1k的,大量浪費磁盤空間,但是通路性能高

block太小,例如1k,檔案都是1000k,消耗大量磁盤i/o

企業裡檔案都會比較大(一般會大于4k),block設定大一些會提升磁盤通路效率。

ext3/ext4檔案系統(centos5和centos6),一般都設定為4k。

目前的生産環境一般設定為4k,特殊的業務,如視訊可以加大block大小

block塊越大對于單個的小檔案多(0.5k)的業務,會非常浪費空間,因為,一個檔案無論多大都會必須占用至少一個inode和一個block,磁盤讀取資料是按block為機關讀取的,但是對于大檔案,可以提升讀取的效率,因為如果block太小,就要讀多個block,這樣就消耗磁盤i/o,如果block大,則會讀較少的ablock就讀完資料,進而減少磁盤i/o block塊太小又會影響硬碟讀取大檔案資料的效率,block塊越小,同樣存儲一個檔案就需要更多的block,這樣硬碟讀取資料時就要讀取多個block,是以效率就越低。 block分大了,浪費空間,分小了,影響磁盤讀取性能

磁盤被分區格式化檔案系統後,會分為inode和block兩部分内容

inode存放檔案的屬性以及指向檔案實體的指針(block的位置),檔案名不在inode裡,一般在上級目錄的block裡

通路檔案的過程,通過檔案名(上一級目錄的block)--->inode--->blocks

inode centos6一般情況預設非啟動分區大小256b,block大小1,2,4k,預設是4k,注意,引導分區等特殊分區除外

通過df -i 檢視inode的數量及使用情況,dumpe2fs /dev/sda3 檢視inode及block的大小及數量

一個檔案至少要占用一個inode及一個block,多個檔案可以占用同一個inode(硬連結),相同檔案

一個block隻能被一個檔案使用,如果檔案很小block很大,剩餘空間浪費,無法繼續被其他檔案使用

block不是越大越好,要根據業務的檔案大小進行選擇,一般centos6就是預設4k

可以在格式化的時候改變inode及block的大小

一個100m(100000k)的磁盤分區,分别寫入1k的檔案或寫入1m的檔案,分别可以寫多少個?

1k檔案雖小,但是block一般預設4k,即使1k的資料也會占用4k大小,比如大家建立一個空檔案,然後du -sk 看看大小是多少。(如果大家此時認為應該100000/4的話,那麼你就掉坑了-_-!别忘了存儲資料,消耗的不光是block還有inode,inode預設隻有256k(centos6),每個檔案至少占用一個block的同時還會占用一個inode) 1m的資料他剛好能被4整除。是以不會浪費空間,大約為100個左右,inode充足。 總上對于大檔案一般inode是足夠的,大檔案基本也不會浪費空間,整除就可以;但是對于小檔案來說,inode是不足夠的,是以能夠存儲的數量就是inode的數量

如果向磁盤寫入資料提示如下錯誤:no space left on device,通過df -h檢視磁盤空間,發現沒滿,請問可能原因是什麼?企業場景什麼情況下會導緻這個問題發生?

磁盤沒滿但是不能卸乳檔案,最可能的原因就是inode被耗盡了 企業工作中郵件臨時隊列/var/spool/clientmquene或/var/spool/postfix/maildrop這裡很容易被大量小檔案占滿導緻no space left on device的錯誤。clientmquene目錄隻有安裝了sendmail服務,才會有,是sendmail的臨時隊列。centos5.8預設就會裝sendmail,centos6預設沒有sendmail,但是有postfix

windows擴充名讓系統區分不同檔案類型,擴充名錯誤導緻檔案無法打開。

linux通過擴充名讓人區分檔案類型,為了易讀,錯誤也可以正常使用

例如:

windows圖檔檔案擴充名:jpg,jpeg,png,gif等

文本檔案擴充名:doc,docx,txt,pdf

對于這裡我不想說太多,因為實在感覺對于實際應用意義不大,大家隻需要知道通過ls -l檢視目錄的時候, 1,如果權限那裡是-rw--r--r--,第一個字元是‘-’就代表是普通檔案 2,如果第一個字元是d例如drw--r--r--.就代表是個檔案夾 3,如果第一個字元是l例如lrw--r--r--,就代表是個軟連結

軟連接配接檔案可通過:

ln -s 源檔案名 新檔案名 的方式來建立(如果不使用-s,則會建立硬連結,但不适合目錄)

這個軟連接配接和windows的快捷方式是相似的。

Linux 檔案的屬性(上半部分)
在linux中,雖然擴充名沒什麼意義,但是為了相容windows,同時,便于我們大多數windows使用者區分檔案的不同,是以,我們還是習慣通過擴充名來表示不同檔案的類型。

如下:

tar,tar.gz,tgz,zip,tar.bz表示壓縮檔案,建立指令一般為tar,gzip,unzip等

.sh表示shell腳本檔案,通過shell語言開發的程式

.pl表示perl語言檔案,通過perl語言開發的程式

.py表示python語言檔案,通過python語言開發的程式

.html,.htm,.php,.jsp,.do表示網頁語言的檔案

.conf表示系統的配置檔案

.rpm表示rpm安裝封包件

問題: linux檔案系統如何選擇?

通過綜合使用多種标準檔案系統benchmarks對ext3,ext4,reiserfs,xfs,jfs,reiser4的性能測試對比,對不同應用選擇合适的檔案系統給出以下方案,供大家參考。

大量小檔案(losf,lost of small files)i/o應用(如小圖檔)

reiserfs(首選),ext4檔案系統适合這類負載特征,io排程算法選擇deadline,block size=4096,ext4關閉日志功能 reiserfs mount參數:-o defaults,async,noatime,nodiratime,notail,data=writeback ext4 mount參數:-o defaults,async,noatime,nodiratime,data=writeback,barrier=0 關閉ext4日志:tune2fs -o^has_joumal /dev/sdxx

2.大檔案i/o應用(如視訊下載下傳,流媒體)

ext4檔案系統适合此類負載特征,io排程算法選擇anticipatory,block size=4096,關閉日志功能,啟用extent(default) mount參數:-o defaults,async,noatime,nodiratime,data=writeback,barrier=0

3.ssd檔案系統選擇

ext4/reiserfs可以作為ssd檔案系統,但未對ssd做優化,不能充分發揮ssd性能,并影響ssd使用時間 btrfs對ssd作了優化,mount通過參數啟用。但btrfs扔處于試驗階段,生産環境謹慎使用 jffs2/nilfs2/yaffs是常用的flash file system,在嵌入式環境廣泛應用,建議使用。性能目前還未作測試評估

簡單分析一下選擇reiserfs和ext4檔案系統的原因

1、reiserfs

 大量小檔案通路,衡量名額是iops,檔案系統性能瓶頸在于檔案中繼資料操作、目錄操作、資料尋址。reiserfs對小檔案作了優化,并使用b+ tree組織資料,加速了資料尋址,大大降低了open/create/delete/close等系統調用開銷。mount時指定noatime,nodiratime,notail,減少不必要的inode操作,notail關閉tail package功能,以空間換取更高性能。是以,對于随機的小i/o讀寫,reiserfs是很好的選擇。

2、ext4

 大檔案順序通路,衡量名額是io吞吐量,檔案系統性能瓶頸在于資料塊布局(layout)、資料尋址。ext4對ext3主要作了兩方面的優化: 一:是inode預配置設定。這使得inode具有很好的局部性特征,同一目錄檔案inode盡量放在一起,加速了目錄尋址與操作性能。是以在小檔案應用方面也具有很好的性能表現。 二:是extent/delay/multi的資料塊配置設定政策。這些政策使得大檔案的資料塊保持連續存儲在磁盤上,資料尋址次數大大減少,顯著提高i/o吞吐量。 是以,對于順序大i/o讀寫,ext4是很好的選擇。另外,xfs性能在大檔案方面也相當不錯。

繼續閱讀