최대 50TB의 파일 시스템에서 가장 오래된 파일/디렉터리 찾기

최대 50TB의 파일 시스템에서 가장 오래된 파일/디렉터리 찾기

90TB~50TB 범위의 파일 시스템에서 가장 오래된 파일과 관련 디렉터리를 찾아 다른 파일 시스템으로 이동해야 합니다. 디렉터리 구조는 파일의 내용을 식별하므로 디렉터리 구조를 보존해야 합니다. 그래서 -

1급/2급/3급/(문서)

구조입니다. 전체 구조를 이동해야 합니다. 최상위 디렉토리에는 아무 것도 없지만, 내가 찾고 있는 모든 파일의 이름이 동일하기 때문에 해당 파일이 없으면 파일이 무엇에 속하는지 식별할 수 없습니다. 프로세스가 완료되면 원래 파일 시스템에 약 40TB가 남아 있어야 하며 새 파일 시스템에는 거의 아무것도 남지 않아야 합니다. 이제 원래 파일 시스템에서 가장 오래된 파일이 거기에 있기 때문입니다.

감사해요!

답변1

GNU 도구 및 도구를 사용하면 rsync다음을 수행할 수 있습니다.

export LC_ALL=C # force tools to regard those file paths as arrays
                # of bytes (as they are in effect) and not do fancy
                # sorting (and use English for error/warning messages 
                # as an undesired side effect).

find . -type f -printf '%T@/%s/%p\0' | # print mtime/size/path
  sort -zn | # numerical sort, oldest first
  awk -v RS='\0' -v ORS='\0' -F / -v max=50e12 '
    {total_size += $2}
    total_size > max {exit}
    {
      sub("^[^/]*/[^/]*/", "") # remove mtime/size/
      print # path
    }' |
  rsync -nv -aHAX0 --files-from=- --remove-source-files . /dest/dir/

(테스트되지 않았습니다. -n시험 실행에 사용됩니다. 만족하면 삭제합니다.)

%s파일 크기( , %b섹터의 디스크 사용량으로 대체(및 로 변경됨 )) 를 기준으로 누적 파일 크기를 계산 total_size += $2 * 512하고 하드 링크를 무시합니다. 이러한 파일이 대상 파일 시스템에 복사되면 이러한 파일과 디렉터리에는 다음이 포함됩니다. 파일 시스템 압축이나 중복 제거가 없는 한 파일은 결국 50TB 이상을 사용할 수 있습니다.

답변2

"ls" 명령은 타임스탬프를 사용하여 약간 창의적이므로 이를 구문 분석하는 것이 어려울 수 있습니다. 이를 구현하는 언어로 구현하는 것이 훨씬 쉬울 수 있습니다.통계자료(). 일부 Unix 버전에는명령줄 통계- 근처 RH 박스에서:

 find ${BASEDIR} -type f -exec stat --format="%y %b %n" {} \; | sort | less

하지만 이것은 많은 파일을 가지고 있는 개처럼 실행될 것입니다.

GNU awk에 대한 문서에는 다음이 포함됩니다.확장 예시파일 시스템 기능이 제공되지만 이를 구축하고 유지하려면 몇 가지 작업을 수행해야 합니다.

PHP, C, Perl(또는 Go, Ruby 또는 기타 여러 언어)을 사용하여 처음부터 프로그램을 작성하는 것은 쉽지만 이 기사의 범위를 벗어납니다.

관련 정보