/etc/fstab檔案的格式
GDT,超級塊,Indode,校驗碼
inode表,inode組成,位址指針結構
建立檔案:位圖索引
查找檔案:目錄
硬連結,軟連結
删除檔案,複制檔案,移動檔案
開機後,首先挂載的是根,然後手動通過根中的mount指令,關聯其他分區至根
自動挂載的實作
1)定義在/etc/fstab檔案中
2)挂載的檔案系統支援auto選項
/etc/fstab檔案為何開機能自動挂載
系統初始化腳本會起用mount指令掃描/etc/fstab檔案中的每一行
/etc/fstab檔案定義的條目
1、檔案系統非正常關機,開機時,是否檢測?
2、檔案系統中有重要的檔案,是否備份?
/etc/fstab檔案的格式
1
2
<code>UUID=07151862-c2b9-45dc-bf7a-af8d2a6fa6c1 / ext3 defaults 1 1</code>
<code>要挂載的裝置或僞檔案系統 挂載點(裝置挂載的位置) 檔案系統類型 挂載選項 轉儲頻率(備份頻率) 自檢次序</code>
1)要挂載的裝置或僞檔案系統
LABEL="LABEL", UUID="UUID",僞檔案系統(devpts,proc,sysfs),裝置檔案,目錄
CentOS 6: 裝置檔案名,LABEL。當檔案過多時,LABEL可能重複。裝置檔案名可能改變
CentOS 7: btrfs檔案系統,UUID ,UUID_SUB,UUID:全局唯一标示符,就算裝置名改變此 UUID不會改變
2)MOUNT_POINT: 目錄
3)檔案系統的類型: ext2,ext3,ext4,xfs,btrfs
4)挂載選項:mount -o OPTIONS中所有選項:
sync,nosuid,nodev,noatime,noexec,ro
5)轉儲/備份頻率:多長時間備份一次
0 不備份,1 每天備份一次,2每隔一天備份一次
現在一般不會用到此功能:
1、對目錄的備份:周期性任務計劃
2、對檔案系統的備份:用dump備份工具
3、資料庫有專用的備份工具(mysqldump,lv_snapshot,percona-xtraDB)
6)自檢的次序
0:不自檢,1首先自檢,通常為rootfs,2在1次序對應的裝置自檢完畢後,才能自檢。.... 9
不同裝置有相同的自檢序号時,開機同時自檢
實作開機自動挂載
1、清空磁盤
3
4
5
<code># dd if=/dev/zero of=/dev/sdb count=1 bs=512</code>
<code>**</code><code>dd</code><code>指令**更為底層的複制</code>
<code>将</code><code>if</code><code>中的檔案複制至of中,of可為檔案,可為檔案系統</code>
<code>bs=512: </code><code>## 512bytes,0磁道,0扇區,0柱面MBR</code>
<code>count=1 </code><code>## 次數</code>
2、分區
6
7
8
9
10
<code># fdisk /dev/sdb</code>
<code> </code><code>p 顯示分區表</code>
<code> </code><code>n 新增磁盤分區</code>
<code> </code><code>+10G</code>
<code> </code><code>w 儲存退出</code>
<code> </code>
<code># cat /proc/partitions</code>
<code># ls /dev/sdb*</code>
<code># partx -a /dev/sdb</code>
3、格式化磁盤
11
12
13
14
15
16
17
18
19
20
21
22
23
<code>[root@localhost ~]</code><code># mkfs.ext4 -L 'My222' -U $(uuidgen) /dev/sdb1</code>
<code>mke2fs 1.41.12 (17-May-2010)</code>
<code>檔案系統标簽=My222</code>
<code>作業系統:Linux</code>
<code>塊大小=4096 (log=2) </code><code>##預設</code>
<code>分塊大小=4096 (log=2)</code>
<code>Stride=0 blocks, Stripe width=0 blocks</code>
<code>655776 inodes, 2622603 blocks</code>
<code>131130 blocks (5.00%) reserved </code><code>for</code> <code>the super user </code><code>##預設</code>
<code>第一個資料塊=0</code>
<code>Maximum filesystem blocks=2688548864</code>
<code>81 block </code><code>groups</code>
<code>32768 blocks per group, 32768 fragments per group</code>
<code>8096 inodes per group</code>
<code>Superblock backups stored on blocks: </code><code>##超級塊路徑</code>
<code> </code><code>32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632</code>
<code>正在寫入inode表: 完成 </code>
<code>Creating journal (32768 blocks): 完成</code>
<code>Writing superblocks and filesystem accounting information: 完成</code>
<code>This filesystem will be automatically checked every 25 mounts or</code>
<code>180 days, whichever comes first. Use tune2fs -c or -i to override.</code>
4、嘗試挂載
<code>[root@localhost ~]</code><code># mount /dev/sdb1 /mnt</code>
<code>[root@localhost ~]</code><code># ls /mnt</code>
<code>lost+found</code>
<code>[root@localhost ~]</code><code># umount /mnt</code>
5、定義于fstab檔案
<code># vim /etc/fstab</code>
<code>/dev/sdb1</code> <code>/mydata</code> <code>ext4 defaults,acl 2 3</code>
ext檔案系統結構
檔案系統建立時,劃分成多個大小相等的塊,再将幾個塊歸并為一個組。整個檔案系統的結構資訊,儲存于超級塊中。每個組内的結構資訊儲存于GDT塊中。
<a href="https://s4.51cto.com/wyfs02/M01/9E/24/wKiom1mL_TrCgfoYAABRM4ShDb0185.png" target="_blank"></a>
1、超級塊
檢視超級塊結構資訊:
<code>[root@localhost ~]</code><code># dumpe2fs -h /dev/sdb1</code>
<code>[root@localhost ~]</code><code># tune2fs -l /dev/sdb1</code>
<code>整個分區:</code>
<code> </code><code>有多少個塊組,每組有多少個塊或Inode,及使用情況</code>
<code> </code><code>共有多少個Inode塊,多少已用,多少未用。</code>
<code> </code><code>共有多少個Block塊,多少已用,多少未用。</code>
超級塊的位置:
<code>[root@localhost ~]</code><code># mkfs -t ext4 /dev/sdb1</code>
<code>檔案系統标簽=</code>
<code>塊大小=4096 (log=2)</code>
<code>131130 blocks (5.00%) reserved </code><code>for</code> <code>the super user</code>
<code>Maximum filesystem blocks=2688548864 </code><code>## 共有塊數</code>
<code>81 block </code><code>groups</code> <code>## 塊組數</code>
<code>32768 blocks per group </code><code>## 每個組有多少Block</code>
<code>32768 fragments per group </code>
<code>8096 inodes per group </code><code>## 每個組有多少inode</code>
<code>Superblock backups stored on blocks: </code><code>## 超級塊的位置</code>
2、GDT塊
檢視GDT塊結構資訊
<code>[root@localhost ~]</code><code># dumpe2fs /dev/sdb1</code>
<code>Group 80 目前分區塊組編号 </code>
<code> </code><code>(Blocks 2621440-2622602) [INODE_UNINIT, ITABLE_ZEROED] </code><code>##塊組中塊數量</code>
<code> </code><code>Checksum 0x1b87 </code><code>##校驗和</code>
<code> </code><code>unused inodes 8096 </code><code>##沒有使用的inode</code>
<code> </code><code>Block bitmap at 2621440 (+0) </code><code>## 塊位圖 </code>
<code> </code><code>Inode bitmap at 2621456 (+16) </code><code>## inode位圖</code>
<code> </code><code>Inode table at 2621472-2621977 (+32) </code><code>## inode表</code>
<code> </code><code>655 </code><code>free</code> <code>blocks </code><code>## 塊組中空閑的塊</code>
<code> </code><code>8096 </code><code>free</code> <code>inodes </code><code>## 塊組中空閑的inode</code>
<code> </code><code>0 directories </code>
<code> </code><code>8096 unused inodes 0</code>
<code> </code><code>Free blocks: 2621441-2621455, 2621457-2621471, 2621978-2622602 </code><code>##空閑的塊</code>
<code> </code><code>Free inodes: 647681-655776 </code><code>##空閑的inode</code>
基礎名詞:
校驗碼
作用:檢查資料的完整性
校驗方法:
1、資料提供校驗碼,
2、使用前,計算資料的檢驗碼
3、将計算結果與之前的校驗碼比對,一樣,資料可靠。不一樣,不可靠的資料
inode ,inode index
inode是檔案的一級索引(稠密索引,一個檔案對應一個索引節點)
inode組成: size, perm, owner, group, timestamp + 位址指針:檔案存儲的資料塊的編号
inode引用: inode編号
inode空間:計算機辨別每個磁盤塊,用一個二進制數字。
例如65535個資料塊,用16個0到16個1之間的所有變化,每一種變化對應一個磁盤塊。Inode中隻用存儲這些編号,即可找到檔案中所有的資料塊。
如果資料塊過多,二進制位過長時,單個磁盤塊的編号過長,inode空間可能存儲不下。
inode位址指針結構:
直接指針: 直接引用固定個數的塊的編号,引用的塊的數量太少
間接指針: 每個塊編号指向另一個連續的空間。目的為了擴充空間。類似于擴充分區
三級指針:另一個連續空間中的塊中的編号,又指向一個連續的空間
在檔案系統中建立檔案的過程
周遊查找
在一級索引(Inode表)中以周遊的方式查找
1、找空閑Inode:在inode表中,根據inode的标志位周遊的方式找空閑的inode
2、找空閑block: 根據block的标志位周遊的方式找空閑的block,每次查找為單個inode配置設定固定個數的塊。
如果此次存儲的檔案較小時,将沒有用到的塊的狀态辨別為0即可。
如果檔案存儲檔案較大時,再次配置設定固定數量的塊給inode,依次循環,直到存儲完畢。
标志位:标示每個inode或block塊使用的狀态(使用為1 | 未使用為0 )
索引查找
由于周遊的檔案過于低效,就在原基礎之上在建立一個索引(位圖索引),将使用狀态為0歸為一類,将使用狀态為1歸為一類
1、找空閑Inode:查找inode位圖索引
2、找空閑block: 查找block位圖索引
<a href="https://s1.51cto.com/wyfs02/M02/9E/22/wKiom1mL9OSx20LfAACIlEJJFtQ823.png" target="_blank"></a>
位圖索引的建立時也需要全盤掃描,才知道每個标志位狀态,為了便于建立塊位圖,inode位圖,在每個塊組中都有一個塊位圖和Inode位圖。
<a href="https://s5.51cto.com/wyfs02/M00/9E/29/wKioL1mNFseQ-zEgAACemLtJFHQ004.png-wh_500x0-wm_3-wmp_4-s_201731389.png" target="_blank"></a>
在檔案系統中查找檔案的過程
1、找到inode塊
2、找到block塊
目錄:存儲在磁盤塊中,磁盤塊中記錄了檔案名及檔案名對應的inode号碼
查找/etc/sysconfig/network-scripts/ifcfg-eth0的過程
/核心開機挂載了根,就能識别根目錄下檔案及inode号碼
根據etc檔案名對應的inode号碼在inode位圖中找到inode所對應的inode,據inode中的資料塊編号,在block bitmap中找到塊,傳回檔案名及對應的inode号碼,說明是一個目錄
根據sysconfig檔案名對應的inode号碼在inode位圖中找到inode所對應的inode,據inode中的資料塊編号,在block bitmap中找到塊,傳回檔案名及對應的inode号碼,說明是一個目錄
根據network-scripts檔案名對應的inode号碼在inode位圖中找到inode所對應的inode,據inode中的資料塊編号,在block bitmap中找到塊,傳回檔案名及對應的inode号碼,說明是一個目錄
根據ifcfg-eth0檔案名對應的inode号碼在inode位圖中找到inode所對應的inode,據inode中的資料塊編号,在block bitmap中找到塊,傳回檔案的内容,說明是一個檔案。
<a href="https://s1.51cto.com/wyfs02/M01/9E/24/wKiom1mL_JOB6vV3AADCnK3Fz9g334.png" target="_blank"></a>
硬連結和軟連結的差別
硬連結:同一裝置下不同檔案指向相同的inode
建立: ln [-v] SRC DEST
測試兩個檔案是否為硬連結: [ FILE1 -ef FILE2 ]
使用示例
<code>***檔案名,不能以數字開頭***</code>
<code>1、測試兩個檔案是否為硬連結 </code>
<code>1)檢視inode</code>
<code>[root@localhost ~]</code><code># ls -li file.txt 131.txt </code>
<code>1968181 -rw-r--r-- 1 root root 28 Aug 9 08:28 131.txt</code>
<code>1968192 -rw-r--r-- 1 root root 28 Aug 10 14:34 </code><code>file</code><code>.txt</code>
<code>2)測試</code>
<code>[root@localhost ~]</code><code># [ 131.txt -ef file.txt ]</code>
<code>[root@localhost ~]</code><code># echo $?</code>
<code>1</code>
<code>2、建立硬連結</code>
<code>[root@localhost ~]</code><code># ln -v 131.txt 13110.txt</code>
<code>`13110.txt</code><code>' => `131.txt'</code>
<code>[root@localhost ~]</code><code># ls -li 13110.txt 131.txt</code>
<code>1968181 -rw-r--r-- 2 root root 28 Aug 9 08:28 13110.txt</code>
<code>1968181 -rw-r--r-- 2 root root 28 Aug 9 08:28 131.txt</code>
<code>3、測試</code>
<code>[root@localhost ~]</code><code># [ 13110.txt -ef 131.txt ]</code>
<code>0</code>
特性:
不能對目錄,循環引用
不能跨分區
同一裝置同一個inode,會增加Inode引用計數
删除硬連結指向的檔案:表示删除檔案的路徑,把inode計數-1
<code>1、檢視引用計數</code>
<code>2、删除硬連結 </code>
<code>[root@localhost ~]</code><code># rm 13110.txt </code>
<code>rm</code><code>: remove regular </code><code>file</code> <code>`13110.txt'? y</code>
<code>3、檢視引用計數</code>
<code>ls</code><code>: cannot access 13110.txt: No such </code><code>file</code> <code>or directory</code>
當引用計數為0時,Inode位圖中此inode編号對應的Inode塊狀态為0,inode對應的磁盤塊的狀态為0
軟連結:根據檔案名對應的inode号碼在inode位圖中找到inode所對應的inode,inode中不是位址指針/資料塊編号,是一串數字
建立:ln -s [-v] SRC DEST
<code>[root@localhost ~]</code><code># ln -sv 131.txt 131.lk</code>
<code>`131.lk</code><code>' -> `131.txt'</code>
<code>[root@localhost ~]</code><code># ls -l 131.txt 131.lk </code>
<code>lrwxrwxrwx 1 root root 7 Aug 10 14:43 131.lk -> 131.txt</code>
<code>-rw-r--r-- 1 root root 28 Aug 9 08:28 131.txt</code>
可以對目錄和檔案
可以跨分區
指向另一個檔案的路徑,其大小為路徑字元串的長度,不會增加inode引用計數
删除軟連結指向的檔案:删除引用路徑
<code>[root@localhost ~]</code><code># rm 131.txt </code>
<code>rm</code><code>: remove regular </code><code>file</code> <code>`131.txt'? y</code>
<code>ls</code><code>: cannot access 131.txt: No such </code><code>file</code> <code>or directory</code>
<code>lrwxrwxrwx 1 root root 7 Aug 10 14:43 131.lk -> 131.txt</code>
複制檔案和移動檔案的差別
複制檔案
建立新的檔案,在Inode位圖中查找,後在block位圖中查找,引用新的Inode,block。讀出資料和寫入資料。
<code>[root@localhost ~]</code><code># ls -li 1311.txt </code>
<code>1968186 -rw-r--r-- 1 root root 29 Aug 9 08:29 1311.txt</code>
<code>[root@localhost ~]</code><code># cp 1311.txt a.txt</code>
<code>[root@localhost ~]</code><code># ls -li 1311.txt a.txt</code>
<code>1968181 -rw-r--r-- 1 root root 29 Aug 10 14:52 a.txt</code>
移動檔案
同分區,建立硬連結後,删除原檔案
<code>[root@localhost ~]# ls -li a.txt</code>
<code>1968181</code> <code>-rw-r--r-- </code><code>1</code> <code>root root </code><code>29</code> <code>Aug </code><code>10</code> <code>14</code><code>:</code><code>52</code> <code>a.txt</code>
<code>[root@localhost ~]# mv a.txt b.txt</code>
<code>[root@localhost ~]# ls -li b.txt</code>
<code>1968181</code> <code>-rw-r--r-- </code><code>1</code> <code>root root </code><code>29</code> <code>Aug </code><code>10</code> <code>14</code><code>:</code><code>52</code> <code>b.txt</code>
<code>[root@localhost ~]# ls a.txt</code>
<code>ls: cannot access a.txt: No such file or directory</code>
跨分區: 在新分區中建立新的檔案,在新分區的位圖中查找,引用新的Inode,block。讀出資料和寫入資料。
本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1955143,如需轉載請自行聯系原作者