简介
本文档介绍如何从系统磁盘清理文件。
最低软件和硬件平台
管理器和版本:在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上运行的diskcleaner:
— 截断(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!!!
查看可用的磁盘清理程序脚本
使用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配置文件具有选择性、复杂性和易碎性。修剪器进程旨在减少单个功能组件的文件空间使用量,而不了解整体系统磁盘充满度级别。创建了新的磁盘清理器框架,以提供根据系统磁盘充满度级别删除文件的能力,类似于磁盘管理器,并且使用类似于磁盘修剪器进程的脚本语言的简单性。
使用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(如下所示)来执行实际清理。该脚本只会盲目地调用在装载点的磁盘清理器目录中找到的每个脚本来达到指定的清理级别。
- 例如,/mount点目前的使用率为96%。当磁盘清理器开始其循环时,它会运行df命令并发现/装载点使用率为96%。级别0清理的使用级别设置为0%,因此磁盘清理程序运行为/mount点指定的所有级别0脚本。此时,磁盘清理程序将重新运行df命令。假设0级清洁未执行任何操作,因此使用率仍为96%。磁盘清理程序现在运行所有1级脚本,然后运行2级脚本,依此类推。
- 假设在第50级有脚本可以将/mount点使用率降低到90%。磁盘清理器继续执行51、52、...
- 假设在第80级有脚本将使用/安装点的比率降至75%。现在,磁盘清理程序已完成了/装入点,因为75%小于下一个级别81。
Diskcleaner.sh
diskcleaner.sh是启动磁盘清理事件的bash脚本。
diskcleaner.sh <mount point> <level>
其中,挂载点是要清洗的挂载点,标高是指要执行的清洗标高。这是完成清洁的百分比。例如,如果输入85,则会以85%的速率运行磁盘清理程序。
目录中存在的所有磁盘清理脚本:
[/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作为进程名称和磁盘清理程序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%.