Operation System/Unix & Linux

리눅스 100만개(개당170바이트) 파일 삭제 (rm or find) 성능 비교

junsuyoun 2023. 8. 7. 14:47
728x90
반응형
  • 리눅스에서 생각 보다 작은 디렉토리를 지우려고 하는데 속도가 상당히 느린 경우가 있습니다.
  • 그러한 경우 rm -rf <디렉토리> 수행 시 상당한 시간이 발생하는데요.
  • 리눅스에서는 파일 관리를 위해 i-node 개념을 사용합니다.
  • 파일 개당 i-node를 가지고 있으며 파일이 삭제되는 경우 해당 i-node를 해제해주어야 합니다.
  • 이러한 이유로 속도 저하에 대해서 rm -rf와 find -delete 속도를 비교해보겠습니다.

environ

#!/bin/bash

# 파일 크기 (바이트 단위)
file_size=170

# 파일 개수
file_count=1000000

# 작업할 디렉토리 경로
find_remove_dir="./find_remove"
rm_remove_dir="./rm_remove"

# 디렉토리 생성
mkdir -p "$find_remove_dir"
mkdir -p "$rm_remove_dir"

# 파일 생성 함수
create_files() {
  local dir="$1"
  local count=$2

  for ((i=1; i<=count; i++)); do
    dd if=/dev/urandom of="$dir/file$i" bs=$file_size count=1 status=none
  done
}

# find_remove 디렉토리에 파일 생성
echo "Creating files in find_remove directory..."
create_files "$find_remove_dir" $file_count
echo "Files created in find_remove directory."

# rm_remove 디렉토리에 파일 생성
echo "Creating files in rm_remove directory..."
create_files "$rm_remove_dir" $file_count
echo "Files created in rm_remove directory."
  • 170바이트 크기 파일을 100만개 생성하는 스크립트입니다.
  • 테스트는 rm과 find 두 가지로 각각 삭제했을 때 속도를 체크를 목표로 합니다.
[root@tibero file_test]$ ls -rlthi
total 58M
14418568 -rw-r--r-- 1 root root 825 Aug  4 09:08 GenFile.sh
14418564 drwxr-xr-x 2 root root 29M Aug  4 09:34 find_remove
14418565 drwxr-xr-x 2 root root 29M Aug  4 10:00 rm_remove

[root@tibero file_test]$ du -skh *
4.0K	GenFile.sh
3.9G	find_remove
3.9G	rm_remove

time rm -rf $remove_path

[root@tibero file_test]$ time rm -rf rm_remove/

real	0m13.680s
user	0m1.009s
sys	0m11.970s

time find $remove_path -type d -delete

[root@tibero file_test]$ time find find_remove -type d -delete

real	0m13.214s
user	0m1.255s
sys	0m10.847s

  • 큰 성능 차이를 나타내지 않았습니다.
  • 다음 포스팅에서는 개수를 좀 더 늘려보고 테스트 해봐야겠네요.

728x90
반응형