Linux에서 하드 드라이브를 채우는 방법

Linux에서 하드 드라이브를 채우는 방법

코드 일부를 테스트하고 있는데 하드 드라이브를 데이터로 채우고 싶습니다. 나는 그것이 dd즉시 거대한 파일을 만들 수 있다는 것을 알았지만 df동의하지 않습니다. 내가 시도한 것은 다음과 같습니다.

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

ls -lh10G 파일을 보여줍니다. 그러나 df -h파티션이 축소되지 않았음을 보여줍니다. 그렇다면 df이제 데이터가 삭제되었음을 인식 하려면 어떻게 해야 합니까 ? 나는 단위 테스트에서 코드를 빨리 작성하기를 바라고 있습니다.

답변1

트릭의 문제점은 seek=<big number>파일 시스템이 (보통) 영리하다는 것입니다. 파일의 일부가 기록된 적이 없는 경우(따라서 모두 0인 경우) 해당 파일에 공간을 할당할 필요가 없습니다. 공간을 전혀 차지하지 않는 10GB 파일을 가질 수 있습니다(이를 "희소 파일"이라고 하며 특정 데이터베이스 구현과 같은 일부 경우에 매우 유용할 수 있음).

예를 들어 다음을 사용하여 공간을 강제로 할당할 수 있습니다.

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

훨씬 더 오래 걸리지만 실제로는 디스크를 채울 것입니다. 블록 크기를 1보다 훨씬 높게 만드는 것이 좋습니다. 이는 dd프로세스가 수행하는 시스템 호출 수를 결정하기 때문입니다. 블록 크기가 작을수록 시스템 호출이 많아지고 따라서 실행 속도가 느려집니다. (1MB 정도가 넘으면 별 차이가 없고 속도가 느려질 수도 있습니다...)

답변2

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

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

답변3

"스파스 파일"이라고 알려진 파일을 만들었습니다. 이 파일은 대부분 비어 있기 때문에(예: \0으로 다시 읽음) 실제로 기록된 파일(1B, 10GB 이후) 외에는 디스크 공간을 차지하지 않습니다. 격차).

나는 실제 디스크 공간을 순식간에 차지하면서 거대한 파일을 만들 수 있다고 믿지 않습니다. 물리적 공간을 차지한다는 것은 파일 시스템이 파일에 디스크 블록을 할당해야 함을 의미합니다.

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

답변4

사용을 중지 seek하고 매우 큰 bs및/또는 count. 이대로 당신은스파스 파일, 그리고 당연히 그렇게 하면 안 됩니다.

관련 정보