UNIX에서 대용량 파일을 만드는 방법은 무엇입니까?

UNIX에서 대용량 파일을 만드는 방법은 무엇입니까?

Windows에서 이와 같은 작업을 수행하는 방법을 찾았습니다.

echo "This is just a sample line appended  to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt

http://www.windows-commandline.com/how-to-create-large-dummy-file/

UNIX에서 파일을 복사하고 추가한 다음 프로세스를 반복하는 방법이 있습니까? 그것은 마치 for .. cat file1.txt > file1.txt?

답변1

yes "Some text" | head -n 100000 > large-file

그리고 csh/ tcsh:

repeat 10000 echo some test > large-file

그리고 zsh:

{repeat 10000 echo some test} > large-file

GNU 시스템에서는 다음도 참조하세요.

seq 100000 > large-file

또는:

truncate -s 10T large-file

(10TiB 스파스 파일 생성(매우 크지만 디스크 공간을 차지하지 않음)) 및 기타 대안 논의"0바이트가 많이 포함된 테스트 파일 만들기".


그렇게 하는 것은 cat file >> file나쁜 생각입니다.

cat첫째, 출력 파일과 동일한 파일 읽기를 거부하는 일부 구현에서는 작동하지 않습니다 . 하지만 를 실행하여 이 문제를 해결하더라도 내부 버퍼가 내부 버퍼 보다 ​​크면 cat file | cat >> file이전 에 작성한 데이터를 읽게 되기 때문에 무한 루프에 빠지게 됩니다.filecatcat

또한 회전하는 하드 드라이브가 지원하는 파일 시스템에서는(메모리에서 가능한 것보다 큰 크기에 도달한 후) 드라이브가 데이터를 읽는 위치와 쓰는 위치 사이를 앞뒤로 이동해야 하기 때문에 상당히 비효율적입니다.

답변2

다음 명령을 사용하여 Solaris에서 큰 파일을 만들 수 있습니다.

mkfile 10g /path/to/file

Solaris(및 Linux)에서 작동하는 또 다른 방법:

truncate -s 10g /path/to file

도 가능:

dd if=/dev/zero of=/path/to/file bs=1048576 count=10240

답변3

Linux 시스템에서 대용량 파일을 생성하는 가장 빠른 방법은 다음과 같습니다 fallocate.

sudo fallocate -l 2G bigfile

fallocate파일 시스템을 운영하면 기본적으로 실제로 데이터 섹터를 쓰지 않으므로극도로빠르게. 단점은 루트로 실행해야 한다는 것입니다.

루프에서 지속적으로 실행하면 몇 초 안에 가장 큰 파일 시스템을 채울 수 있습니다.

~에서man fallocate

Fallocate는 파일에 할당된 디스크 공간을 조작하여 할당을 취소하거나 사전 할당하는 데 사용됩니다.
fallocate 시스템 호출을 지원하는 파일 시스템의 경우 데이터 블록에 대한 IO를 요구하지 않고 블록을 할당하고 초기화되지 않은 것으로 표시하여 사전 할당이 신속하게 수행됩니다. 이는 파일을 0으로 채워서 생성하는 것보다 훨씬 빠릅니다.
XFS(Linux 2.6.38부터), ext4(Linux 3.0부터), Btrfs(Linux 3.7부터) 및 tmpfs(Linux 3.5부터)를 지원합니다.

답변4

내가 올바르게 이해했다면 다음과 같은 것을 찾고 있습니다.

echo "test line" > file;
for i in {1..21}; do echo "test line" >> file; done

이렇게 하면 "테스트 라인"이 22번 반복되는 파일이 생성됩니다. 특정 파일 크기를 원할 경우 다음과 같은 방법을 사용할 수 있습니다(Linux에서). 1024는 1KB입니다.

while [ $(stat -c "%s" file) -le 1024 ]; do echo "test line" >> file; done

개인적으로 대용량 파일을 만들고 싶을 때에는 두 개의 파일을 사용하고, 하나를 다른 파일에 삽입하는 방식을 사용합니다. 원하는 크기(여기서는 1MB)에 도달할 때까지 프로세스를 반복할 수 있습니다.

echo "test line" > file;
while [ $(stat -c "%s" file) -le 1048576 ]; do 
    cat file >> newfile
    cat newfile >> file
done

파일이 제한 아래로 떨어지면 모든 것이 다시 들어갈 수 있으므로 이 솔루션은 필요한 크기를 초과하는 경우가 많습니다.

마지막으로 원하는 크기의 파일이고 실제로 아무것도 포함할 필요가 없는 경우 다음을 사용할 수 있습니다 truncate.

truncate -s 1M file

관련 정보