명령 줄을 사용하여 파일을 어떻게 다듬을 수 있습니까?


18

다음 Python 코드와 동등한 콘솔은 무엇입니까?

target = file("disk", "w")    # create a file
target.seek(2*1024*1024*1024) # skip to 2 GB
target.write("\0")
target.close()

어쩌면 dd incantation? 아이디어는 가상화에 사용하기 위해 겉보기 크기가 2GB 인 파일을 만드는 것입니다.

kvm disk -cd whatever.iso #Only allocate space as necessary

ddseek시스템 호출 을 노출하는 유일한 기존 도구입니다 ( dd vs cat 참조 – 요즘에도 dd가 여전히 관련이 있습니까?) 일반적인 현재 unices에서이 고양이를 스키닝하는 다른 방법이 있습니다.
Gilles 'SO-stop be evil'Dec

답변:


8

일반적으로 말하면 dd; 그러나 KVM 가상화 사용에 대해 언급 할 때 다음을 사용하는 것이 좋습니다 qemu-img.

qemu-img create -f raw disk 2G

ddChris Down의 대답과 동일한 명령을 효과적으로 수행합니다.

가상화에 사용하기 위해 사용하는 명령에 관계없이 fallocate조각화를 방지하고 성능을 향상시키기 위해 블록을 미리 할당 하는 것이 좋습니다 .

fallocate -l 2G disk

그러나 모든 플랫폼과 파일 시스템에서 사용할 수있는 것은 아닙니다. 이것은 0을 쓰지 않고 파일을 확장해야 할 때마다 필요할 때 나중에 블록을 수행하는 대신 파일에 블록을 할당합니다.


견적은 오타입니까?
badp

@ badp 예, 수정되었습니다.
gertvdijk

2
qemu-img그리고 dd모두 수행 파일 크기 (ftruncate에서)를 설정하는 시스템 호출을하지만, 자신과 그들에 연결하고있는 라이브러리를로드하는 데 더 많은 수행합니다. 그리고 그 점에서 dd보다 훨씬 더 효과적입니다 qemu-img(훨씬 더 크고 훨씬 더 많은 라이브러리와 연결되어 있음). GNU truncate는 더욱 효과적 일 것입니다. dd또한 유비쿼터스라는 장점이 있습니다. fallocate그래도 좋은 지적 입니다.
Stéphane Chazelas

@StephaneChazelas 난 당신의 의견을 완전히 두 번째. qemu-imgKVM 가상화 사용의 확실한 대안 이라고 지적하기 위해 답변을 편집했습니다 .
gertvdijk

14

다음과 같이 스파 스 파일을 만들 수 있습니다 dd.

dd of=file bs=1 seek=2G count=0
$ du file
0       disk
$ du --apparent-size file
2097152 disk

4
또한 2GGNU 확장은 dd입니다. bs=1024 seek=2097152GNU가없는 경우 사용할 수 있습니다 dd.
Chris Down

훗, G확장이며, 그것은 DD의 오픈 BSD 버전에서 지원하지 ...하지만, M그리고 K어쩌면, 지원되는 seek=2048M플랫폼은 무엇 당신에게있는 거 표적화에 따라, 좀 더 읽을 수
Earlz

/ dev / zero에서 읽어야합니다 : if = / dev / zero
Daniel Fanjul

@DanielFanjul 왜? 아무런 차이가 없으며 바이트가 기록되지 않습니다.
Chris Down

@ChrisDown / dev / null에는 읽을 때 데이터가 없지만 / dev / zero에는 무한한 0이 들어 있기 때문입니다. 아, count = 1, 쓸 바이트 수는 0이 아니어야합니다.
Daniel Fanjul

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