第八節 Linux 文件的屬性(上半部分)
標籤(空格分隔):Linux實戰教學筆記php
第1章 Linux中的文件
1.1 文件屬性概述(ls -lhi)
linux裏一切皆文件
Linux系統中的文件或目錄的屬性主要包括:索引節點(inode),文件類型,權限屬性,連接數,所歸屬的用戶和用戶組,最近修改時間等內容:html
文字解釋:
第一列:inode索引節點編號(至關於人的身份證,全國惟一)
第二列:文件類型及權限
第二列共11個字符:其中第一個字符爲文件類型,隨後的9個字符爲文件的對應權限,最後一個字符點號「.」是和selinux有關的一個標識;
第三列:硬連接個數(詳細參看ln命令的講解);
至關於超市的多個入口,能夠從不一樣的文件入口進入文件,還能夠互爲備份(消防通道)
第四列:文件或目錄所屬的用戶 文件的全部者(屬主);
linux裏面文件和程序的存在必需要有用戶和組知足相應的存在需求。
第五咧:文件或目錄所屬的組
第六列:文件或目錄的大小;
第七八九列:文件或目錄的修改時間:默認月日時分
第十列:實際的文件或目錄名
文件名不算文件的屬性node
下面咱們以chensiqi文件爲例進行說明,具體列的內容參考下上面的圖:python
1736707 -rwx-xr-x- 1 root root 35 Oct 28 11:29 chensiqilinux
- inode索引節點編號:1736707
- 文件類型,文件類型是-,表示這是一個普通文件;
- 文件權限:文件權限是rwxr-xr-x,表示文件屬主可讀,可寫,可執行,文件歸屬的用戶組可讀可執行,其餘用戶可執行。
- 硬連接個數:表示chensiqi這個文件沒有其它的硬連接,由於鏈接數是1,就是他自己;
- 文件屬主:這個文件所屬的用戶,這裏意思是chensiqi文件被root用戶擁有,注意,是第一個root;
- 文件屬組:這個文件所屬的用戶組,在這裏是root用戶組,是顯示信息裏的第二個root
- 文件大小:文件大小是35個字節
- 文件修改時間:這裏的時間是該文件最後被更新(包括文件建立,內容更新,文件名更新等)的時間,可用以下命令查看文件的修改,訪問,建立的時間
1.2 索引節點inode
1.2.1 inode 概述
- 硬盤要存儲數據,首先要分區,而後格式化建立文件系統,最後掛載,才能存數據。
- 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之間的關係見下圖:
爲了能讓你們更形象的理解,我舉個例子。假若有一本書,存儲設備和分區就至關於這本書,Block至關於書中的每一頁內容,而inode就至關於這本書前面的目錄,一本書有不少內容,一個知識點可能有多頁,若是想查找某部分或某知識點的內容,咱們通常先查書的目錄,經過目錄能更快的找到咱們想要看的知識點的內容。雖然不太恰當,但仍是比較形象。
算法
當咱們用ls查看某個目錄或文件時,若是加上-i參數,就能夠看到inode節點了;shell
【root@chensiqi /】# ls -iwindows
- 上圖第一列inode值259615;查看一個文件或目錄的inode,經過ls命令的-i參數便可。
- 由於inode要存放文件的屬性信息,因此每一個inode自己是有大小的,Centos5系列inode的默認大小是128字節,而Centos6系列inode的默認大小是256字節,inode的大小在分區被格式化建立文件系統以後定下來的,格式化之後就沒法更改inode大小,格式化前能夠經過參數指定inode的大小,可是通常企業工做環境沒這個需求。
- 不一樣Centos版本inode大小不一樣
查看文件系統inode總量以及剩餘量centos
【root@chensiqi /】# df -i
查看磁盤使用量
[root@chensiqi /]# df -h
Inode:存放文件的屬性+文件內容的位置(block的位置) df - l 查看使用量
Block:存放實際數據
1.2.2 企業案例模擬:
模擬磁盤滿的狀況
磁盤滿的一個特徵(no space left on device)
1.block 滿了 磁盤空間滿了
2.inode 滿了 建立一個文件就須要一個inode
1.2.3 有關inode的小結
學會給階段性的知識作小結是學好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的剩餘空間就浪費了,即沒法在存儲其餘數據
1.2.4 有關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分大了,浪費空間,分小了,影響磁盤讀取性能
1.2.5 inode與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的大小
1.2.6 企業面試題一:
一個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的數量
1.27 企業面試題二:
若是向磁盤寫入數據提示以下錯誤: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
1.3文件類型及文件擴展名
1.3.1 文件類型介紹
- windows擴展名讓系統區分不一樣文件類型,擴展名錯誤致使文件沒法打開。
- linux經過擴展名讓人區分文件類型,爲了易讀,錯誤也能夠正常使用
例如:
windows圖片文件擴展名:jpg,jpeg,png,gif等
文本文件擴展名:doc,docx,txt,pdf
1.3.2 Linux中的文件類型
對於這裏我不想說太多,由於實在感受對於實際應用意義不大,你們只須要知道經過ls -l查看目錄的時候,
1,若是權限那裏是-rw--r--r--,第一個字符是‘-’就表明是普通文件
2,若是第一個字符是d例如drw--r--r--.就表明是個文件夾
3,若是第一個字符是l例如lrw--r--r--,就表明是個軟連接
1.3.3 軟鏈接
軟鏈接文件可經過:
ln -s 源文件名 新文件名 的方式來建立(若是不使用-s,則會建立硬連接,但不適合目錄)
這個軟鏈接和windows的快捷方式是類似的。
1.3.4 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安裝包文件
1.4 知識擴展(企業實際經驗)
問題: 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
- 關閉ext4日誌:tune2fs -O^has_joumal /dev/sdXX
3.SSD文件系統選擇
EXT4/Reiserfs能夠做爲SSD文件系統,但未對SSD作優化,不能充分發揮SSD性能,並影響SSD使用時間
Btrfs對SSD做了優化,mount經過參數啓用。但Btrfs扔處於試驗階段,生產環境謹慎使用
JFFS2/Nilfs2/YAFFS是經常使用的flash file system,在嵌入式環境普遍應用,建議使用。性能目前還未做測試評估
簡單分析一下選擇Reiserfs和ext4文件系統的緣由
一、Reiserfs
大量小文件訪問,衡量指標是IOPS,文件系統性能瓶頸在於文件元數據操做、目錄操做、數據尋址。reiserfs對小文件做了優化,並使用B+ tree組織數據,加速了數據尋址,大大下降了open/create/delete/close等系統調用開銷。mount時指定noatime,nodiratime,notail,減小沒必要要的inode操做,notail關閉tail package功能,以空間換取更高性能。所以,對於隨機的小I/O讀寫,reiserfs是很好的選擇。
二、Ext4
大文件順序訪問,衡量指標是IO吞吐量,文件系統性能瓶頸在於數據塊佈局(layout)、數據尋址。Ext4對ext3主要做了兩方面的優化:
一:是inode預分配。這使得inode具備很好的局部性特徵,同一目錄文件inode儘可能放在一塊兒,加速了目錄尋址與操做性能。所以在小文件應用方面也具備很好的性能表現。
二:是extent/delay/multi的數據塊分配策略。這些策略使得大文件的數據塊保持連續存儲在磁盤上,數據尋址次數大大減小,顯著提升I/O吞吐量。
所以,對於順序大I/O讀寫,EXT4是很好的選擇。另外,XFS性能在大文件方面也至關不錯。