1. 程式人生 > 實用技巧 >17.磁碟容量配額和軟硬方式連結

17.磁碟容量配額和軟硬方式連結

1.quota:進行磁碟容量配額管理,從而限制使用者的硬碟可用容量或所能建立的最大檔案個數。

軟限制和硬限制的功能。

軟限制:當達到軟限制時會提示使用者,但仍允許使用者在限定的額度內繼續使用。
硬限制:當達到硬限制時會提示使用者,且強制終止使用者的操作。

Centos7 系統中已經安裝了quota 磁碟容量配額服務程式包,但儲存裝置卻預設沒有開啟對quota 的支援,此時需要手動編輯配置檔案,讓Centos 7 系統中的/boot 目錄能夠支援quota磁碟配額技術。

在重啟系統後使用mount命令檢視,即可發現/boot 目錄已經支援quota 磁碟配額技術了:

[root@Centos ~]# vim /etc/fstab 
# 
/etc/fstab # Created by anaconda on Wed Jul 29 13:24:21 2020 # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info/dev/mapper/centos_centos-root / xfs defaults 0 0 UUID=5290d0be-c146-4107-b0da-1dff813fe4f1 /boot xfs defaults,uquota
0 0 /dev/mapper/centos_centos-swap swap swap defaults 0 0 /dev/sdb1 /newFS xfs defaults 0 0 /dev/sdb2 swap swap defaults 0 0

[root@Centos ~]# reboot
[root@Centos ~]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)

2.xfs_quota :專門針對XFS 檔案系統來管理quota 磁碟容量配額服務而設計的命令,格式為“quota [引數] 配額檔案系統”。

其中,-c 引數用於以引數的形式設定要執行的命令;-x引數是專家模式,讓運維人員能夠對quota 服務進行更多複雜的配置。

舉例:建立一個用於檢查quota 磁碟容量配額效果的使用者tom,並針對/boot 目錄增加其他人的寫許可權,保證使用者能夠正常寫入資料:

使用xfs_quota命令來設定使用者tom 對/boot 目錄的quota 磁碟容量配額。具體的限額控制包括:硬碟使用量的軟限制和硬限制分別為3MB 和6MB;建立檔案數量的軟限制和硬限制分別為3 個和6 個。

[root@Centos ~]# useradd tom
[root@Centos ~]# chmod -Rf o+w /boot

[root@Centos ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
[root@Centos ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root           149140          0          0     00 [--------]
tom                 0       3072       6144     00 [--------]

[root@Centos ~]# su - tom
[tom@Centos ~]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB) copied, 0.0404283 s, 130 MB/s
[tom@Centos ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
6291456 bytes (6.3 MB) copied, 0.0270056 s, 233 MB/s

3.edquota :編輯使用者的quota 配額限制,格式為“edquota [引數] [使用者] ”。

-u引數表示要針對哪個使用者進行設定;

-g 引數表示要針對哪個使用者組進行設定。

edquota 命令會呼叫Vi 或Vim 編輯器來讓root 管理員修改要限制的具體細節。

舉例把使用者tom 的硬碟使用量的硬限額從6MB 提升到8MB:

[root@Centos ~]# edquota -u tom

Disk quotas for user tom (uid 1114):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda1                      8192       3072       8192          1        3        6
[root@Centos ~]# su - tom
Last login: Tue Aug 18 17:57:35 CST 2020 on pts/0
[tom@Centos ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0126815 s, 661 MB/s
[tom@Centos ~]$ dd if=/dev/zero of=/boot/tom bs=10M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
8388608 bytes (8.4 MB) copied, 0.0234795 s, 357 MB/s

4.在 Linux 系統中存在硬連結和軟連線兩種檔案。

1)硬連結(hard link):可以將它理解為一個“指向原始檔案inode 的指標”,系統不為它分配獨立的inode 和檔案。所以,硬連結檔案與原始檔案其實是同一個檔案,只是名字不同。我們每新增一個硬連結,該檔案的inode 連線數就會增加1;而且只有當該檔案的inode 連線數為0 時,才算徹底將它刪除。換言之,由於硬連結實際上是指向原檔案inode 的指標,因此即便原始檔案被刪除,依然可以通過硬連結檔案來訪問。需要注意的是,由於技術的侷限性,我們不能跨分割槽對目錄檔案進行連結。
2)軟連結(也稱為符號連結[symbolic link]):僅僅包含所連結檔案的路徑名,因此能連結目錄檔案,也可以跨越檔案系統進行連結。但是,當原始檔案被刪除後,連結檔案也將失效,從這一點上來說與Windows 系統中的“快捷方式”具有一樣的性質。

ln :建立連結檔案,格式為“ln [選項] 目標”

為了更好地理解軟連結、硬連結的不同性質,接下來建立一個類似於Windows 系統中快捷方式的軟連結。這樣,當原始檔案被刪除後,就無法讀取新建的連結檔案了。

[root@Centos ~]# echo "Hello, world" > hello.txt
[root@Centos ~]# ln -s hello.txt hi.txt
[root@Centos ~]# cat hi.txt 
Hello, world
[root@Centos ~]# ll hello.txt 
-rw-r--r--. 1 root root 13 Aug 18 18:31 hello.txt
[root@Centos ~]# rm -f hello.txt 
[root@Centos ~]# cat hi.txt 
cat: hi.txt: No such file or directory

接下來針對一個原始檔案建立一個硬連結,即相當於針對原始檔案的硬碟儲存位置建立了一個指標,這樣一來,新建立的這個硬連結就不再依賴於原始檔案的名稱等資訊,也不會因為原始檔案的刪除而導致無法讀取。同時可以看到建立硬連結後,原始檔案的硬碟連結數量增加到了2。

[root@Centos ~]# echo "hello ,what's your name" > meet.txt
[root@Centos ~]# ln meet.txt nice.txt
[root@Centos ~]# cat nice.txt 
hello ,what's your name
[root@Centos ~]# cat meet.txt 
hello ,what's your name
[root@Centos ~]# ll nice.txt 
-rw-r--r--. 2 root root 24 Aug 18 18:35 nice.txt
[root@Centos ~]# rm -rf meet.txt 
[root@Centos ~]# cat nice.txt 
hello ,what's your name