簡介
本文檔介紹如何從系統磁碟清理檔案。
最低軟體和硬體平台
管理器和版本:在FMC或FTD CLI上執行的FMC/FDM 7.6.0 CLI
應用程式(ASA/FTD)和應用程式的最低版本:FTD 7.6.0
支援的平台:所有FMC和FTD裝置都有此功能。
遷移自:https://confluence-eng-rtp2.cisco.com/conf/display/IFT/Diskcleaner
功能說明和演練
概觀
在安裝/升級時安裝磁碟清理程式及其指令碼。它不是升級指令碼的一部分。進程diskcleaner.py由進程管理器在系統啟動時啟動。它作為進程管理器管理的守護進程運行,直到系統關閉。磁碟清理程式具有磁碟指令碼,當磁碟卷=使用百分比超過配置的閾值時呼叫這些指令碼。例如,當前存在磁碟清理指令碼,這些指令碼在卷使用量完成率達到85%時呼叫,而其他指令碼則在磁碟使用量完成率達到95%時呼叫。如果磁碟充滿度達到95%,則運行95%充滿度清理指令碼;如果磁碟充滿度保持大於85%,則運行85%充滿度清理指令碼。
FMC磁碟清理器
這是目前配置為FMC上運行的磁碟清理程式:
— 截斷(至0位元組)所有已刪除的檔案(已刪除但仍由正在運行的進程開啟的檔案)。 這些檔案可以使用lsof +L1 命令顯示。
— 強制磁碟管理器清空所有孤島。
— 刪除所有旋轉日誌檔案(副檔名為xxxxxxxxx.n.gz的檔案,如messages.1.gz)
— 強制磁碟管理器對所有孤島執行最大排出。這會將孤島抽幹到其正常低水位的25%。
FTD磁碟清理器
這是目前設定為在FTD上執行的磁碟清理器:
— 截斷(至0位元組)所有已刪除的檔案(已刪除但仍由正在運行的進程開啟的檔案)。 這些檔案可以使用lsof +L1命令顯示。
— 強制磁碟管理器清空所有孤島。
— 刪除所有旋轉日誌檔案(副檔名為xxxxxxxxx.n.gz的檔案,如messages.1.gz)
— 強制磁碟管理器對所有孤島執行最大排出。這會將孤島抽幹到其正常低水位的25%。
NOTE: At the current time, FXOS files and logs are outside of the scope of the diskcleaner!!!
檢視可用的Diskcleaner指令碼
使用system support diskcleaner-show命令檢視可以運行的磁碟清理程式指令碼。此處顯示的指令碼可以使用diskcleaner-run命令手動運行,以手動釋放磁碟空間。這些幻燈片中介紹了每個磁碟清理指令碼及其呼叫示例。
> system support diskcleaner-show
sfims-file-mgmnt-infra-delete-rotated-logs.sh
sfims-file-mgmnt-infra-diskmanager-partition-drain-max.sh
sfims-file-mgmnt-infra-diskmanager-silo-drain-all.sh
sfims-file-mgmnt-infra-truncate-deleted-files.py
手動運行磁碟清理程式
輸入diskcleaner命令。現有的diskmanager和磁碟修剪器方法對於此新任務來說不足。Diskmanager設計用於在開啟和關閉檔案時即時控制磁碟充滿度。Diskmanager配置檔案具有選擇性、複雜性和易碎性。修剪器進程旨在減少單個功能元件的檔案空間使用量,而無需瞭解整個系統磁碟充滿度級別。建立新的diskcleaner框架是為了提供根據系統磁碟充滿度級別刪除檔案的能力,與diskmanager類似,使用與磁碟修剪器進程類似的指令碼語言的簡單性。
使用diskcleaner-run命令手動運行diskcleaner指令碼。命令如下:
system support diskcleaner-run
其中檔名是要運行的diskcleaner指令碼的名稱。它可以是包含目錄和檔名的完整路徑、相對路徑(來自/etc/sf/dc)或指令碼的名稱(在/etc/sf/dc中命名)。 接受標準檔案全域性。檔名需要遵守安全要求,這些安全要求可以限制允許的字符集(例如不使用後台)。 請記住,磁碟清理器只是盲目地運行指令碼。因此,您可以建立一個運行多個diskcleaner指令碼的新指令碼,然後僅運行該新指令碼(以便執行其中包含的所有diskcleaner指令碼)。
刪除已旋轉的日誌
刪除指定裝載點上的所有旋轉日誌檔案。
> system support diskcleaner-run sfims-file-mgmnt-infra-delete-rotated-logs.sh --help
刪除指定裝載點上的所有旋轉日誌檔案。
sfims-file-mgmnt-infra-delete-rotated-logs.sh [--debug] [--help] <mount point>
> system support diskcleaner-run sfims-file-mgmnt-infra-delete-rotated- logs.sh --debug /ngfw/Volume
Deleting all rotated log files on mount point '/ngfw/Volume'.
Deletion of all rotated log files on mount point '/ngfw/Volume' has
completed - 0 bytes.
磁碟管理器分割槽排出
使磁碟管理器在所有分割槽上執行最大耗盡
> system support diskcleaner-run sfims-file-mgmnt-infra-diskmanager-partition-drain-max.sh --help
使磁碟管理器對其所有分割槽執行最大排出。
sfims-file-mgmnt-infra-diskmanager-partition-drain-max.sh [--debug] [--help]
> system support diskcleaner-run sfims-file-mgmnt-infra-diskmanager-partition-drain-max.sh
Performing a maximum drain on all disk manager partitions - current disk usage:
Partition:Silo Used Minimum Maximum
/ngfw/var:Temporary Files 0 KB 121.704 MB 486.817 MB
...
Performing a maximum drain on disk manager partition '/ngfw/var'.
Partition /ngfw/var has been drained.
Maximum drain on all disk manager partitions has completed - current disk usage:
Partition:Silo Used Minimum Maximum
/ngfw/var:Temporary Files 0 KB 121.704 MB 486.817 MB
...
>
磁碟管理器思洛儲存器引出
使磁碟管理器對所有孤島執行最大消耗
> system support diskcleaner-run sfims-file-mgmnt-infra-diskmanager-silo-drain-all.sh --help
使磁碟管理器對其所有孤島執行最大耗盡操作。
sfims-file-mgmnt-infra-diskmanager-silo-drain-all.sh [--debug] [--help]
> system support diskcleaner-run sfims-file-mgmnt-infra-diskmanager-silo-drain-all.sh
Draining all disk manager silos to their low-water mark - current disk usage:
Partition:Silo Used Minimum Maximum
/ngfw/var:Temporary Files 0 KB 121.704 MB 486.817 MB
...
Draining all disk manager silos..
All silos have been drained.
Draining all disk manager silos to their low-water mark has completed - current disk usage:
Partition:Silo Used Minimum Maximum
/ngfw/var:Temporary Files 0 KB 121.704 MB 486.817 MB
>
截斷已刪除的檔案
將所有由於開啟檔案控制代碼而出現的隱藏已刪除檔案截斷為零位元組。
> system support diskcleaner-run sfims-file-mgmnt-infra-truncate-deleted-files.py -h
usage: sfims-file-mgmnt-infra-truncate-deleted-files.py [-h] [--debug]
[ignored]
Truncate all deleted (zombie) files to zero-length.
positional arguments:
ignored
optional arguments:
-h, --help show this help message and exit
--debug If specified, the script will output lots of debug information.
> system support diskcleaner-run sfims-file-mgmnt-infra-truncate-deleted-files.py
Truncating all deleted (zombie) files.
Deleted file '/run/nscd/dbGG9F8K' is on the deleted files exclude list - NOT truncating.
All deleted (zombie) files have been truncated - total size = 0 bytes.
>
停止和啟動磁碟清理器
使用pmtool命令停止並啟動盤清潔器。
> pmtool disablebyid diskcleaner
>
> pmtool status
...
diskcleaner (normal) - User Disabled
...
> pmtool enablebyid diskcleaner
>
> pmtool status
...
diskcleaner (normal) – Running 17086
...
軟體技術
Diskcleaner.py
此指令碼是磁碟清理器的主程式。此python指令碼運行方式如下:
diskcleaner.py [--debug] [--help] [--interval <interval>]
如果指定了調試,指令碼將輸出調試資訊,幫助是輸出使用情況資訊並退出。
磁碟清理週期之間的間隔(秒)。如果未指定,預設值為600秒。diskcleaner.py由進程管理器在系統啟動時啟動。它作為進程管理器管理的守護進程運行,直到系統關閉。啟動磁碟清理器時,它運行每間隔秒運行一次的循環。在每個週期中,磁碟清理程式會掃描由df -a 命令指定的所有裝入點(/、/Volume、...)並獲取其當前磁碟使用情況(通過df 命令測量)。
盤清潔器從級別0開始遍歷每個清潔級別並逐級向上工作直到級別編號大於該裝入點的磁碟使用百分比。如果裝入點的使用率等於或大於級別編號,則只需為級別執行清洗。因此,如果用量為55%,請按照順序 — 0、1、2、...、55執行每個磁碟清理級別。
當需要執行清理時,會呼叫shell指令碼diskcleaner.sh(如下所示)來執行實際清理。該指令碼只會盲目地呼叫在裝載點的diskcleaner目錄中找到的每個指令碼,使其達到指定的清潔級別。
- 例如, /mount點目前的使用率為96%。磁碟清理程式啟動其週期時,會運行df命令,並發現/裝載點使用率為96%。級別0清理的使用級別設定為0%,因此磁碟清理程式將運行為/mount點指定的所有級別0指令碼。此時,磁碟清理程式將重新運行df命令。假設0級清潔沒有執行任何操作,因此使用率仍為96%。磁碟清理程式現在運行所有1級指令碼,然後運行2級指令碼,依此類推。
- 假設在50級有指令碼可以將/裝入點使用率降低到90%。磁碟清理器繼續執行51、52、...
- 假設在第80級有指令碼將使用/安裝點的比率降低到75%。現在,磁碟清理程式已完成了/裝入點,因為75%小於下一個級別81。
Diskcleaner.sh
diskcleaner.sh是啟動磁碟清理事件的bash指令碼。
diskcleaner.sh <mount point> <level>
其中,裝入點是要清洗的裝入點,級別是指要執行的清洗級別。這是清潔完成時的百分比。例如,如果輸入85,則會以85%的速率運行diskcleaner。
目錄中存在的所有磁碟清理指令碼:
[/ngfw]/etc/sf/dc/<mount point>/dc<clean level>
執行與檔案glob DC*匹配的檔案(按字母順序)。
請注意,由於掛載點名稱中通常有斜槓(/),因此在目錄路徑中使用實際掛載點名稱會很尷尬(或非法)。 因此,請將any /更改為_。因此,要在清潔級別85(對於85%的磁碟使用率)清潔裝載點/dev/shm ,指令碼必須匹配:[/ngfw]/etc/sf/dc/_dev_shm/85/DC*
這個正規化基於rc init腳本正規化,由此盲目執行rcn.d目錄中的所有匹配指令碼。DC字首也是rc init正規化的一個遺留問題 — 這些指令碼均以S(開始)或K(中止)開頭。我想這能讓你不會去撿目錄上留下的爛檔案。因此,使用DC字首。
被掩護
diskcleaner使用linux df命令檢查磁碟使用情況:

