Linux 下大規(guī)模文件自動(dòng)清理方法(2)
在指定絕對(duì)路徑下刪除一個(gè)文件,rm 就可以實(shí)現(xiàn);如果只知道文件名,不知道路徑,我們可以通過 `find` 找到它,然后刪除。推而廣之,如果我們可以根據(jù)預(yù)設(shè)的條件找到指定文件,我們就可以實(shí)施刪除操作。這也就是文件自動(dòng)清理的基本思路,根據(jù)預(yù)設(shè)條件生成待刪 除文件列表,然后執(zhí)行定期清除任務(wù)實(shí)施刪除操作。
對(duì)于過期文件而言,他們共同標(biāo)志是時(shí)間戳,根據(jù)不同的文件系統(tǒng),可能是文件創(chuàng)建時(shí)間,訪問時(shí)間,過期時(shí)間等不同的時(shí)間屬性。由于過期文件大多 存在于歸檔系統(tǒng)上,這類文件的特點(diǎn)是數(shù)量巨大,對(duì)于大型系統(tǒng)而言,每天的過期文件數(shù)量都可能達(dá)到數(shù)十萬甚至百萬的數(shù)量級(jí)。對(duì)于如此規(guī)模的文件數(shù)量,掃描文 件系統(tǒng),生成文件列表就需要大量的時(shí)間,所以文件清理性能是此類人物不得不考慮的問題。
對(duì)于垃圾文件而言,有可能會(huì)是存放在特定目錄下的文件,也有可能是是以特殊后綴名結(jié)尾的文件,還有可能是因?yàn)橄到y(tǒng)錯(cuò)誤產(chǎn)生的 0 尺寸或者超大尺寸的文件,對(duì)于這些文件而言,文件數(shù)量一般不大,但是種類比較繁多,情況比較復(fù)雜,需要根據(jù)系統(tǒng)管理員的經(jīng)驗(yàn),制定比較細(xì)致的文件查詢條 件,定期掃描,生成文件列表,然后進(jìn)行進(jìn)一步處理。
相關(guān) Linux 命令簡(jiǎn)介
常用的文件系統(tǒng)管理命令包括 `ls`,`rm`,`find` 等等。鑒于這些命令都是常見的系統(tǒng)管理命令,在此不做贅述,詳細(xì)用法請(qǐng)參見命令幫助或者 Linux 使用手冊(cè)。由于大規(guī)模文件系統(tǒng)一般都存儲(chǔ)在專用的文件系統(tǒng)上,這些文件系統(tǒng)都提供了獨(dú)有的命令進(jìn)行文件系統(tǒng)管理。本文實(shí)踐章節(jié)以 IBM 的 GPFS 文件系統(tǒng)舉例,以下簡(jiǎn)要介紹 GPFS 的若干文件系統(tǒng)管理命令。
mmlsattr
此命令主要用于查看 GPFS 文件系統(tǒng)中文件的擴(kuò)展屬性,如存儲(chǔ)池信息,過期時(shí)間等屬性。
mmapplypolicy
GPFS 采用策略對(duì)文件進(jìn)行管理,此命令可以根據(jù)用戶定義的策略文件,對(duì) GPFS 文件系統(tǒng)執(zhí)行各種操作,具有非常高的效率。
大批量文件自動(dòng)清理的難點(diǎn)
Linux 文件刪除機(jī)制
Linux 是通過 link 的數(shù)量來控制文件刪除,只有當(dāng)一個(gè)文件不存在任何 link 的時(shí)候,這個(gè)文件才會(huì)被刪除。每個(gè)文件都有 2 個(gè) link 計(jì)數(shù)器—— i_count 和 i_nlink。i_count 的意義是當(dāng)前使用者的數(shù)量,i_nlink 的意義是介質(zhì)連接的數(shù)量;或者可以理解為 i_count 是內(nèi)存引用計(jì)數(shù)器,i_nlink 是硬盤引用計(jì)數(shù)器。再換句話說,當(dāng)文件被某個(gè)進(jìn)程引用時(shí),i_count 就會(huì)增加;當(dāng)創(chuàng)建文件的軟連接或者硬連接的時(shí)候,i_nlink 就會(huì)增加。
對(duì)于 rm 而言,就是減少 i_nlink。這里就出現(xiàn)一個(gè)問題,如果一個(gè)文件正在被某個(gè)進(jìn)程調(diào)用,而用戶卻執(zhí)行 rm 操作把文件刪除了,會(huì)出現(xiàn)什么結(jié)果呢?當(dāng)用戶執(zhí)行 rm 操作后,ls 或者其他文件管理命令不再能夠找到這個(gè)文件,但是進(jìn)程卻依然在繼續(xù)正常執(zhí)行,依然能夠從文件中正確的讀取內(nèi)容。這是因?yàn),`rm` 操作只是將 i_nlink 置為 0 了;由于文件被進(jìn)程飲用的緣故,i_count 不為 0,所以系統(tǒng)沒有真正刪除這個(gè)文件。i_nlink 是文件刪除的充分條件,而 i_count 才是文件刪除的必要條件。
對(duì)于單個(gè)文件刪除而言,我們可能完全不需要關(guān)心這個(gè)機(jī)制,但是對(duì)于大批量文件刪除,這卻是一個(gè)非常重要的因素,請(qǐng)?jiān)试S我在隨后章節(jié)中詳細(xì)闡述,此處請(qǐng)先記下 Linux 的文件刪除機(jī)制。
生成待刪除列表
當(dāng)一個(gè)文件夾下面有 10 個(gè)文件的時(shí)候,`ls` 可以一目了然,甚至可以用 `ls – alt` 查看所有文件的詳細(xì)屬性;當(dāng)文件變成 100 個(gè)的時(shí)候,`ls` 可能只能看一看文件名了;文件數(shù)量上漲到 1000,多翻幾頁可能還能接受;如果是 10,000 呢? `ls` 可能需要等上半天才能有結(jié)果;再擴(kuò)展成 100,000 的時(shí)候,絕大多數(shù)系統(tǒng)可能都沒有反應(yīng),或者“Argument list too long”了。不止是 `ls` 會(huì)遇到這樣的問題,其它的常用 Linux 系統(tǒng)管理命令都會(huì)遇到類似的問題,Shell 有參數(shù)來限制命令的長(zhǎng)度。就算我們可以通過修改 Shell 參數(shù)來擴(kuò)展命令長(zhǎng)度,但這并不能提高命令的執(zhí)行效率。對(duì)一個(gè)超大規(guī)模的文件系統(tǒng)而言,等待 `ls` 和 `find` 等常用文件管理命令的返回的時(shí)間是不可接受的.
那么我們?nèi)绾文軌蛟诟髷?shù)量級(jí)的文件系統(tǒng)上生成刪除文件列表呢?一個(gè)高性能的文件系統(tǒng)索引是一個(gè)好方法,不過高性能的文件索引是少數(shù)人的專利 (這也解釋了為什么 google 和 baidu 能這么賺錢)。好在如此規(guī)模的文件系統(tǒng)一般都只存在于高性能文件系統(tǒng)里面,這些文件系統(tǒng)都提供了非常強(qiáng)大的文件管理功能。譬如前面提到的 IBM 通用并行文件系統(tǒng)(GPFS)的 mmapplypolicy,通過直接掃描 inode 來快速掃描整個(gè)文件系統(tǒng),并能夠根據(jù)指定條件返回文件列表。下面演示如何根據(jù)時(shí)間戳和文件類型來獲取文件列表
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解