리눅스에서 하드 드라이브를 채우는 방법


24

코드 조각을 테스트하고 있으며 하드 드라이브에 데이터를 채우고 싶습니다. 나는 그것이 dd큰 파일을 순식간에 만들 수는 있지만 df동의하지 않는다는 것을 알았습니다 . 내가 시도한 것은 다음과 같습니다.

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lh10G 파일을 보여줍니다. 그러나 df -h파티션이 축소되지 않았 음을 나타냅니다. 이제 df데이터가 인식되었다는 것을 인식하려면 어떻게해야 합니까? 단위 테스트에서 코딩 할 수있는 빠른 것을 원합니다.


serverfault.com에 문의하면 더 운이 좋을 것입니다.

BTW, 10 * 1024 * 1024 * 1024는 10 * 2 ** 30과 동일하며 조금 더 간단합니다.
deltaray

답변:


26

seek=<big number>트릭 의 문제점 은 파일 시스템이 (일반적으로) 영리하다는 것입니다. 파일의 일부가 쓰여지지 않은 경우 (따라서 모두 0), 공간을 할당하지 않아도됩니다. 보시다시피, 공간을 차지하지 않는 10GB 파일을 가질 수 있습니다 ( "스파 스 파일"이라고하며 특정 데이터베이스 구현과 같은 일부 경우에 매우 유용 할 수 있음).

다음과 같이 공간을 강제로 할당 할 수 있습니다.

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

시간이 오래 걸리지 만 실제로 디스크를 채 웁니다. 블록 크기를 1보다 훨씬 크게 만드는 것이 좋습니다. 이렇게하면 dd프로세스가 수행하는 시스템 호출 수가 결정됩니다 . 블록 크기가 작을수록 시스템 호출이 많으므로 실행 속도가 느려집니다. (1MB 이상이더라도 큰 차이는 없으며 아마도 속도가 느려질 수도 있습니다 ...)


나는 보통 bs = (캐시 크기의 절반이 내가 쓰고있는 드라이브에있다)를 사용한다. 이것은 나중에 크기 조정을 위해 더 큰 하드 드라이브에 파티션을 이미징 할 때 현재까지 잘 작동했습니다. ETA : 핵심 단어 HALF.
atroon

20

이에 대한 또 다른 옵션으로 yes를 단일 문자열과 함께 사용하고 dd if = / dev / urandom of = largefile을 실행하는 것보다 약 10 배 더 빠릅니다. 이렇게

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

놀랍게도 dd if = / dev / zero of = filename bs = 1M을 사용하는 것만 큼 빠릅니다.
bhinesley 2012

구문도 기억하기 쉽습니다.
AWT

7

"스파 스 파일"이라는 파일을 만들었습니다. 대부분의 파일이 비어 있기 때문에 (즉, \ 0으로 다시 읽음) 실제로 작성된 것 이외의 디스크 공간을 차지하지 않는 파일 (10GB 이후) 격차).

실제 디스크 공간을 즉시 차지하는 거대한 파일을 만들 수 있다고 생각하지 않습니다. 실제 공간을 확보한다는 것은 파일 시스템이 파일에 디스크 블록을 할당해야 함을 의미합니다.

드라이브 순차 쓰기 속도에 의해 제한되는 구식 "dd if = / dev / zero of = filename bs = 100M count = 100"에 갇혀 있다고 생각합니다.


6

파일 시스템이 가득 찬 사례를 테스트하는 경우 fallocate가 충분합니다. 그리고 더 빠릅니다! 예 :

fallocate -l 150G


3
파일 이름을 지정해야합니다 fallocate -l 150G foo.. 그럼에도 불구하고 도구를 언급 한 +1.
Kamil Maciorowski 2016 년


3

문자 그대로 하드 드라이브를 채우려면 다음과 같이하십시오 :

dd if=/dev/zero of=zeros bs=1M

크기를 제한하려는 경우 선택적으로 개수를 지정할 수 있지만 개수를 생략하면 디스크 공간이 부족해질 때까지 실행됩니다.

dd if=/dev/zero of=zeros bs=1M count=10240

psmears에서 언급했듯이 블록 크기를 1B (bs = 1) 대신 1MB (bs = 1M)로 설정하면 성능이 향상됩니다. 여전히 시간이 걸리지 만 명령의 진행 상황을 확인하려면 별도의 콘솔을 열고 다음 명령을 실행하십시오.

ps aux | grep dd

이 명령에서 dd의 PID를 사용하십시오 (PID를 dd의 PID로 대체).

kill -USR1 PID

그런 다음 dd 터미널을보십시오. 물론 이것은 드라이브를 채우려 고 할 때 제한적으로 사용됩니다 (df 또는 du를 사용하여 여유 디스크 공간 또는 파일 크기를 확인할 수 있습니다). 그러나 dd 출력을 진행시키는 것이 편리한 다른 경우가 있습니다.

추가 크레딧 : 여유 공간 제로화를위한 실용적인 용도 중 하나는 나중에 "제로"파일을 삭제하고 전체 파티션 (또는 모든 파티션을 0으로 설정 한 경우 디스크)을 디스크 이미지 파일 (예 : , disk-backup.dd)를 입력 한 다음 파일을 압축하십시오. 여유 공간은 이제 압축률이 높으므로 압축 된 dd 이미지는 내용이 포함 된 원본 블록 장치보다 훨씬 작습니다.

Shenanigans : 큰 제로 파일을 압축하여 모든 친구에게 이메일로 보냅니다. 그들에게 정말 멋진 일이라고 말하십시오.


2

다음 명령을 사용하여 스파 스가 아닌 1TB 파일을 만듭니다.

dd if=/dev/zero of=bigfile1 bs=10000000000 count=512

이는 할당량에 도달하거나 파일 시스템이 가득 찰 때 발생하는 상황을 테스트하는 데 유용했습니다.

df -h 사용 가능한 공간이 작아지는 것을 보여줍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.