최근에 서비스 중인 시스템의 성능을 개선하기 위한 일을 했고, 개선된 시스템의 성능을 점검하기 위해 다양한 크기의 테스트용 더미 파일을 만들어 부하 테스트를 진행했었습니다. 하드디스크를 뒤져서 적당한 파일을 찾아 테스트를 진행할 수도 있었지만 뭔가 1Mb, 10Mb, 100Mb와 같이 규격화된 파일로 테스트하면 결과를 분석하기 더 용이하지 않을까 하는 생각에 일정한 크기의 파일을 만들 방법을 찾아봤습니다.
실제로 했던 방법(ubuntu - dd)
성능 테스트용 agent 앱이 ubuntu 였기 때문에 dd 명령을 이용해서 테스트용 파일을 만들었습니다. dd를 이용하여 파일을 만들면 bs * count 크기의 파일이 만들어집니다. (How To Quickly Generate A Large File On The Command Line (With Linux))
# dd if=/dev/zero of=file_name bs=file_size count=1
$ dd if=/dev/zero of=dummy_1m bs=1M count=1
$ dd if=/dev/zero of=dummy_10m bs=1M count=10
$ dd if=/dev/zero of=dummy_100m bs=1M count=100
count를 1로 고정하고 bs 크기를 변경하여도 생성되는 파일의 크기는 동일합니다.
$ dd if=/dev/zero of=dummy_1m bs=1M count=1
$ dd if=/dev/zero of=dummy_10m bs=10M count=1
$ dd if=/dev/zero of=dummy_100m bs=100M count=1
나중에 찾아본 방법(ubuntu - fallocate)
dd로 생성하는 방법 말고도 fallocate를 이용하는 방법도 있었습니다. fallocate는 실제 파일을 생성하지 않고, 디스크에 공간만 할당하기 때문에 생성 속도가 더 빠르다고 합니다. 사용 법도 더 간단합니다.
$ fallocate -l 1M dummy_1m.file
$ fallocate -l 10M dummy_10m.file
$ fallocate -l 100M dummy_100m.file
그러면 속도가 얼마나 차이가 날까 궁금해서 생성시간을 비교해봤습니다.
dd로 만들때 약 0.6초, fallocate로 만들 때, 약 0.03초가 걸려서 대략 20배 정도 차이가 나지만, 그 차이는 1초도 안되기 때문에 사용하기 편한 방법을 선택하면 될 것 같습니다.
윈도우10에서 만드는 방법.
윈도우에서도 git bash를 이용하면 dd를 사용할 수 있습니다. 하지만, git bash가 항상 있는 건 아니니 cmd를 이용하는 방법을 찾아봤습니다. fsutil을 이용하는 방법인데요. ( 출처 : Quickly generate large test files in Windows )
사용법은 간단 합니다.
// fsutil file createnew "파일명" "바이트크기"
> fsutil file createnew 1m.file 1048576
> fsutil file createnew 10m.file 10485760
> fsutil file createnew 100m.file 104857600
사용 법은 간단하지만 바이트 크기를 알고 있어야 하는 게, 좀 불편합니다. ( 1Mb = 1048576, 10Mb = 10485760, 100Mb = 104857600 ) 그래서 저는 테스트 파일 작성을 해야할 일이 있으면 git bash를 켜겠습니다.
MacOS에서 만드는 방법
마지막으로 MacOS에서도 dd 명령으로 동일하게 파일을 만들 수 있습니다. fallocate명령은 없습니다 그리고 MacOS에서는 mkfile 이라는 명령을 사용할 수도 있습니다. 개인적으로 dd명령 보다 좀 더 명시적인 것 같습니다.
# mkfile 크기 파일명
# 1Mb, 10Mb, 100Mb 파일 순차 생성.
$ mkfile 1m dummy_1m.file
$ mkfile 10m dummy_10m.file
$ mkfile 100m dummy_100m.file
끝.