詳解Linux下清理大批量文件的方法
系統管理員的手中,管理著企業最有價值的資產——數據;而占據企業級服務器操作系統市場半壁江山的 Linux,更是讓 Linux 系統管理員成為最重要的資產管理員。管理員的職責,就是讓有限的 IT 資源,存儲最有價值的數據。1991 年 IBM 推出 3.5 英寸 1GB 硬盤的時候,管理員洞悉硬盤上的每個文件,人工就可以實現文件管理;而今天 PB 級的存儲設備,則給文件管理帶來了前所未有的挑戰。
文件刪除操作,用過 Linux 的人都應該可以完成。那么以下這些文件刪除操作,你能完成哪些?
刪除整個文件系統中以特定后綴結尾的文件
在一個有 1 百萬的文件系統中刪除某個指定文件
從一個千萬級的文件系統里,刪除指定日期創建的 10 萬個文件
在億級文件系統里,每天執行文件系統清理,刪除 1 年前產生的上百萬文件
下面要討論就是如何實現以上文件刪除操作的策略和方法,如果以上操作對你來說輕而易舉,可以忽略本文。
對于清理文件系統而言,我們可以簡單的把清理任務分成兩大類,清理過期文件和清理垃圾文件。
過期文件
任何數據都有自己的生命周期,數據的生命周期曲線告訴我們,數據在產生和產生之后的一段時間內的價值最大,然后數據價值隨著時間衰減。當數據生命周期結束時,就應該刪除這些過期文件,將存儲空間釋放出來留給有價值的數據。
垃圾文件
系統運行過程中,會產生各種各樣的臨時文件,些應用程序運行時的臨時文件,系統錯誤產生的 Trace 文件,Core Dump 等等,在這些文件被處理后,就失去了保留價值,這些文件可以統稱為垃圾文件。及時清理垃圾文件,有助于系統維護和管理,保證系統穩定有效的運行。
文件自動清理的概述
文件自動清理的特點與方法
在指定絕對路徑下刪除一個文件,rm 就可以實現;如果只知道文件名,不知道路徑,我們可以通過 `find` 找到它,然后刪除。推而廣之,如果我們可以根據預設的條件找到指定文件,我們就可以實施刪除操作。這也就是文件自動清理的基本思路,根據預設條件生成待刪除文件列表,然后執行定期清除任務實施刪除操作。
對于過期文件而言,他們共同標志是時間戳,根據不同的文件系統,可能是文件創建時間,訪問時間,過期時間等不同的時間屬性。由于過期文件大多存在于歸檔系統上,這類文件的特點是數量巨大,對于大型系統而言,每天的過期文件數量都可能達到數十萬甚至百萬的數量級。對于如此規模的文件數量,掃描文件系統,生成文件列表就需要大量的時間,所以文件清理性能是此類人物不得不考慮的問題。
對于垃圾文件而言,有可能會是存放在特定目錄下的文件,也有可能是是以特殊后綴名結尾的文件,還有可能是因為系統錯誤產生的 0 尺寸或者超大尺寸的文件,對于這些文件而言,文件數量一般不大,但是種類比較繁多,情況比較復雜,需要根據系統管理員的經驗,制定比較細致的文件查詢條件,定期掃描,生成文件列表,然后進行進一步處理。
相關 Linux 命令簡介
常用的文件系統管理命令包括 `ls`,`rm`,`find` 等等。鑒于這些命令都是常見的系統管理命令,在此不做贅述,詳細用法請參見命令幫助或者 Linux 使用手冊。由于大規模文件系統一般都存儲在專用的文件系統上,這些文件系統都提供了獨有的命令進行文件系統管理。本文實踐章節以 IBM 的 GPFS 文件系統舉例,以下簡要介紹 GPFS 的若干文件系統管理命令。
mmlsattr
此命令主要用于查看 GPFS 文件系統中文件的擴展屬性,如存儲池信息,過期時間等屬性。
mmapplypolicy
GPFS 采用策略對文件進行管理,此命令可以根據用戶定義的策略文件,對 GPFS 文件系統執行各種操作,具有非常高的效率。
大批量文件自動清理的難點
Linux 文件刪除機制
Linux 是通過 link 的數量來控制文件刪除,只有當一個文件不存在任何 link 的時候,這個文件才會被刪除。每個文件都有 2 個 link 計數器—— i_count 和 i_nlink。i_count 的意義是當前使用者的數量,i_nlink 的意義是介質連接的數量;或者可以理解為 i_count 是內存引用計數器,i_nlink 是硬盤引用計數器。再換句話說,當文件被某個進程引用時,i_count 就會增加;當創建文件的軟連接或者硬連接的時候,i_nlink 就會增加。
對于 rm 而言,就是減少 i_nlink。這里就出現一個問題,如果一個文件正在被某個進程調用,而用戶卻執行 rm 操作把文件刪除了,會出現什么結果呢?當用戶執行 rm 操作后,ls 或者其他文件管理命令不再能夠找到這個文件,但是進程卻依然在繼續正常執行,依然能夠從文件中正確的讀取內容。<
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解