文件節點表結構和連結文件
之前在安裝作業系統時,將一塊硬碟分成了四個分區,每個分區有自己的編號(sda1,sda2,sda3,sda4,sda5)和目錄結構
[root@centos7 data] ls -i76 file10.log 68 file2.log 70 file4.log 72 file6.log 74 file8.log67 file1.log 69 file3.log 71 file5.log 73 file7.log 75 file9.log
每個分區的節點編號也是有限制的,例如/boot分區的可用節點是1048236
使用df -i 加分區路徑 可以查看分區的最大inode數
[root@centos7 data] cd /boot[root@centos7 boot] df -i /bootFilesystem Inodes IUsed IFree IUse% Mounted on/dev/sda1 1048576 341 1048235 1% /boot
如果磁碟的節點編號耗盡,那麼即使磁碟空間沒有滿,也無法再使用。
[root@centos7 boot] cd testdir/[root@centos7 testdir] echo file{1..130761}|xargs touchtouch: cannot touch &39;: No space left on device
本質原因是文件節點編號耗盡
[root@centos7 testdir] rm -rf /boot/testdir[root@centos7 boot] ll -i /datatotal 0140 -rw-r--r--. 1 root root 0 Aug 9 12:40 file10.log131 -rw-r--r--. 1 root root 0 Aug 9 12:40 file1.log132 -rw-r--r--. 1 root root 0 Aug 9 12:40 file2.log133 -rw-r--r--. 1 root root 0 Aug 9 12:40 file3.log134 -rw-r--r--. 1 root root 0 Aug 9 12:40 file4.log135 -rw-r--r--. 1 root root 0 Aug 9 12:40 file5.log136 -rw-r--r--. 1 root root 0 Aug 9 12:40 file6.log137 -rw-r--r--. 1 root root 0 Aug 9 12:40 file7.log138 -rw-r--r--. 1 root root 0 Aug 9 12:40 file8.log139 -rw-r--r--. 1 root root 0 Aug 9 12:40 file9.log
當在同一個分區下創建一個硬連結後連結數會增加
file1.log和file1.log.link的連結數都是2,硬連結的本質是同一個文件有多個文件名
[root@centos8 data] ll !*ll file1.log file1.log.link-rw-r--r--. 2 root root 0 Aug 9 12:40 file1.log-rw-r--r--. 2 root root 0 Aug 9 12:40 file1.log.link
當刪除file1.log時,硬連結文件不會受影響,但是連結數會遞減
[root@centos8 data] ll|grep file1.log.link -rw-r--r--. 1 root root 0 Aug 9 12:40 file1.log.link
文件夾不能創建硬連結
如果mv命令的目標和源在相同的文件系統分區時,用新的文件名創建新的目錄項,刪除就目錄條目對應舊的文件名,不影響inode表(除了時間戳)或磁碟上的數據位置:沒有數據被移動。
[root@centos7 data] ls -i test.txt 67 test.txt[root@centos7 data] mv test.txt parent/child/[root@centos7 data] ls -i parent/child/test.txt 67 parent/child/test.txt[root@centos7 data] ls -i /boot/test.txt 113 /boot/test.txt
硬連結實現一個文件可以有多個文件名
文件連結類型分為硬連結和軟連結,硬連結在使用過程中有些限制,只能在同一個分區的不同目錄下針對文件創建硬連結。
以/etc目錄下的fstab文件在/data/d1/d2/d3目錄下創建一個硬連結,然後查看兩個文件的詳細信息,發現文件完全一致。
ln即link的縮寫,用於創建連結,默認是創建硬連結。
創建硬連結時,目錄必須存在
[root@centos7 data] mkdir -p d1/d2/d3[root@centos7 data] ll !*ll f1 d1/d2/d3/f1-rw-r--r--. 2 root root 595 Aug 30 17:57 d1/d2/d3/f1-rw-r--r--. 2 root root 595 Aug 30 17:57 f1
既然硬連結是一個文件有多個文件名,那麼現在修改f1的內容
然後再查看/data/f1和/data/d1/d2/d3/f1的文件大小,發現大小一致
[root@centos7 data] rm f1rm: remove regular file 『f1』? y[root@centos7 data] Created by anaconda on Tue Aug 25 14:08:19 2020 Accessible filesystems, by reference, are maintained under &39; this si modify conentUUID=15c0ca95-1555-428d-a209-4af18a8e7dce / xfs defaults 0 0UUID=4623526f-cc6c-4bb9-bd20-728b2808d737 /boot xfs defaults 0 0UUID=ee8afba5-4d9b-4133-8861-863aa03e0d2d /data xfs defaults 0 0UUID=4e13f43c-57ae-4fa2-9640-54f4b92fb920 swap swap defaults 0 0[root@centos7 data] mkdir -p file1/fiel2/file3[root@centos7 data] ln f1 file1/fiel2/file3/f1[root@centos7 data] ln f1 /opt/f1ln: failed to create hard link 『/opt/f1』 => 『f1』: Invalid cross-device link
文件夾不能創建硬連結,因為可能發生文件夾嵌套
[root@centos7 data] rm -rf *[root@centos7 data] lltotal 4-rw-r--r--. 1 root root 595 Aug 30 19:03 f1[root@centos7 data] ll -itotal 467 -rw-r--r--. 1 root root 595 Aug 30 19:03 f168 lrwxrwxrwx. 1 root root 2 Aug 30 19:04 f1.link -> f1
如果刪除/data目錄下的f1文件,那麼f1.link指向的文件會報錯
f1.link
[root@centos7 data] lltotal 0lrwxrwxrwx. 1 root root 2 Aug 30 19:04 f1.link -> f1
當訪問f1.link文件時,此時會提示找不到文件或者目錄
[root@centos7 data] cp /etc/fstab f1[root@centos7 data] rm -rf *[root@centos7 data] mkdir -p d1/d2[root@centos7 data] ll d1/d2/f1.link lrwxrwxrwx. 1 root root 2 Aug 30 18:48 d1/d2/f1.link -> f1
相對於當前工作目錄創建的軟連結是錯誤的
正確的姿勢應該是這樣的
[root@centos7 data] cp /etc/fstab f1[root@centos7 data] ln -s ../../f1 d1/d2/f1.link[root@centos7 data] rm -rf *[root@centos7 data] ln -s d1 d1.link[root@centos7 data] ln -s /data/f1 /opt/f1.link[root@centos7 data] cd /usr/local/[root@centos7 local] ln -s mysql8.0.12/ mysql[root@centos7 local] rm -rf mysql[root@centos7 local] ln -s mysql8.0.13 mysql[root@centos7 local] touch mysql8.0.12/f1.txt[root@centos7 local] lltotal 0drwxr-xr-x. 2 root root 6 Apr 11 2018 bindrwxr-xr-x. 2 root root 6 Apr 11 2018 etcdrwxr-xr-x. 2 root root 6 Apr 11 2018 gamesdrwxr-xr-x. 2 root root 6 Apr 11 2018 includedrwxr-xr-x. 2 root root 6 Apr 11 2018 libdrwxr-xr-x. 2 root root 6 Apr 11 2018 lib64drwxr-xr-x. 2 root root 6 Apr 11 2018 libexeclrwxrwxrwx. 1 root root 11 Aug 30 19:30 mysql -> mysql8.0.13drwxr-xr-x. 2 root root 33 Aug 30 19:33 mysql8.0.12drwxr-xr-x. 2 root root 20 Aug 30 19:33 mysql8.0.13drwxr-xr-x. 2 root root 6 Apr 11 2018 sbindrwxr-xr-x. 5 root root 49 Aug 25 14:08 sharedrwxr-xr-x. 2 root root 6 Apr 11 2018 src[root@centos7 local] ll mysql8.0.13/total 0
如果刪除軟連結,連結文件是目錄,並且目錄下包含文件,但是刪除軟連結時連結名後不加上/,則不會刪除軟連結指向目錄下的文件,而刪除的是軟連結本身
[root@centos7 local] ll mysql8.0.12/total 0-rw-r--r--. 1 root root 0 Aug 30 19:33 f1.txt[root@centos7 local] ll mysql8.0.12/total 0-rw-r--r--. 1 root root 0 Aug 30 19:33 f1.txt[root@centos7 local]# lltotal 0drwxr-xr-x. 2 root root 6 Apr 11 2018 bindrwxr-xr-x. 2 root root 6 Apr 11 2018 etcdrwxr-xr-x. 2 root root 6 Apr 11 2018 gamesdrwxr-xr-x. 2 root root 6 Apr 11 2018 includedrwxr-xr-x. 2 root root 6 Apr 11 2018 libdrwxr-xr-x. 2 root root 6 Apr 11 2018 lib64drwxr-xr-x. 2 root root 6 Apr 11 2018 libexecdrwxr-xr-x. 2 root root 20 Aug 30 19:41 mysql8.0.12drwxr-xr-x. 2 root root 6 Aug 30 19:34 mysql8.0.13drwxr-xr-x. 2 root root 6 Apr 11 2018 sbindrwxr-xr-x. 5 root root 49 Aug 25 14:08 sharedrwxr-xr-x. 2 root root 6 Apr 11 2018 src
Linux中每個文件夾都有.和..用於表示當前目錄和上級目錄,因此創建文件夾時默認的連結數是2。
由於連結接局限性太多,因此日常運維使用的還是軟連結