앞으로 티스토리 대신 blog.stackframe.dev에서 블로깅을 합니다. 이 블로그는 남겨 둘 예정입니다.
리눅스에서 파일 처리를 할 때 미리 공간을 확보하거나 내부 마운트를 하기 위해 일정 크기의 파일을 만들어야 할 경우가 있습니다. 리눅스를 공부해 보신 분이라면 아래와 같은 명령을 떠올리실지도 모르겠습니다.
dd if=/dev/zero of=test_file.img bs=4M count=256
/dev/zero 특수 장치에서 4M씩 읽어서 test_file.img에 쓰는 명령이라 속도가 느립니다.
제 컴퓨터에서 실행했을 때 13초가 걸렸습니다.
다행히도 이런 문제를 해결하기 위한 것인지 리눅스에서 truncate, ftruncate라는 system call을 제공합니다. truncate system call은 파일 쓰기 대신 inode를 수정하여 파일 크기를 변경합니다. 그러므로 dd보다 더욱 빨리 수행될 수 있습니다. 그리고 이 system call을 사용하는 truncate란 명령어도 GNU coreutils에 포함되어 있으므로 어떤 리눅스 시스템에서도 사용가능합니다.
truncate(8) 명령에는 옵션이 6개가 있지만 사실상 쓰이는건 하나 뿐입니다.
파일 사이즈를 설정합니다. 바이트를 의미하며 단위를 입력할 수도 있습니다.(K,M,G,T,P,E,Z,Y)는 각각 (2^10)^n을 의미합니다. (KB,MB,GB... 처럼 B가 붙는다면 (10^3)^n으로 계산됩니다.)
B가 붙고 안붙고의 차이는 저장장치 용량 표기와 실제 용량의 차이에 대해 이해하고 있으면 바로 아실 수 있으실겁니다. 그러므로 예제로 5기가바이트의 크기 파일을 만들고 싶다면 truncate -s 5GB test_file.img 를, 5기비바이트 크기의 파일을 만들고 싶다면 truncate -s 5G test_file.img 명령을 실행하면 됩니다.
만약 존재하는 파일 이름을 입력했다면 그 파일은 커지거나 작아지고, 커진 경우에는 그만큼 0으로 초기화된 데이터가 뒤에 붙습니다. 존재하지 않는 파일이라면 입력한 크기만큼 0으로 초기화된 파일이 생성됩니다.
'Linux' 카테고리의 다른 글
[Linux] QEMU 가상머신에 OS 설치하기 (0) | 2019.06.25 |
---|---|
리눅스에 가상머신 설치하기 [QEMU] (0) | 2019.06.25 |
Tails OS 소개 (3) | 2019.01.17 |
man 페이지의 특정 섹션 보기 (0) | 2019.01.04 |
hostnamectl로 리눅스 호스트명 변경하기 (0) | 2018.12.30 |