linux-basic(8)linux磁盘与文件系统管理
生活随笔
收集整理的這篇文章主要介紹了
linux-basic(8)linux磁盘与文件系统管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【8.1】認識EXT2文件系統
?【補充】硬盤與存儲設備 https://blog.csdn.net/pacosonswjtu/article/details/79811762
(1)
實際的數據都是寫在具有磁性物質的磁碟盤上頭,而讀寫主要是透過在機械手臂上的讀取頭(head)來達成。 實際運作時, 主軸馬達讓磁碟盤轉動,然后機械手臂可伸展讓讀取頭在磁碟盤上頭進行讀寫的動作。
(2)
1)扇區(qū):整個磁碟盤上頭好像有多個同心圓繪制出的圓形圖,而由圓心以放射狀的方式分割出磁碟的最小儲存單位,那就是扇區(qū)(Sector); 在物理組成分面,每個扇區(qū)大小為512Bytes,這個值是不會改變的。
2)磁道:扇區(qū)組成一個圓就成為磁道(track);
3)磁柱: 如果是在多碟(多盤片)的硬盤上面,在所有磁碟盤上面的同一個磁道可以組成一個磁柱(Cylinder), 磁柱也是一般我們分割硬盤時的最小單位!
總結) 扇區(qū)組成一個圓就是磁道;所有盤片上的同一個磁道組成一個磁柱;
【補充結束】
【8.1.1】硬盤組成與分區(qū)復習
1)整顆磁盤的組成主要有:
? ● 圓形的磁盤盤(主要記錄數據的部分);
? ● 機械手臂,與在機械手臂上的磁盤讀取頭(可擦寫磁盤盤上的數據);
? ● 主軸馬達,可以轉動磁盤盤,讓機械手臂的讀取頭在磁盤盤上讀寫數據。
2)磁盤盤上的物理組成則為:
? ● 區(qū)(Sector)為最小的物理儲存單位,每個扇區(qū)為 512 bytes;
? ● 將扇區(qū)組成一個圓,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小單位;
? ● 第一個扇區(qū)最重要,里面有:(1)主要啟動區(qū)(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 則占有 64 bytes。
3)各種接口的磁盤在Linux中的文件名分別為:
? ● /dev/sd[a-p][1-15]:為SCSI, SATA, U盤, Flash閃盤等接口的磁盤文件名;
? ● /dev/hd[a-d][1-63]:為 IDE 接口的磁盤文件名;
4)那么指定分割槽的磁柱范圍是記錄在哪里?
就是第一個扇區(qū)的分割表中啦!但是因為分割表僅有64bytes而已, 因此最多只能記錄四筆分割槽的記錄,這四筆記錄我們稱為主要 (primary) 或延伸 (extended) 分割槽,其中擴展分配槽還可以再分割出邏輯分割槽 (logical) , 而能被格式化的則僅有主要分割與邏輯分割而已。
5)最后,我們再將第三章關于分割的定義拿出來說明一下啰:
? ● 主要分割與擴展分配最多可以有四筆(硬盤的限制);
? ● 擴展分配最多只能有一個(操作系統的限制);
? ● 邏輯分割是由擴展分配持續(xù)切割出來的分割槽;
? ● 能夠被格式化后,作為數據存取的分割槽為主要分割與邏輯分割。擴展分配無法格式化;
? ● 邏輯分割的數量依操作系統而不同,在Linux系統中,IDE硬盤最多有59個邏輯分割(5號到63號), SATA硬盤則有11個邏輯分割(5號到15號)。
? ●?
【8.1.2】文件系統特性
1)傳統文件系統中,一個分區(qū)就是只能夠被格式化成為一個文件系統,所以一個文件系統傳統上被稱為一個分區(qū);
1.1)由于LVM 和 軟磁盤陣列的技術存在,一個分區(qū)可以格式為多多個文件系統;所以通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分割槽(分區(qū))喔!
2)文件系統通常會將這兩部份的數據分別存放在不同的區(qū)塊,權限與屬性放置到 inode 中,至于實際數據則放置到 data block 區(qū)塊中。 另外,還有一個超級區(qū)塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。
每個 inode 與 block 都有編號,至于這三個數據的意義可以簡略說明如下:
? ● superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統的格式與相關信息等;
? ● inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的 block 號碼;
? ● block:實際記錄文件的內容,若文件太大時,會占用多個 block 。
3)文件系統荔枝:
3.1)索引式文件系統:
我們將 inode 與 block 區(qū)塊用圖解來說明一下,如下圖所示,文件系統先格式化出 inode 與 block 的區(qū)塊,假設某一個文件的屬性與權限數據是放置到 inode 4 號(下圖較小方格內),而這個 inode 記錄了文件數據的實際放置點為 2, 7, 13, 15 這四個 block 號碼,此時我們的操作系統就能夠據此來排列磁盤的閱讀順序,可以一口氣將四個 block 內容讀出來! 那么數據的讀取就如同下圖中的箭頭所指定的模樣了。
(3)
3.2)FAT文件系統:
FAT 這種格式的文件系統并沒有 inode 存在,所以 FAT 沒有辦法將這個文件的所有 block 在一開始就讀取出來。每個 block 號碼都記錄在前一個 block 當中, 他的讀取方式有點像底下這樣:
(4)
上圖中我們假設文件的數據依序寫入1->7->4->15號這四個 block 號碼中, 但這個文件系統沒有辦法一口氣就知道四個 block 的號碼,他得要一個一個的將 block 讀出后,才會知道下一個 block 在何處。 如果同一個文件數據寫入的 block 分散的太過厲害時,則我們的磁盤讀取頭將無法在磁盤轉一圈就讀到所有的數據, 因此磁盤就會多轉好幾圈才能完整的讀取到這個文件的內容!
4)碎片整理
需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時文件讀取的效能將會變的很差所致。 這個時候可以透過碎片整理將同一個文件所屬的 blocks 匯整在一起,這樣數據的讀取會比較容易啊!
【8.1.3】Linux的Ext2文件系統(inode)
1)因為標準的 Linux 文件系統 Ext2 就是使用這種 inode 為基礎的文件系統啦!
1.1)inode 的內容在記錄文件的權限與相關屬性,至于 block 區(qū)塊則是在記錄文件的實際內容。 而且文件系統一開始就將 inode 與 block 規(guī)劃好了,除非重新格式化(或者利用 resize2fs 等命令變更文件系統大小),否則 inode 與 block 固定后就不再變動。
1.2)Ext2 文件系統在格式化的時候基本上是區(qū)分為多個區(qū)塊群組 (block group) 的,每個區(qū)塊群組都有獨立的 inode/block/superblock 系統。整個來說,Ext2 格式化后有點像底下這樣:
(5)
1.3)在整體的規(guī)劃當中,文件系統最前面有一個啟動扇區(qū)(boot sector),這個啟動扇區(qū)可以安裝引導裝載程序。這是個非常重要的設計,因為如此一來我們就能夠將不同的啟動管理程序安裝到個別的文件系統最前端,而不用覆蓋整顆硬盤唯一的 MBR, 這樣也才能夠制作出多重引導的環(huán)境啊!
2)每一個區(qū)塊群組(block group)的六個主要內容說明如下:
2.1)data block 數據塊
2.1.1)data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1K, 2K 及 4K 三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄啦。
2.1.2)block 大小而產生的 Ext2 文件系統限制如下:
(6)
除此之外 Ext2 文件系統的 block 還有什么限制呢?有的!基本限制如下:
? ● 原則上,block 的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
? ● 每個 block 內最多只能夠放置一個文件的數據;
? ● 承上,如果文件大于 block 的大小,則一個文件會占用多個 block 數量;
? ● 承上,若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費)。
2.2)inodetable inode表格
2.2.1)如前所述 inode 的內容在記錄文件的屬性以及該文件實際數據是放置在哪幾號 block 內! 基本上,inode 記錄的文件數據至少有底下這些:
? ● 該文件的存取模式(read/write/excute);
? ● 該文件的擁有者與群組(owner/group);
? ● 該文件的容量;
? ● 該文件創(chuàng)建或狀態(tài)改變的時間(ctime);
? ● 最近一次的讀取時間(atime);
? ● 最近修改的時間(mtime);
? ● 定義文件特性的旗標(flag),如 SetUID...;
? ● 該文件真正內容的指向 (pointer);
2.2.2)inode 的數量與大小也是在格式化時就已經固定了,除此之外 inode 還有些什么特色呢?
? ● 每個 inode 大小均固定為 128 bytes;
? ● 每個文件都僅會占用一個 inode 而已;
? ● 承上,因此文件系統能夠創(chuàng)建的文件數量與 inode 的數量有關;
? ● 系統讀取文件時需要先找到 inode,并分析 inode 所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取 block 的內容。
【荔枝】我們約略來分析一下 inode / block 與文件大小的關系好了。inode 要記錄的數據非常多,但偏偏又只有 128bytes 而已, 而 inode 記錄一個 block 號碼要花掉 4byte ,假設我一個文件有 400MB 且每個 block 為 4K 時, 那么至少也要十萬筆 block 號碼的記錄呢!inode 哪有這么多可記錄的信息?為此我們的系統很聰明的將 inode 記錄 block 號碼的區(qū)域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區(qū)。這是啥?我們將 inode 的結構畫一下好了。
(7)
2.2.3)上圖最左邊為 inode 本身 (128 bytes),里面有 12 個直接指向 block 號碼的對照,這 12 筆記錄就能夠直接取得 block 號碼啦! 至于所謂的間接就是再拿一個 block 來當作記錄 block 號碼的記錄區(qū),如果文件太大時, 就會使用間接的 block 來記錄編號。
2.2.4)這樣子 inode 能夠指定多少個 block 呢?我們以較小的 1K block 來說明好了,可以指定的情況如下:
? ● 12 個直接指向: 12*1K=12K
由于是直接指向,所以總共可記錄 12 筆記錄,因此總額大小為如上所示;
? ● 間接: 256*1K=256K
每筆 block 號碼的記錄會花去 4bytes,因此 1K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的文件大小如上;?
? ● 雙間接: 256*256*1K=2562K
第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上;
? ● 三間接: 256*256*256*1K=2563K
第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上;
? ● 總額:將直接、間接、雙間接、三間接加總,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB
2.3)superblock 超級塊
Superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock ,就沒有這個 filesystem 了。他記錄的信息主要有:
? ● block 與 inode 的總量;
? ● 未使用與已使用的 inode / block 數量;
? ● block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes);
? ● filesystem 的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息;
? ● 一個 valid bit 數值,若此文件系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
2.4)File system description 文件系統描述
這個區(qū)段可以描述每個 block group 的開始與結束的 block 號碼,以及說明每個區(qū)段 (superblock, bitmap, inodemap, data block) 分別介于哪一個 block 號碼之間。這部份也能夠用 dumpe2fs 來觀察的。
2.5)block bitmap 塊對照表
從 block bitmap 當中可以知道哪些 block 是空的,因此我們的系統就能夠很快速的找到可使用的空間來處置文件啰。
2.6)inode bitmap inode對照表
inode bitmap 則是記錄使用與未使用的 inode 號碼啰!
【荔枝】每個區(qū)段與 superblock 的信息都可以使用 dumpe2fs 這個命令來查詢的!
(8)
(9)
【8.1.4】與目錄樹的關系
1)那么目錄與文件在 Ext2 文件系統當中是如何記錄數據的呢? 基本上可以這樣說:
1.1)目錄
當我們在 Linux 下的 ext2 文件系統創(chuàng)建一個目錄時, ext2 會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關權限與屬性,并可記錄分配到的那塊 block 號碼; 而 block 則是記錄在這個目錄下的文件名與該文件名占用的 inode 號碼數據(理解下文的硬鏈接需要參考此內容)。也就是說目錄所占用的 block 內容在記錄如下的信息:
(10)
【荔枝】如果想要實際觀察 root 家目錄內的文件所占用的 inode 號碼時,可以使用 ls -i 這個選項來處理:
(11)
【荔枝】如果我想要讀取 /etc/passwd 這個文件時,系統是如何讀取的呢?
(12)
【8.1.5】EXT2/EXT3 文件的存取與日志式文件系統的功能
1)假設我們想要新增一個文件,此時文件系統的行為是:
? 1. 先確定用戶對于欲新增文件的目錄是否具有 w 與 x 的權限,若有的話才能新增;
? 2. 根據 inode bitmap 找到沒有使用的 inode 號碼,并將新文件的權限/屬性寫入;
? 3. 根據 block bitmap 找到沒有使用中的 block 號碼,并將實際的數據寫入 block 中,且升級 inode 的 block 指向數據;
? 4. 將剛剛寫入的 inode 與 block 數據同步升級 inode bitmap 與 block bitmap,并升級 superblock 的內容。
2)一般來說,我們將 inode table 與 data block 稱為數據存放區(qū)域,至于其他例如 superblock、 block bitmap 與 inode bitmap 等區(qū)段就被稱為 metadata (中介數據) 啰。
因為 superblock, inode bitmap 及 block bitmap 的數據是經常變動的,每次新增、移除、編輯時都可能會影響到這三個部分的數據,因此才被稱為中間數據的啦。?
3)superblock, inode bitmap 及 block bitmap 可能存在數據不一致的情況,所以出現了日志文件系統,如下:
? 1. 預備:當系統要寫入一個文件時,會先在日志記錄區(qū)塊中紀錄某個文件準備要寫入的信息;
? 2. 實際寫入:開始寫入文件的權限與數據;開始升級 metadata 的數據;
? 3. 結束:完成數據與 metadata 的升級后,在日志記錄區(qū)塊當中完成該文件的紀錄。
2)Linux 系統上面文件系統與內存有非常大的關系喔:
? ● 系統會將常用的文件數據放置到主存儲器的緩沖區(qū),以加速文件系統的讀/寫;
? ● 承上,因此 Linux 的物理內存最后都會被用光!這是正常的情況!可加速系統效能;
? ● 你可以手動使用 sync 來強迫內存中配置為 Dirty 的文件回寫到磁盤中;
? ● 若正常關機時,關機命令會主動呼叫 sync 來將內存的數據回寫入磁盤內;
? ● 但若不正常關機(如跳電、死機或其他不明原因),由于數據尚未回寫到磁盤內, 因此重新啟動后可能會花很多時間在進行磁盤檢驗,甚至可能導致文件系統的損毀(非磁盤損毀)。
【8.1.7】掛載點的的意義
1)每個 filesystem 都有獨立的 inode / block / superblock 等信息,這個文件系統要能夠鏈接到目錄樹才能被我們使用。 重點是:掛載點一定是目錄,該目錄為進入該文件系統的入口。??
(13)
2)同一個 filesystem 的某個 inode 只會對應到一個文件內容而已(因為一個文件占用一個 inode 之故), 因此我們可以透過判斷 inode 號碼來確認不同文件名是否為相同的文件喔! 下圖中的25表示有25個軟鏈接文件鏈接到該目錄;
(14)
【8.1.8】其他linux支持的文件系統與VFS
1)常見的支持文件系統有:
? ● 傳統文件系統:ext2 / minix / MS-DOS / FAT (用 vfat 模塊) / iso9660 (光盤)等等;
? ● 日志式文件系統: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
? ● 網絡文件系統: NFS / SMBFS
【荔枝】linux支持的文件系統有哪些:
(15)
【荔枝】系統目前已加載到內存中支持的文件系統則有:
(16)
【8.2】文件系統的簡單操作
【8.2.1】磁盤與目錄的容量:df, du
【荔枝】df:列出文件系統的整體磁盤使用量;
【荔枝】du:評估文件系統的磁盤使用量(常用在推估目錄所占容量),主要用于統計目錄和文件所占磁盤大小
(干貨——區(qū)別df 和 du 的不同)
由于 df 主要讀取的數據幾乎都是針對一整個文件系統,因此讀取的范圍主要是在 Superblock 內的信息, 所以這個命令顯示結果的速度非常的快速!
(17)
(18)
(20)
(21)
(22)
【注意】
注意1)如果使用 -a 這個參數時,系統會出現 /proc 這個掛載點,但是里面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統所需要加載的系統數據,而且是掛載在『內存當中』的, 所以當然沒有占任何的硬盤空間啰!
注意2)至于那個 /dev/shm/ 目錄,其實是利用內存虛擬出來的磁盤空間!
【荔枝】du:評估文件系統的磁盤使用量(常用在推估目錄所占容量)
與 df 不一樣的是,du 這個命令其實會直接到文件系統內去搜尋所有的文件數據, 所以上述第三個范例命令的運行會運行一小段時間!
(23)
補充:容量單位都是K;
(26)
【8.2.2】創(chuàng)建鏈接文件命令:ln, 這里應該是硬鏈接文件,也可以用 copy -l 進行創(chuàng)建;
1)在 Linux 底下的連結檔有兩種:
1.1)軟鏈接:一種是類似 Windows 的快捷方式功能的文件,可以讓你快速的鏈接到目標文件(或目錄);?
1.2)硬鏈接:另一種則是透過文件系統的 inode 連結來產生新檔名,而不是產生新文件!這種稱為實體鏈接 (hard link)。
【干貨】下面將講解硬鏈接和軟鏈接。
2)hard link(硬連接)
2.1)每個文件都會占用一個 inode,文件內容由inode的記錄來指向;其中inode 存儲文件屬性,包括訪問權限,存儲文件內容的block塊號碼等;而data block存儲文件的數據內容;每個inode占用128 bytes字節(jié),而每個data block 大小為 1k, 2k 或 4k;每個inode 記錄一個 data block號碼需要花費4 bytes字節(jié);
2.2)文件名與目錄有關,但文件內容與inode有關;
2.3)多個文件名指向同一個inode號碼,這就是硬連接的作用;
2.4)簡單來說:硬連接只是在某個目錄下新建一條文件名鏈接到某inode號碼的關聯記錄而已;(干貨——硬鏈接的定義)
3)舉個例子來說:假設我系統有個 /root/crontab,他是 /etc/crontab 的實體鏈接,也就是說這兩個檔名連結到同一個 inode , 自然這兩個文件名的所有相關信息都會一模一樣(除了文件名之外)。
【荔枝】硬鏈接:
(27)
補充:將讀取到正確數據的方式畫成示意圖,就類似如下畫面:
(28)
分析1)上圖的意思是,你可以透過 1 或 2 的目錄之 inode 指定的 block 找到兩個不同的檔名,而不管使用哪個檔名均可以指到 real 那個 inode 去讀取到最終數據!那這樣有什么好處呢?最大的好處就是『安全』!如同上圖中, 如果你將任何一個『檔名』刪除,其實 inode 與 block 都還是存在的!?
分析2)由圖中可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會添加 inode 也不會耗用 block 數量。(干貨——硬鏈接的物理意義)
分析3)硬鏈接文件的限制:
不能跨 Filesystem;
不能 link 目錄。
【總結干貨】硬鏈接:inode1 和 inode 2 分別是目錄 /etc/ 和 目錄/root的 inode;目錄inode記錄對應的數據block號碼;該數據塊存儲了 文件名稱和對應的inode編號;而/etc/crontab 和 /root/crontab 這兩個文件名稱的inode編號都是 real,即391395;通過real 這個inode就可以找到真實的文件數據內容。
4)軟鏈接:Symbolic Link (符號鏈接,亦即是快捷方式)
4.1)介紹: Symbolic link 就是在創(chuàng)建一個獨立的文件,而這個文件會讓數據的讀取指向他 link 的那個文件的檔名!由于只是利用文件來做為指向的動作, 所以,當來源檔被刪除之后,symbolic link 的文件會『開不了』, 會一直說『無法開啟某文件!』。實際上就是找不到原始『檔名』而已。
【荔枝-軟鏈接】創(chuàng)建一個軟鏈接
(29)
分析)由上表的結果我們可以知道兩個文件指向不同的 inode 號碼,當然就是兩個獨立的文件存在! 而且連結檔的重要內容就是他會寫上目標文件的『文件名』, 你可以發(fā)現為什么上表中連結檔的大小為 12 bytes 呢? 因為箭頭(-->)右邊的檔名『/etc/crontab』總共有 12 個英文,每個英文占用 1 個 byes ,所以文件大小就是 12bytes了! 圖例解釋如下:
(30)
【總結干貨】軟鏈接:inode1和inode2 分別是 目錄/etc 和 目錄 /root 的目錄inode,對應的數據塊存儲著 文件名和對應的inode;軟鏈接文件的文件名對應的inode不是實際文件的inode,而是目錄/etc的inode,即inode2;通過傳入的文件名 -->/etc/crontab 找到對應的inode real,從而鏈接到文件實際內容;
【荔枝】ln命令:制作鏈接文件
(31)
(du -sb 列出文件總大小;df -i 列出文件系統使用量并顯示inode)
(32)
(33)
注意:第3列的硬鏈接數量都是2,從1增加到2了;
【荔枝】創(chuàng)建軟鏈接
(34)
(35)
(36)
補充) 使用 -s 的參數創(chuàng)建一個名為 passwd-so 的文件,則你修改 passwd-so 時,其內容與 passwd 完全相同,并且,當你按下儲存之后,被改變的將是 passwd 這個文件!
5)關于目錄的鏈接數量:
當我們創(chuàng)建一個新目錄名稱為 /tmp/testing 時,基本上會有三個東西,那就是:
/tmp/testing
/tmp/testing/.
/tmp/testing/..
當我們創(chuàng)建一個新的目錄時,新的目錄的 硬鏈接數為 2 ,而上一級目錄的硬鏈接數則會添加 1。
可以把 /tmp/testing/.目錄當做 /tmp/testing 目錄的硬鏈接;而 /tmp/..目錄當做 /tmp 目錄的硬鏈接;
【荔枝】目錄硬鏈接數量
(37)
(38)
【8.3】磁盤的分區(qū),格式化,檢驗與掛載
1)想在系統里面新增一個硬盤,需要做什么呢?
1.1)對磁盤進行分割,以創(chuàng)建可用的 partition ;
1.2)對該 partition 進行格式化( format ),以創(chuàng)建系統可用的 filesystem;
1.3)若想要仔細一點,則可對剛剛創(chuàng)建好的 filesystem 進行檢驗;
1.4)在 Linux 系統上,需要創(chuàng)建掛載點 ( 亦即是目錄 ),并將他掛載上來;
【8.3.1】磁盤分區(qū):fdisk
(39)
1)fdisk簡介:輸出設備的所有分區(qū)內容;
(40)
(41)
不管你進行了什么動作,只要離開 fdisk 時按下『q』,那么所有的動作『都不會生效!』相反的, 按下『w』就是動作生效的意思。
(42)
(43)
【荔枝】fdisk -l 查看所有分區(qū)
補充:其打印效果,同 fdisk /dev/sda;
(44)
2)下面是分區(qū)演示內容,僅截圖,不進行實際操作;
2.1)刪除分區(qū):
(45)
2.2)新增分區(qū):
(46)
2.3)新增擴展分區(qū)
(47)
【8.3.2】磁盤格式化
1)mkfs命令:進行磁盤格式化
(48)
(49)
2)mke2fs命令:
(50)
【mke2fs荔枝】mke2fs 是一個很詳細但是很麻煩的命令!因為里面的細部配置太多了!現在我們進行如下的假設:
? ● 這個文件系統的標頭配置為:vbird_logical
? ● 我的 block 指定為 2048 大小;
? ● 每 8192 bytes 分配一個 inode ;
? ● 建置為 journal 的 Ext3 文件系統。
格式化操作如下:
(51)
【8.3.3】磁盤檢驗:fsck, badblocks
(52)
(53)
【8.3.4】磁盤掛載與卸載
1)不過要進行掛載前,你最好先確定幾件事:
? ● 單一文件系統不應該被重復掛載在不同的掛載點(目錄)中;
? ● 單一目錄不應該重復掛載多個文件系統;
? ● 要作為掛載點的目錄,理論上應該都是空目錄才是。
2)掛載命令和卸載: mount 和 umount;
【8.3.5】磁盤參數修改
1)查看設備列表:
(54)
(55)
2)上面的8 表示主設備代碼,0~8表示次設備代碼;常用硬盤文件名/dev/hda 和 /dev/sda 設備代碼如下:
(56)
3)修改磁盤參數: mknod
(57)
4)修改卷標: e2label
(58)
5)tune2fs
(59)
6)hdparm:?
【8.4】設置開機掛載
1)系統掛載限制:
? ● 根目錄 / 是必須掛載的﹐而且一定要先于其它 mount point 被掛載進來。
? ● 其它 mount point 必須為已創(chuàng)建的目錄﹐可任意指定﹐但一定要遵守必須的系統目錄架構原則
? ● 所有 mount point 在同一時間之內﹐只能掛載一次。
? ● 所有 partition 在同一時間之內﹐只能掛載一次。
? ● 如若進行卸除﹐您必須先將工作目錄移到 mount point(及其子目錄) 之外。
2)/etc/fstab 文件:?
其實 /etc/fstab (filesystem table) 就是將我們利用 mount 命令進行掛載時, 將所有的選項與參數寫入到這個文件中就是了。
(60)
分析)第1列:磁盤設備文件名或該設備的label;
第2列:掛載點或目錄;
第3列:磁盤分區(qū)的文件系統,如ext4;
第4列:文件系統參數;
(61)
第5列:能否被 dump 備份命令作用;
第6列:是否以 fsck 檢驗扇區(qū);
【荔枝】開機自動掛載:假設我們要將 /dev/sda7 每次啟動都自動掛載到 /mnt/tr-tmp ,該如何進
(62)
【8.4.2】特殊設備 loop 掛載(鏡像文件不刻錄就可以掛載)
【8.5】內存空間交換 swap的構建
【8.7】重點回顧
? ● 基本上 Linux 的正統文件系統為 Ext2 ,該文件系統內的信息主要有:
? ? ? ○ superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統的格式與相關信息等;
? ? ? ○ inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的 block 號碼;
? ? ? ○ block:實際記錄文件的內容,若文件太大時,會占用多個 block 。
? ● Ext2 文件系統的數據存取為索引式文件系統(indexed allocation)
? ● 需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時文件讀取的效能將會變的很差所致。 這個時候可以透過碎片整理將同一個文件所屬的 blocks 匯整在一起。
? ● Ext2文件系統主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。
? ● data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1K, 2K 及 4K 三種而已
? ● inode 記錄文件的屬性/權限等數據,其他重要項目為: 每個 inode 大小均固定為 128 bytes; 每個文件都僅會占用一個 inode 而已; 因此文件系統能夠創(chuàng)建的文件數量與 inode 的數量有關;
? ● 文件的 block 在記錄文件的實際數據,目錄的 block 則在記錄該目錄底下文件名與其 inode 號碼的對照表;
? ● 日志式文件系統 (journal) 會多出一塊記錄區(qū),隨時記載文件系統的主要活動,可加快系統復原時間;
? ● Linux 文件系統為添加效能,會讓主存儲器作為大量的磁盤高速緩存;
? ● 實體鏈接只是多了一個文件名對該 inode 號碼的鏈接而已;
? ● 符號鏈接就類似Windows的快捷方式功能。
? ● 磁盤的使用必需要經過:分割、格式化與掛載,分別慣用的命令為:fdisk, mkfs, mount三個命令
?【補充】硬盤與存儲設備 https://blog.csdn.net/pacosonswjtu/article/details/79811762
(1)
實際的數據都是寫在具有磁性物質的磁碟盤上頭,而讀寫主要是透過在機械手臂上的讀取頭(head)來達成。 實際運作時, 主軸馬達讓磁碟盤轉動,然后機械手臂可伸展讓讀取頭在磁碟盤上頭進行讀寫的動作。
(2)
1)扇區(qū):整個磁碟盤上頭好像有多個同心圓繪制出的圓形圖,而由圓心以放射狀的方式分割出磁碟的最小儲存單位,那就是扇區(qū)(Sector); 在物理組成分面,每個扇區(qū)大小為512Bytes,這個值是不會改變的。
2)磁道:扇區(qū)組成一個圓就成為磁道(track);
3)磁柱: 如果是在多碟(多盤片)的硬盤上面,在所有磁碟盤上面的同一個磁道可以組成一個磁柱(Cylinder), 磁柱也是一般我們分割硬盤時的最小單位!
總結) 扇區(qū)組成一個圓就是磁道;所有盤片上的同一個磁道組成一個磁柱;
【補充結束】
【8.1.1】硬盤組成與分區(qū)復習
1)整顆磁盤的組成主要有:
? ● 圓形的磁盤盤(主要記錄數據的部分);
? ● 機械手臂,與在機械手臂上的磁盤讀取頭(可擦寫磁盤盤上的數據);
? ● 主軸馬達,可以轉動磁盤盤,讓機械手臂的讀取頭在磁盤盤上讀寫數據。
2)磁盤盤上的物理組成則為:
? ● 區(qū)(Sector)為最小的物理儲存單位,每個扇區(qū)為 512 bytes;
? ● 將扇區(qū)組成一個圓,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小單位;
? ● 第一個扇區(qū)最重要,里面有:(1)主要啟動區(qū)(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 則占有 64 bytes。
3)各種接口的磁盤在Linux中的文件名分別為:
? ● /dev/sd[a-p][1-15]:為SCSI, SATA, U盤, Flash閃盤等接口的磁盤文件名;
? ● /dev/hd[a-d][1-63]:為 IDE 接口的磁盤文件名;
4)那么指定分割槽的磁柱范圍是記錄在哪里?
就是第一個扇區(qū)的分割表中啦!但是因為分割表僅有64bytes而已, 因此最多只能記錄四筆分割槽的記錄,這四筆記錄我們稱為主要 (primary) 或延伸 (extended) 分割槽,其中擴展分配槽還可以再分割出邏輯分割槽 (logical) , 而能被格式化的則僅有主要分割與邏輯分割而已。
5)最后,我們再將第三章關于分割的定義拿出來說明一下啰:
? ● 主要分割與擴展分配最多可以有四筆(硬盤的限制);
? ● 擴展分配最多只能有一個(操作系統的限制);
? ● 邏輯分割是由擴展分配持續(xù)切割出來的分割槽;
? ● 能夠被格式化后,作為數據存取的分割槽為主要分割與邏輯分割。擴展分配無法格式化;
? ● 邏輯分割的數量依操作系統而不同,在Linux系統中,IDE硬盤最多有59個邏輯分割(5號到63號), SATA硬盤則有11個邏輯分割(5號到15號)。
? ●?
【8.1.2】文件系統特性
1)傳統文件系統中,一個分區(qū)就是只能夠被格式化成為一個文件系統,所以一個文件系統傳統上被稱為一個分區(qū);
1.1)由于LVM 和 軟磁盤陣列的技術存在,一個分區(qū)可以格式為多多個文件系統;所以通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分割槽(分區(qū))喔!
2)文件系統通常會將這兩部份的數據分別存放在不同的區(qū)塊,權限與屬性放置到 inode 中,至于實際數據則放置到 data block 區(qū)塊中。 另外,還有一個超級區(qū)塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。
每個 inode 與 block 都有編號,至于這三個數據的意義可以簡略說明如下:
? ● superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統的格式與相關信息等;
? ● inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的 block 號碼;
? ● block:實際記錄文件的內容,若文件太大時,會占用多個 block 。
3)文件系統荔枝:
3.1)索引式文件系統:
我們將 inode 與 block 區(qū)塊用圖解來說明一下,如下圖所示,文件系統先格式化出 inode 與 block 的區(qū)塊,假設某一個文件的屬性與權限數據是放置到 inode 4 號(下圖較小方格內),而這個 inode 記錄了文件數據的實際放置點為 2, 7, 13, 15 這四個 block 號碼,此時我們的操作系統就能夠據此來排列磁盤的閱讀順序,可以一口氣將四個 block 內容讀出來! 那么數據的讀取就如同下圖中的箭頭所指定的模樣了。
(3)
3.2)FAT文件系統:
FAT 這種格式的文件系統并沒有 inode 存在,所以 FAT 沒有辦法將這個文件的所有 block 在一開始就讀取出來。每個 block 號碼都記錄在前一個 block 當中, 他的讀取方式有點像底下這樣:
(4)
上圖中我們假設文件的數據依序寫入1->7->4->15號這四個 block 號碼中, 但這個文件系統沒有辦法一口氣就知道四個 block 的號碼,他得要一個一個的將 block 讀出后,才會知道下一個 block 在何處。 如果同一個文件數據寫入的 block 分散的太過厲害時,則我們的磁盤讀取頭將無法在磁盤轉一圈就讀到所有的數據, 因此磁盤就會多轉好幾圈才能完整的讀取到這個文件的內容!
4)碎片整理
需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時文件讀取的效能將會變的很差所致。 這個時候可以透過碎片整理將同一個文件所屬的 blocks 匯整在一起,這樣數據的讀取會比較容易啊!
【8.1.3】Linux的Ext2文件系統(inode)
1)因為標準的 Linux 文件系統 Ext2 就是使用這種 inode 為基礎的文件系統啦!
1.1)inode 的內容在記錄文件的權限與相關屬性,至于 block 區(qū)塊則是在記錄文件的實際內容。 而且文件系統一開始就將 inode 與 block 規(guī)劃好了,除非重新格式化(或者利用 resize2fs 等命令變更文件系統大小),否則 inode 與 block 固定后就不再變動。
1.2)Ext2 文件系統在格式化的時候基本上是區(qū)分為多個區(qū)塊群組 (block group) 的,每個區(qū)塊群組都有獨立的 inode/block/superblock 系統。整個來說,Ext2 格式化后有點像底下這樣:
(5)
1.3)在整體的規(guī)劃當中,文件系統最前面有一個啟動扇區(qū)(boot sector),這個啟動扇區(qū)可以安裝引導裝載程序。這是個非常重要的設計,因為如此一來我們就能夠將不同的啟動管理程序安裝到個別的文件系統最前端,而不用覆蓋整顆硬盤唯一的 MBR, 這樣也才能夠制作出多重引導的環(huán)境啊!
2)每一個區(qū)塊群組(block group)的六個主要內容說明如下:
2.1)data block 數據塊
2.1.1)data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1K, 2K 及 4K 三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄啦。
2.1.2)block 大小而產生的 Ext2 文件系統限制如下:
(6)
除此之外 Ext2 文件系統的 block 還有什么限制呢?有的!基本限制如下:
? ● 原則上,block 的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
? ● 每個 block 內最多只能夠放置一個文件的數據;
? ● 承上,如果文件大于 block 的大小,則一個文件會占用多個 block 數量;
? ● 承上,若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費)。
2.2)inodetable inode表格
2.2.1)如前所述 inode 的內容在記錄文件的屬性以及該文件實際數據是放置在哪幾號 block 內! 基本上,inode 記錄的文件數據至少有底下這些:
? ● 該文件的存取模式(read/write/excute);
? ● 該文件的擁有者與群組(owner/group);
? ● 該文件的容量;
? ● 該文件創(chuàng)建或狀態(tài)改變的時間(ctime);
? ● 最近一次的讀取時間(atime);
? ● 最近修改的時間(mtime);
? ● 定義文件特性的旗標(flag),如 SetUID...;
? ● 該文件真正內容的指向 (pointer);
2.2.2)inode 的數量與大小也是在格式化時就已經固定了,除此之外 inode 還有些什么特色呢?
? ● 每個 inode 大小均固定為 128 bytes;
? ● 每個文件都僅會占用一個 inode 而已;
? ● 承上,因此文件系統能夠創(chuàng)建的文件數量與 inode 的數量有關;
? ● 系統讀取文件時需要先找到 inode,并分析 inode 所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取 block 的內容。
【荔枝】我們約略來分析一下 inode / block 與文件大小的關系好了。inode 要記錄的數據非常多,但偏偏又只有 128bytes 而已, 而 inode 記錄一個 block 號碼要花掉 4byte ,假設我一個文件有 400MB 且每個 block 為 4K 時, 那么至少也要十萬筆 block 號碼的記錄呢!inode 哪有這么多可記錄的信息?為此我們的系統很聰明的將 inode 記錄 block 號碼的區(qū)域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區(qū)。這是啥?我們將 inode 的結構畫一下好了。
(7)
2.2.3)上圖最左邊為 inode 本身 (128 bytes),里面有 12 個直接指向 block 號碼的對照,這 12 筆記錄就能夠直接取得 block 號碼啦! 至于所謂的間接就是再拿一個 block 來當作記錄 block 號碼的記錄區(qū),如果文件太大時, 就會使用間接的 block 來記錄編號。
2.2.4)這樣子 inode 能夠指定多少個 block 呢?我們以較小的 1K block 來說明好了,可以指定的情況如下:
? ● 12 個直接指向: 12*1K=12K
由于是直接指向,所以總共可記錄 12 筆記錄,因此總額大小為如上所示;
? ● 間接: 256*1K=256K
每筆 block 號碼的記錄會花去 4bytes,因此 1K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的文件大小如上;?
? ● 雙間接: 256*256*1K=2562K
第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上;
? ● 三間接: 256*256*256*1K=2563K
第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上;
? ● 總額:將直接、間接、雙間接、三間接加總,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB
2.3)superblock 超級塊
Superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock ,就沒有這個 filesystem 了。他記錄的信息主要有:
? ● block 與 inode 的總量;
? ● 未使用與已使用的 inode / block 數量;
? ● block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes);
? ● filesystem 的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息;
? ● 一個 valid bit 數值,若此文件系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
2.4)File system description 文件系統描述
這個區(qū)段可以描述每個 block group 的開始與結束的 block 號碼,以及說明每個區(qū)段 (superblock, bitmap, inodemap, data block) 分別介于哪一個 block 號碼之間。這部份也能夠用 dumpe2fs 來觀察的。
2.5)block bitmap 塊對照表
從 block bitmap 當中可以知道哪些 block 是空的,因此我們的系統就能夠很快速的找到可使用的空間來處置文件啰。
2.6)inode bitmap inode對照表
inode bitmap 則是記錄使用與未使用的 inode 號碼啰!
【荔枝】每個區(qū)段與 superblock 的信息都可以使用 dumpe2fs 這個命令來查詢的!
(8)
(9)
【8.1.4】與目錄樹的關系
1)那么目錄與文件在 Ext2 文件系統當中是如何記錄數據的呢? 基本上可以這樣說:
1.1)目錄
當我們在 Linux 下的 ext2 文件系統創(chuàng)建一個目錄時, ext2 會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關權限與屬性,并可記錄分配到的那塊 block 號碼; 而 block 則是記錄在這個目錄下的文件名與該文件名占用的 inode 號碼數據(理解下文的硬鏈接需要參考此內容)。也就是說目錄所占用的 block 內容在記錄如下的信息:
(10)
【荔枝】如果想要實際觀察 root 家目錄內的文件所占用的 inode 號碼時,可以使用 ls -i 這個選項來處理:
(11)
【荔枝】如果我想要讀取 /etc/passwd 這個文件時,系統是如何讀取的呢?
(12)
【8.1.5】EXT2/EXT3 文件的存取與日志式文件系統的功能
1)假設我們想要新增一個文件,此時文件系統的行為是:
? 1. 先確定用戶對于欲新增文件的目錄是否具有 w 與 x 的權限,若有的話才能新增;
? 2. 根據 inode bitmap 找到沒有使用的 inode 號碼,并將新文件的權限/屬性寫入;
? 3. 根據 block bitmap 找到沒有使用中的 block 號碼,并將實際的數據寫入 block 中,且升級 inode 的 block 指向數據;
? 4. 將剛剛寫入的 inode 與 block 數據同步升級 inode bitmap 與 block bitmap,并升級 superblock 的內容。
2)一般來說,我們將 inode table 與 data block 稱為數據存放區(qū)域,至于其他例如 superblock、 block bitmap 與 inode bitmap 等區(qū)段就被稱為 metadata (中介數據) 啰。
因為 superblock, inode bitmap 及 block bitmap 的數據是經常變動的,每次新增、移除、編輯時都可能會影響到這三個部分的數據,因此才被稱為中間數據的啦。?
3)superblock, inode bitmap 及 block bitmap 可能存在數據不一致的情況,所以出現了日志文件系統,如下:
? 1. 預備:當系統要寫入一個文件時,會先在日志記錄區(qū)塊中紀錄某個文件準備要寫入的信息;
? 2. 實際寫入:開始寫入文件的權限與數據;開始升級 metadata 的數據;
? 3. 結束:完成數據與 metadata 的升級后,在日志記錄區(qū)塊當中完成該文件的紀錄。
【8.1.6】linux文件系統的操作
1)同步內存數據到磁盤:當系統加載一個文件到內存后,如果該文件沒有被更動過,則在內存區(qū)段的文件數據會被配置為干凈(clean)的。 但如果內存中的文件數據被更改過了(例如你用 nano 去編輯過這個文件),此時該內存中的數據會被配置為臟的 (Dirty)。此時所有的動作都還在內存中運行,并沒有寫入到磁盤中! 系統會不定時的將內存中配置為『Dirty』的數據寫回磁盤,以保持磁盤與內存數據的一致性。2)Linux 系統上面文件系統與內存有非常大的關系喔:
? ● 系統會將常用的文件數據放置到主存儲器的緩沖區(qū),以加速文件系統的讀/寫;
? ● 承上,因此 Linux 的物理內存最后都會被用光!這是正常的情況!可加速系統效能;
? ● 你可以手動使用 sync 來強迫內存中配置為 Dirty 的文件回寫到磁盤中;
? ● 若正常關機時,關機命令會主動呼叫 sync 來將內存的數據回寫入磁盤內;
? ● 但若不正常關機(如跳電、死機或其他不明原因),由于數據尚未回寫到磁盤內, 因此重新啟動后可能會花很多時間在進行磁盤檢驗,甚至可能導致文件系統的損毀(非磁盤損毀)。
【8.1.7】掛載點的的意義
1)每個 filesystem 都有獨立的 inode / block / superblock 等信息,這個文件系統要能夠鏈接到目錄樹才能被我們使用。 重點是:掛載點一定是目錄,該目錄為進入該文件系統的入口。??
(13)
2)同一個 filesystem 的某個 inode 只會對應到一個文件內容而已(因為一個文件占用一個 inode 之故), 因此我們可以透過判斷 inode 號碼來確認不同文件名是否為相同的文件喔! 下圖中的25表示有25個軟鏈接文件鏈接到該目錄;
(14)
【8.1.8】其他linux支持的文件系統與VFS
1)常見的支持文件系統有:
? ● 傳統文件系統:ext2 / minix / MS-DOS / FAT (用 vfat 模塊) / iso9660 (光盤)等等;
? ● 日志式文件系統: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
? ● 網絡文件系統: NFS / SMBFS
【荔枝】linux支持的文件系統有哪些:
(15)
【荔枝】系統目前已加載到內存中支持的文件系統則有:
(16)
【8.2】文件系統的簡單操作
【8.2.1】磁盤與目錄的容量:df, du
【荔枝】df:列出文件系統的整體磁盤使用量;
【荔枝】du:評估文件系統的磁盤使用量(常用在推估目錄所占容量),主要用于統計目錄和文件所占磁盤大小
(干貨——區(qū)別df 和 du 的不同)
由于 df 主要讀取的數據幾乎都是針對一整個文件系統,因此讀取的范圍主要是在 Superblock 內的信息, 所以這個命令顯示結果的速度非常的快速!
(17)
(18)
補充:易讀的容量格式,如K, M, G;
(20)
(21)
(22)
【注意】
注意1)如果使用 -a 這個參數時,系統會出現 /proc 這個掛載點,但是里面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統所需要加載的系統數據,而且是掛載在『內存當中』的, 所以當然沒有占任何的硬盤空間啰!
注意2)至于那個 /dev/shm/ 目錄,其實是利用內存虛擬出來的磁盤空間!
【荔枝】du:評估文件系統的磁盤使用量(常用在推估目錄所占容量)
與 df 不一樣的是,du 這個命令其實會直接到文件系統內去搜尋所有的文件數據, 所以上述第三個范例命令的運行會運行一小段時間!
(23)
(上圖僅統計目錄所占磁盤大小)
(24)
(上圖統計了目錄和文件所占磁盤大小)
(25)補充:容量單位都是K;
(26)
【8.2.2】創(chuàng)建鏈接文件命令:ln, 這里應該是硬鏈接文件,也可以用 copy -l 進行創(chuàng)建;
1)在 Linux 底下的連結檔有兩種:
1.1)軟鏈接:一種是類似 Windows 的快捷方式功能的文件,可以讓你快速的鏈接到目標文件(或目錄);?
1.2)硬鏈接:另一種則是透過文件系統的 inode 連結來產生新檔名,而不是產生新文件!這種稱為實體鏈接 (hard link)。
【干貨】下面將講解硬鏈接和軟鏈接。
2)hard link(硬連接)
2.1)每個文件都會占用一個 inode,文件內容由inode的記錄來指向;其中inode 存儲文件屬性,包括訪問權限,存儲文件內容的block塊號碼等;而data block存儲文件的數據內容;每個inode占用128 bytes字節(jié),而每個data block 大小為 1k, 2k 或 4k;每個inode 記錄一個 data block號碼需要花費4 bytes字節(jié);
2.2)文件名與目錄有關,但文件內容與inode有關;
2.3)多個文件名指向同一個inode號碼,這就是硬連接的作用;
2.4)簡單來說:硬連接只是在某個目錄下新建一條文件名鏈接到某inode號碼的關聯記錄而已;(干貨——硬鏈接的定義)
3)舉個例子來說:假設我系統有個 /root/crontab,他是 /etc/crontab 的實體鏈接,也就是說這兩個檔名連結到同一個 inode , 自然這兩個文件名的所有相關信息都會一模一樣(除了文件名之外)。
【荔枝】硬鏈接:
(27)
補充:將讀取到正確數據的方式畫成示意圖,就類似如下畫面:
(28)
分析1)上圖的意思是,你可以透過 1 或 2 的目錄之 inode 指定的 block 找到兩個不同的檔名,而不管使用哪個檔名均可以指到 real 那個 inode 去讀取到最終數據!那這樣有什么好處呢?最大的好處就是『安全』!如同上圖中, 如果你將任何一個『檔名』刪除,其實 inode 與 block 都還是存在的!?
分析2)由圖中可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會添加 inode 也不會耗用 block 數量。(干貨——硬鏈接的物理意義)
分析3)硬鏈接文件的限制:
不能跨 Filesystem;
不能 link 目錄。
【總結干貨】硬鏈接:inode1 和 inode 2 分別是目錄 /etc/ 和 目錄/root的 inode;目錄inode記錄對應的數據block號碼;該數據塊存儲了 文件名稱和對應的inode編號;而/etc/crontab 和 /root/crontab 這兩個文件名稱的inode編號都是 real,即391395;通過real 這個inode就可以找到真實的文件數據內容。
4)軟鏈接:Symbolic Link (符號鏈接,亦即是快捷方式)
4.1)介紹: Symbolic link 就是在創(chuàng)建一個獨立的文件,而這個文件會讓數據的讀取指向他 link 的那個文件的檔名!由于只是利用文件來做為指向的動作, 所以,當來源檔被刪除之后,symbolic link 的文件會『開不了』, 會一直說『無法開啟某文件!』。實際上就是找不到原始『檔名』而已。
【荔枝-軟鏈接】創(chuàng)建一個軟鏈接
(29)
分析)由上表的結果我們可以知道兩個文件指向不同的 inode 號碼,當然就是兩個獨立的文件存在! 而且連結檔的重要內容就是他會寫上目標文件的『文件名』, 你可以發(fā)現為什么上表中連結檔的大小為 12 bytes 呢? 因為箭頭(-->)右邊的檔名『/etc/crontab』總共有 12 個英文,每個英文占用 1 個 byes ,所以文件大小就是 12bytes了! 圖例解釋如下:
(30)
【總結干貨】軟鏈接:inode1和inode2 分別是 目錄/etc 和 目錄 /root 的目錄inode,對應的數據塊存儲著 文件名和對應的inode;軟鏈接文件的文件名對應的inode不是實際文件的inode,而是目錄/etc的inode,即inode2;通過傳入的文件名 -->/etc/crontab 找到對應的inode real,從而鏈接到文件實際內容;
【荔枝】ln命令:制作鏈接文件
(31)
(du -sb 列出文件總大小;df -i 列出文件系統使用量并顯示inode)
(32)
(33)
注意:第3列的硬鏈接數量都是2,從1增加到2了;
【荔枝】創(chuàng)建軟鏈接
(34)
(35)
(36)
補充) 使用 -s 的參數創(chuàng)建一個名為 passwd-so 的文件,則你修改 passwd-so 時,其內容與 passwd 完全相同,并且,當你按下儲存之后,被改變的將是 passwd 這個文件!
5)關于目錄的鏈接數量:
當我們創(chuàng)建一個新目錄名稱為 /tmp/testing 時,基本上會有三個東西,那就是:
/tmp/testing
/tmp/testing/.
/tmp/testing/..
當我們創(chuàng)建一個新的目錄時,新的目錄的 硬鏈接數為 2 ,而上一級目錄的硬鏈接數則會添加 1。
可以把 /tmp/testing/.目錄當做 /tmp/testing 目錄的硬鏈接;而 /tmp/..目錄當做 /tmp 目錄的硬鏈接;
【荔枝】目錄硬鏈接數量
(37)
(38)
【8.3】磁盤的分區(qū),格式化,檢驗與掛載
1)想在系統里面新增一個硬盤,需要做什么呢?
1.1)對磁盤進行分割,以創(chuàng)建可用的 partition ;
1.2)對該 partition 進行格式化( format ),以創(chuàng)建系統可用的 filesystem;
1.3)若想要仔細一點,則可對剛剛創(chuàng)建好的 filesystem 進行檢驗;
1.4)在 Linux 系統上,需要創(chuàng)建掛載點 ( 亦即是目錄 ),并將他掛載上來;
【8.3.1】磁盤分區(qū):fdisk
(39)
1)fdisk簡介:輸出設備的所有分區(qū)內容;
(40)
(41)
不管你進行了什么動作,只要離開 fdisk 時按下『q』,那么所有的動作『都不會生效!』相反的, 按下『w』就是動作生效的意思。
(42)
(43)
【荔枝】fdisk -l 查看所有分區(qū)
補充:其打印效果,同 fdisk /dev/sda;
(44)
2)下面是分區(qū)演示內容,僅截圖,不進行實際操作;
2.1)刪除分區(qū):
(45)
2.2)新增分區(qū):
(46)
2.3)新增擴展分區(qū)
(47)
【8.3.2】磁盤格式化
1)mkfs命令:進行磁盤格式化
(48)
(49)
2)mke2fs命令:
(50)
【mke2fs荔枝】mke2fs 是一個很詳細但是很麻煩的命令!因為里面的細部配置太多了!現在我們進行如下的假設:
? ● 這個文件系統的標頭配置為:vbird_logical
? ● 我的 block 指定為 2048 大小;
? ● 每 8192 bytes 分配一個 inode ;
? ● 建置為 journal 的 Ext3 文件系統。
格式化操作如下:
(51)
【8.3.3】磁盤檢驗:fsck, badblocks
(52)
(53)
【8.3.4】磁盤掛載與卸載
1)不過要進行掛載前,你最好先確定幾件事:
? ● 單一文件系統不應該被重復掛載在不同的掛載點(目錄)中;
? ● 單一目錄不應該重復掛載多個文件系統;
? ● 要作為掛載點的目錄,理論上應該都是空目錄才是。
2)掛載命令和卸載: mount 和 umount;
【8.3.5】磁盤參數修改
1)查看設備列表:
(54)
(55)
2)上面的8 表示主設備代碼,0~8表示次設備代碼;常用硬盤文件名/dev/hda 和 /dev/sda 設備代碼如下:
(56)
3)修改磁盤參數: mknod
(57)
4)修改卷標: e2label
(58)
5)tune2fs
(59)
6)hdparm:?
【8.4】設置開機掛載
1)系統掛載限制:
? ● 根目錄 / 是必須掛載的﹐而且一定要先于其它 mount point 被掛載進來。
? ● 其它 mount point 必須為已創(chuàng)建的目錄﹐可任意指定﹐但一定要遵守必須的系統目錄架構原則
? ● 所有 mount point 在同一時間之內﹐只能掛載一次。
? ● 所有 partition 在同一時間之內﹐只能掛載一次。
? ● 如若進行卸除﹐您必須先將工作目錄移到 mount point(及其子目錄) 之外。
2)/etc/fstab 文件:?
其實 /etc/fstab (filesystem table) 就是將我們利用 mount 命令進行掛載時, 將所有的選項與參數寫入到這個文件中就是了。
(60)
分析)第1列:磁盤設備文件名或該設備的label;
第2列:掛載點或目錄;
第3列:磁盤分區(qū)的文件系統,如ext4;
第4列:文件系統參數;
(61)
第5列:能否被 dump 備份命令作用;
第6列:是否以 fsck 檢驗扇區(qū);
【荔枝】開機自動掛載:假設我們要將 /dev/sda7 每次啟動都自動掛載到 /mnt/tr-tmp ,該如何進
(62)
【8.4.2】特殊設備 loop 掛載(鏡像文件不刻錄就可以掛載)
【8.5】內存空間交換 swap的構建
【8.7】重點回顧
? ● 基本上 Linux 的正統文件系統為 Ext2 ,該文件系統內的信息主要有:
? ? ? ○ superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統的格式與相關信息等;
? ? ? ○ inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的 block 號碼;
? ? ? ○ block:實際記錄文件的內容,若文件太大時,會占用多個 block 。
? ● Ext2 文件系統的數據存取為索引式文件系統(indexed allocation)
? ● 需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時文件讀取的效能將會變的很差所致。 這個時候可以透過碎片整理將同一個文件所屬的 blocks 匯整在一起。
? ● Ext2文件系統主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。
? ● data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1K, 2K 及 4K 三種而已
? ● inode 記錄文件的屬性/權限等數據,其他重要項目為: 每個 inode 大小均固定為 128 bytes; 每個文件都僅會占用一個 inode 而已; 因此文件系統能夠創(chuàng)建的文件數量與 inode 的數量有關;
? ● 文件的 block 在記錄文件的實際數據,目錄的 block 則在記錄該目錄底下文件名與其 inode 號碼的對照表;
? ● 日志式文件系統 (journal) 會多出一塊記錄區(qū),隨時記載文件系統的主要活動,可加快系統復原時間;
? ● Linux 文件系統為添加效能,會讓主存儲器作為大量的磁盤高速緩存;
? ● 實體鏈接只是多了一個文件名對該 inode 號碼的鏈接而已;
? ● 符號鏈接就類似Windows的快捷方式功能。
? ● 磁盤的使用必需要經過:分割、格式化與掛載,分別慣用的命令為:fdisk, mkfs, mount三個命令
? ● 啟動自動掛載可參考/etc/fstab之配置,配置完畢務必使用 mount -a 測試語法正確否;
總結
以上是生活随笔為你收集整理的linux-basic(8)linux磁盘与文件系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费模板怎么使用(秀米免费模板怎么使用)
- 下一篇: 怎么编辑导航(怎么编辑导航位置名称)