16MiB (16777216 바이트)에 도달 할 때까지 채울 파일이 있습니다. 현재는 16515072 바이트입니다. 차이점은 262144 바이트입니다.
패드는 어떻게합니까?
이것은 작동하지 않는 것 같습니다.
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
truncate -s 16M thefile
16MiB (16777216 바이트)에 도달 할 때까지 채울 파일이 있습니다. 현재는 16515072 바이트입니다. 차이점은 262144 바이트입니다.
패드는 어떻게합니까?
이것은 작동하지 않는 것 같습니다.
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
truncate -s 16M thefile
답변:
실제 패딩을 얻는 대답 외에도 파일 seek
의 새로운 끝 위치 에 ing하고 단일 문자를 작성하여 파일 의 패딩 공간을 대부분 비워 둘 수 있습니다 ( "구멍") .
dd if=/dev/zero of=largerfile.txt bs=1 count=1 seek=16777215
(이 기능은 특히 성능 bs=1
이 뛰어나고 많은 양의 추가 디스크 공간을 차지하지 않는 이점이 있습니다 ).
이 방법은 문자를 추가하지 않고 if=/dev/null
원하는 최종 파일 크기를 사용하여 작동하는 것처럼 보입니다 .
dd if=/dev/null of=largerfile.txt bs=1 count=1 seek=16777216
더 큰 블록 크기를 사용하는 물리적 패딩 솔루션의 성능 변형은 다음과 같습니다.
padding=262144 bs=32768 nblocks=$((padding/bs)) rest=$((padding%bs))
{
dd if=/dev/zero bs=$bs count=$nblocks
dd if=/dev/zero bs=$rest count=1
} 2>/dev/null >>largerfile.txt
truncate -s +262144 largerfile.txt
에도 빠릅니다.
여기에서 가장 좋은 답변은 Janis 's (위)입니다. 현재 파일 크기를 잊고 계산하지 않고 원하는 크기로 직접 채울 수 있기 때문입니다.
또한 / dev / zero를 추가하지 않는 스파 스 파일을 활용합니다.
'count'는 0으로 허용되고 여전히 패딩을 얻으므로 대답은 더 깔끔 할 수 있습니다.
dd if=/dev/null of=largerfile.txt bs=1 count=0 seek=16777216
(편집 : 이것은 GNU dd에는 맞지만 동작 count=0
은 플랫폼에 따라 다릅니다. 주석 참조)
count=0
지정되지 않았지만 일반적으로 count
매개 변수가 지정 되지 않은 경우와 동일 합니다. 더 많은 문제 : dd
파일을 16777216 바이트로 자르지 만, 결국 구멍이 생길 수 있기를 원한다면 구멍 후에 데이터를 먼저 쓰고 나중에 데이터가없는 크기로 잘라야하기 때문에 잘못되었습니다 .
dd if=/dev/zero of=somefile
과 같다고 말하는가 dd if=/dev/zero of=somefile count=0
? 시도 해봐.
count=0
is 당신이 전혀 카운트 매개 변수를 지정하지 않은 경우와 동일합니다. 이것은 적어도 원본 소스에서 파생 된 모든 구현에 해당됩니다. 시도해보십시오 dd
. 원래 명령으로 작업하지 않은 것 같습니다 .
count
'이 매개 변수 무시' 를 의미 하는 고유 값으로 0을 지정하는 문서를 찾을 수 없습니다 . 찾을 수 있습니까? 이러한 문서가 없으면 count=0
'제로 블록 작성'을 의미하며 이로부터의 편차는 버그입니다 (원본 소스 또는 아니오).
사용해야 dd
합니까? 파일의 특정 (논리적) 길이를 원하면 원하는 위치에 0을 쓰십시오. 이전 끝과 기록 된 바이트 사이의 바이트는 널 바이트를 갖는 것으로 표시됩니다. 다음은 perl을 사용한 예입니다.
$ echo Hello > file
$ ls -l file
-rw-r--r-- 1 user group 6 Apr 16 22:59 file
$ perl -le 'open(my $f,"+<","file"); seek($f, 16777216 - 2, 0); print $f "\0"'
$ ls -ln file
-rw-r--r-- 1 user group 16777216 Apr 16 22:59 file
왜 "-2"가 줄에 있습니까? 스크립트는 바이트를 작성하므로 1을 빼서 해당 바이트 앞의 위치를 찾습니다. 탐색 위치가 0으로 색인되어 있기 때문에 다른 쪽을 벗어납니다.
bs=1
in을 선택하는dd
것은 경험상 런타임이 매우 비쌉니다.