[linux] Linux 시스템에서 큰 파일을 빠르게 생성

Linux ( Red Hat Linux ) 시스템 에서 대용량 파일을 빠르게 만들 수 있습니까?

dd 는 작업을 수행하지만 /dev/zero테스트를 위해 수백 GB 크기의 파일이 필요한 경우 드라이브 에서 읽고 쓰는 데 시간이 오래 걸릴 수 있습니다 … 반복적으로 수행해야하는 경우 시간이 실제로 더해집니다.

파일의 내용에 신경 쓰지 않고 신속하게 파일을 만들고 싶습니다. 어떻게 할 수 있습니까?

스파 스 파일을 사용하면 작동하지 않습니다. 파일에 디스크 공간을 할당해야합니다.



답변

dd다른 답변에서 좋은 해결책이지만이 목적을 위해서는 느립니다. Linux (및 기타 POSIX 시스템)에는 fallocate실제로 쓰지 않고 원하는 공간을 사용하는 최신 디스크 기반 파일 시스템과 매우 빠르게 작동합니다.

예를 들면 다음과 같습니다.

fallocate -l 10G gentoo_root.img


답변

이것은 오늘날의 가상 환경 환경에서 일반적인 질문입니다. 불행히도 그 대답은 생각만큼 간단하지 않습니다.

dd는 명백한 첫 번째 선택이지만, dd는 본질적으로 사본이며 모든 데이터 블록을 작성하도록 강제합니다 (따라서 파일 내용 초기화). 그리고 초기화는 너무 많은 I / O 시간을 차지합니다. (더 오래 걸리고 싶습니까? / dev / zero 대신 / dev / random을 사용하십시오 ! 그러면 CPU와 I / O 시간을 사용하게됩니다!) 결국 dd는 좋지 않은 선택입니다. VM “create”GUI에서 사용되는 기본값). 예 :

dd if=/dev/zero of=./gentoo_root.img bs=4k iflag=fullblock,count_bytes count=10G

잘라내 기는 또 다른 선택이며 아마도 가장 빠를 것입니다. 그러나 “스파 스 파일”을 생성하기 때문입니다. 기본적으로 스파 스 파일은 동일한 데이터가 많은 디스크 섹션이며 기본 파일 시스템은 실제로 모든 데이터를 저장하는 것이 아니라 모든 것이 존재하는 것처럼 “척하는”방식으로 “속임수”입니다. 따라서 truncate를 사용하여 VM에 20GB 드라이브를 만들면 파일 시스템은 실제로 20GB를 할당하지 않지만 디스크에서 트랙 하나만으로도 20GB의 제로가 있다고 속임수로 표시합니다. 실제로 (실제로) 사용 중일 수 있습니다. 예 :

 truncate -s 10G gentoo_root.img

fallocate은이다 와 – 마지막 최고선택 . 그것은 본질적으로 “보유”(또는 공간 당신이있는 거 추구하는 모든 “할당은”하지만, 그래서 쓰기 아무것도 귀찮게하지 않기 때문에, VM의 디스크 할당에 사용 fallocate를 사용하여 20GB 가상 드라이브 공간을 만들면 실제로는 “스파 스 파일”이 아닌 20GB 파일을 얻게되며 아무것도 쓰지 않아도됩니다. 새로운 디스크와 같은 종류!) 예 :

fallocate -l 10G gentoo_root.img


답변

리눅스 및 모든 파일 시스템

xfs_mkfile 10240m 10Gigfile

Linux 및 일부 파일 시스템 (ext4, xfs, btrfs 및 ocfs2)

fallocate -l 10G 10Gigfile

OS X, Solaris, SunOS 및 아마도 다른 UNIX

mkfile 10240m 10Gigfile

HP-UX

prealloc 10Gigfile 10737418240

설명

mkfile <size>대신 myfile을 사용해보십시오 dd. 이 -n옵션을 사용하면 크기가 표시되지만 데이터가 기록 될 때까지 디스크 블록이 할당되지 않습니다. -n옵션이 없으면 공간이 0으로 채워져 디스크에 쓰기를 의미하므로 시간이 걸립니다.

mkfile 은 SunOS에서 파생되었으며 모든 곳에서 사용할 수 없습니다. 대부분의 Linux 시스템은 xfs_mkfile이름에도 불구하고 XFS 파일 시스템뿐만 아니라 정확히 동일한 방식으로 작동합니다. 그것은에 포함 xfsprogs (데비안 / 우분투) 또는 이와 유사한라는 이름의 패키지.

대부분의 Linux 시스템에는 fallocate특정 파일 시스템 (예 : btrfs, ext4, ocfs2 및 xfs)에서만 작동하지만 모든 파일 공간을 할당하지만 (홀리 파일이 아닌 파일을 생성 함) 가장 빠르지 않습니다. 그것의.


답변

truncate -s 10M output.file

10M 파일을 즉시 생성합니다 (M은 1024 * 1024 바이트, MB는 1000 * 1000, K, KB, G, GB와 동일).

편집 : 많은 사람들이 지적했듯이 실제로 파일을 장치에 할당하지는 않습니다. 이를 통해 장치에서 사용 가능한 공간에 관계없이 “스파 스”파일을 생성하므로 실제로 임의의 큰 파일을 생성 할 수 있습니다.

따라서이 작업을 수행 할 때 파일에 액세스 할 때까지 물리적 할당이 지연됩니다. 이 파일을 메모리에 매핑하는 경우 예상 성능이 없을 수 있습니다.

그러나 이것은 여전히 ​​유용한 명령입니다.


답변

여기서 seek는 원하는 파일 크기 (바이트)입니다.

dd if=/dev/zero of=filename bs=1 count=1 seek=1048575


답변

seek가 원하는 파일의 크기 (바이트) 인 예

#kilobytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200K

#megabytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200M

#gigabytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200G

#terabytes
dd if=/dev/zero of=filename bs=1 count=0 seek=200T

dd 맨 페이지에서 :

블록 및 바이트 뒤에는 다음과 같은 곱셈 접미사가 올 수 있습니다 : c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, GB = 1000 * 1000 * T, P, E, Z, Y의 경우 1000, G = 1024 * 1024 * 1024 등입니다.


답변

1GB 파일을 만들려면

dd if=/dev/zero of=filename bs=1G count=1