스왑 파일에 대한 fallocate 대 dd?


19

스왑 파일을 만드는 것의 차이점이 무엇인지 궁금합니다.

fallocate -l 1G /swapfile

dd if=/dev/zero of=/swapfile bs=1024 count=1024

둘 다 잘 작동하는 것처럼 보이지만 하나는 다른 것보다 유리합니까?

온라인에서 찾을 수있는 유일한 것은 fallocate모든 파일 시스템에서 작동하지 않는다는 것입니다.


1
fallocate생성 된 파일을 0으로 채우지 않기 때문에 일반적으로 더 빠릅니다. 그렇지 않으면 차이점이 없지만 최종 결과는 같습니다. 참조 : antipaucity.com/2017/08/31/…
JonasCz-복원 Monica Monica

1
@JonasCz : 예… 그러나 아닙니다! muru의 답변을 참조하십시오.
David Foerster

답변:


22

에서 :mkswap

Note  that  a  swap  file  must  not contain any holes.  Using cp(1) to
create the file is not acceptable.  Neither is use of  fallocate(1)  on
file  systems  that support preallocated files, such as XFS or ext4, or
on copy-on-write filesystems like btrfs.   It  is  recommended  to  use
dd(1)  and  /dev/zero in these cases.  Please read notes from swapon(8)
before adding a swap file to copy-on-write filesystems.

그리고에서 :swapon

You should not use swapon on a file with holes.  This can  be  seen  in
the system log as

      swapon: swapfile has holes.

The  swap file implementation in the kernel expects to be able to write
to the file directly, without the assistance of the  filesystem.   This
is  a problem on preallocated files (e.g.  fallocate(1)) on filesystems
like XFS or ext4, and on copy-on-write filesystems like btrfs.

동시에 그것은, 그 다음에 fallocate보다 빨리 할 수있다 dd, 그것은 스왑 파일을 생성 및 스왑 관련 도구를 지원하지 적합하지 않습니다.


1
스왑 파일을 설정하려면 mkswap으로 초기화하기 전에 해당 파일을 작성해야합니다 (예 : fallocate --length 8GiB swapfile혼란스러워 하는 명령 사용) .
stumblebee

4
@stumblebee 그리고 그것은 fallocate가 기본적으로 dd와 같이 작동하지만 사전에 가장 일반적으로 사용되는 Linux 파일 시스템 인 ext4에서는 미리 할당 된 파일을 지원하지 않는 파일 시스템에서 잘 작동합니다.
muru

2
fallocate문제가 될지 조금 혼란 스럽습니다 . 공간을 할당하는 것 같습니다. (라벨에 적혀.) 그리고 일 fallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptest에 대한 것은 ext4아무것도 불평하지 않습니다. truncate -l 1g파일 크기를 설정하지만 블록을 할당하지 않기 때문에 다릅니다.
ilkkachu

1
그렇게하지 않으면 누군가 버그를 제기해야합니다. :)
Will Crawford

1
@ilkkachu 누군가가 최소한 xfs에서 문제를 재현했습니다 : bugzilla.redhat.com/show_bug.cgi?id=1129205
muru

1

fallocate 맨 페이지에서 Fallocate가 더 빠릅니다.

fallocate는 파일을 할당 해제하거나 사전 할당하기 위해 파일에 할당 된 디스크 공간을 조작하는 데 사용됩니다. fallocate 시스템 호출을 지원하는 파일 시스템의 경우 블록을 할당하고 초기화되지 않은 것으로 표시하여 데이터 블록에 대한 IO가 필요하지 않으므로 사전 할당이 신속하게 수행됩니다. 파일을 0으로 채워 파일을 만드는 것보다 훨씬 빠릅니다.

fallocate(1)

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