磁碟清理器故障排除
系統檔案
/var/log/process_stdout.log and /var/log/process_stderr.log
- Diskcleaner記錄的條目包含diskcleaner作為進程名稱和磁碟清理器PID。
故障排除步驟
diskcleaner執行的操作將記錄到process_stdout.log。通常,沒有輸出是因為不需要進行磁碟清理。但是,如果需要清理磁碟,則所有刪除的檔案都會記錄在process_stdout.log中。下一頁中是process_stdout.log可包含內容的示例。diskcleaner上的Grep。 ̌process_stdout.log中的輸出示例:
Feb 9 04:10:23 uhura diskcleaner[2639]: Starting level 85 disk cleaning for mount point '/ngfw/Volume': current usage = 97%.
Feb 9 04:10:23 uhura diskcleaner[2639]: Starting disk cleaning scripts in directory '/etc/sf/dc/_ngfw_Volume/dc85' for mount point '/ngfw/Volume'.
Feb 9 04:10:23 uhura diskcleaner[2639]: Filesystem 1K-blocks Used Available Use% Mounted on
Feb 9 04:10:23 uhura diskcleaner[2639]: /dev/sda5 40511148 39040764 1470384 97% /ngfw/Volume
Feb 9 04:10:23 uhura diskcleaner[2639]: Executing '/etc/sf/dc/_ngfw_Volume/dc85/DC660-truncate-deleted- files.py' ...
Feb 9 04:10:23 uhura diskcleaner[2639]: Truncating all deleted (zombie) files.
Feb 9 04:10:23 uhura diskcleaner[2639]: Deleted file '/run/nscd/dbZ5hobS' is on the deleted files exclude list - NOT truncating.
Feb 9 04:10:23 uhura diskcleaner[2639]: All deleted (zombie) files have been truncated - total size = 0 bytes.
Feb 9 04:10:23 uhura diskcleaner[2639]: Filesystem 1K-blocks Used Available Use% Mounted on
Feb 9 04:10:23 uhura diskcleaner[2639]: /dev/sda5 40511148 39040764 1470384 97% /ngfw/Volume
Feb 9 04:10:23 uhura diskcleaner[2639]: '/etc/sf/dc/_ngfw_Volume/dc85/DC660-truncate-deleted-files.py' completed in 0.43 seconds - status = 0.
Feb 9 04:10:23 uhura diskcleaner[2639]: Executing '/etc/sf/dc/_ngfw_Volume/dc85/DC663-delete-rotated- logs.sh' ...
Feb 9 04:10:23 uhura diskcleaner[2639]: Deleting all rotated log files on mount point '/ngfw/Volume'.
Feb 9 04:10:24 uhura diskcleaner[2639]: Deleted file '/ngfw/Volume/root1/ngfw/var/log/top.log.1.gz' - 2771386 bytes.
Feb 9 04:10:24 uhura diskcleaner[2639]: Deleted file '/ngfw/Volume/root1/ngfw/var/log/test/fake-rotated- log.log.1.gz' - 1073741824 bytes.
Feb 9 04:10:24 uhura diskcleaner[2639]: Deleted file '/ngfw/Volume/root1/ngfw/var/log/test/fake-rotated- log.log.2.gz' - 1073741824 bytes.
Feb 9 04:10:24 uhura diskcleaner[2639]: Deleted file '/ngfw/Volume/root1/ngfw/var/log/test/fake-rotated- log.log.3.gz' - 1073741824 bytes.
Feb 9 04:10:24 uhura diskcleaner[2639]: Deletion of all rotated log files on mount point '/ngfw/Volume' has completed - 25772575162 bytes.
Feb 9 04:10:24 uhura diskcleaner[2639]: Filesystem 1K-blocks Used Available Use% Mounted on
Feb 9 04:10:24 uhura diskcleaner[2639]: /dev/sda5 40511148 13872228 26638920 35% /ngfw/Volume
Feb 9 04:10:24 uhura diskcleaner[2639]: '/etc/sf/dc/_ngfw_Volume/dc85/DC663-delete-rotated-logs.sh' completed in 0.21 seconds - status = 0.
Feb 9 04:10:24 uhura diskcleaner[2639]: Completed disk cleaning scripts in directory '/etc/sf/dc/_ngfw_Volume/dc85' for mount point '/ngfw/Volume' in 0.69 seconds.
Feb 9 04:10:24 uhura diskcleaner[2639]: Finished level 85 disk cleaning for mount point '/ngfw/Volume': current usage = 35%.