소개
이 문서에서는 시스템 디스크에서 파일을 지우는 방법에 대해 설명합니다.
최소 소프트웨어 및 하드웨어 플랫폼
관리자 및 버전: 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 및 해당 스크립트는 설치/업그레이드 시 설치됩니다. 업그레이드 스크립트의 일부가 아닙니다. diskcleaner.py 프로세스는 시스템 시작 시 프로세스 관리자에 의해 시작됩니다. 프로세스 관리자에서 관리하는 데몬 프로세스로 실행되고 시스템이 종료될 때까지 실행됩니다. 디스크 클리너에는 disk volume= usage percentage 가 구성된 임계값을 초과할 때 호출되는 디스크 스크립트가 있습니다. 예를 들어, 현재 볼륨 사용량 충만도가 85%에 도달할 때 호출되는 디스크 정리 스크립트와 디스크 사용량 충만도가 95%에 도달할 때 호출되는 다른 디스크 정리 스크립트가 있습니다. 디스크 충만도가 95%에 도달하면 95% 충만도 정리 스크립트가 실행되고, 디스크 충만도가 85%보다 높게 유지되면 85% 충만도 정리 스크립트가 실행됩니다.
FMC 디스크 클리너
Diskcleaner는 현재 FMC에서 실행되도록 구성되어 있습니다.
- 삭제된 파일(삭제되었지만 실행 중인 프로세스에 의해 아직 열려 있는 파일)을 모두 잘라냅니다(최대 0바이트). 이러한 파일은 lsof +L1 명령으로 표시할 수 있습니다.
- 디스크 관리자에서 모든 사일로를 강제로 제거합니다.
- 순환된 모든 로그 파일 삭제(messages.1.gz와 같이 파일 확장명이 xxxxxxxxx.n.gz인 파일)
- 디스크 관리자가 모든 사일로의 최대 배출을 강제로 수행합니다. 이렇게 하면 사일로가 일반적인 저수위 표시의 25%에 달하게 됩니다.
FTD Diskcleaner
Diskcleaner는 현재 FTD에서 실행되도록 구성되어 있습니다.
- 삭제된 파일(삭제되었지만 실행 중인 프로세스에 의해 아직 열려 있는 파일)을 모두 잘라냅니다(최대 0바이트). 이러한 파일은 lsof +L1 명령으로 표시할 수 있습니다.
- 디스크 관리자에서 모든 사일로를 강제로 제거합니다.
- 순환된 모든 로그 파일 삭제(messages.1.gz와 같이 파일 확장명이 xxxxxxxxx.n.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 수동 실행
diskcleaner 명령을 입력합니다. 기존 diskmanager 및 디스크 정리 방법은 이 새 작업에 충분하지 않습니다. diskmanager는 파일이 열리고 닫힐 때 실시간으로 디스크 충만도 수준을 제어할 수 있도록 설계되었습니다. diskmanager 구성 파일은 선택적이며 복잡하고 깨지기 쉽습니다. pruner 프로세스는 전체 시스템 디스크 충만도 레벨을 인식하지 않고 개별 기능 구성 요소의 파일 공간 사용량을 줄이도록 설계되었습니다. 새로운 diskcleaner 프레임워크는 디스크 정리 프로세스와 유사한 스크립팅 언어를 사용하여 diskmanager와 유사한 시스템 디스크 충만도 수준에 따라 파일을 제거할 수 있는 기능을 제공하기 위해 만들어졌습니다.
diskcleaner -run 명령을 사용하여 diskcleaner 스크립트를 수동으로 실행합니다. 명령은 다음과 같습니다.
system support diskcleaner-run
여기서 file name은 실행할 diskcleaner 스크립트의 이름입니다. 디렉토리와 파일 이름이 있는 전체 경로, 상대 경로(/etc/sf/dc에서) 또는 스크립트 이름(/etc/sf/dc에서 이름이 지정됨)이 될 수 있습니다. 표준 파일 glob이 허용됩니다. 파일 이름은 허용되는 문자 집합을 제한할 수 있는 보안 요구 사항에 따라 달라집니다(예: 백틱을 사용하지 않음). 디스크 클리너는 스크립트를 맹목적으로 실행하고 있다는 것을 기억하십시오. 따라서 여러 개의 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
>
삭제된 파일 잘라내기
열린 파일 핸들로 인해 존재하는 모든 숨겨진 삭제 파일을 0바이트로 자릅니다.
> 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.
>
Diskcleaner 중지 및 시작
pmtool 명령을 사용하여 diskcleaner를 중지하고 시작합니다.
> 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>]
여기서 debugging을 지정하면 스크립트는 디버그 정보를 출력하고 help는 출력 사용 정보 및 exit입니다.
디스크 청소 주기 사이의 간격(초)입니다. 지정하지 않으면 기본값은 600초입니다. diskcleaner.py는 시스템 시작 시 프로세스 관리자에 의해 시작됩니다. 프로세스 관리자에서 관리하는 데몬 프로세스로 실행되고 시스템이 종료될 때까지 실행됩니다. diskcleaner가 시작되면 매 간격 초 마다 실행되는 루프가 실행됩니다. 매 주기마다 diskcleaner는 df -a 명령에 지정된 모든 마운트 지점(/, /Volume, ...)을 스캔하고 df 명령으로 측정한 현재 디스크 사용량을 가져옵니다.
Diskcleaner는 레벨 0에서 시작하는 각 클리닝 레벨을 검사하고 레벨 번호가 해당 탑재 지점의 디스크 사용 비율보다 클 때까지 작업을 수행합니다. 마운트 지점의 사용량이 레벨 번호보다 크거나 같은 경우에만 레벨에 대한 클리닝을 수행해야 합니다. 따라서 사용량이 55%인 경우 각 디스크 클리닝 레벨을 0, 1, 2, ..., 55 순서로 실행합니다.
클리닝을 수행해야 하는 경우 실제 클리닝을 수행하기 위해 셸 스크립트 diskcleaner.sh(아래 참조)가 호출됩니다. 이 스크립트는 지정된 정상 레벨의 마운트 지점의 diskcleaner 디렉토리에 있는 모든 스크립트를 무턱대고 호출합니다.
- 예를 들어 / 마운트 포인트가 현재 96% 사용된다고 가정해 보겠습니다. diskcleaner가 주기를 시작하면 df 명령을 실행하여 /마운트 포인트가 96% 사용됨을 확인합니다. 레벨 0 클리닝의 사용 레벨은 0%로 설정되므로, diskcleaner는 / 마운트 지점에 대해 지정된 모든 레벨 0 스크립트를 실행합니다. 이때 diskcleaner는 df 명령을 다시 실행합니다. 레벨 0 청소는 아무 작업도 하지 않았으므로 사용량이 여전히 96%라고 가정합니다. 이제 diskcleaner는 모든 레벨 1 스크립트, 레벨 2 스크립트를 실행합니다.
- /마운트 포인트 사용량을 90%로 줄이는 50 레벨의 스크립트가 있다고 가정해 보겠습니다. 디스크 클리너는 레벨 51, 52, ...로 계속됩니다.
- 레벨 80에서 /마운트 포인트 사용량을 75%로 줄이는 스크립트가 있다고 가정해 보겠습니다. 이제 디스크 클리너는 다음 수준인 81보다 75%가 작기 때문에 /탑재 지점으로 끝납니다.
Diskcleaner.sh
diskcleaner.sh는 디스크 청소 이벤트를 시작하는 bash 스크립트입니다.
diskcleaner.sh <mount point> <level>
여기서, 탑재 지점은 청소할 탑재 지점이고, 수준은 수행할 청소 수준을 말한다. 청소가 완료된 비율입니다. 예를 들어 85를 입력하면 85%의 diskcleaner가 실행됩니다.
디렉터리에 있는 모든 디스크 청소 스크립트:
[/ngfw]/etc/sf/dc/<mount point>/dc<clean level>
파일 그룹 DC*와 일치하는 파일이 알파벳순으로 실행됩니다.
마운트 지점 이름에는 일반적으로 슬래시(/)가 있기 때문에 디렉토리 경로에 실제 마운트 지점 이름을 사용하는 것은 적절하지 않습니다. 따라서 any/를_로 변경합니다. 따라서 마운트 지점 /dev/shm 을 정상 수준 85( 디스크 사용량의 85%) 로 정리하려면 다음과 같은 스크립트를 사용해야 합니다. [/ngfw]/etc/sf/dc/_dev_shm/85/DC*
이 패러다임은 rcn.d 디렉토리에서 일치하는 모든 스크립트가 맹목적으로 실행되는 rc init script 패러다임을 기반으로 합니다. DC 접두사는 rc init 패러다임에서 상속됩니다. 이러한 스크립트는 모두 S(start) 또는 K(kill)로 시작합니다. 내 생각엔 네가 디렉터리에 그냥 남아 있는 쓰레기 파일들을 찾아내지 못하게 하는 것 같아. 따라서 DC의 접두사를 사용합니다.
표지 아래
diskcleaner는 linux df 명령을 사용하여 디스크 사용량을 확인합니다.

Diskcleaner 문제 해결
시스템 파일
- Diskcleaner의 문제 해결은 다음을 참조하여 수행할 수 있습니다.
/var/log/process_stdout.log and /var/log/process_stderr.log
- diskcleaner에 의해 로깅된 항목에는 diskcleaner가 프로세스 이름 및 diskcleaner PID로 포함됩니다.
- 이것은 PM 기반 프로세스의 로깅을 살펴보는 표준 방법입니다.
문제 해결 단계
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%.