fallocate vs dd สำหรับ swapfile?


19

ฉันสงสัยว่าความแตกต่างระหว่างการสร้าง swapfile กับอะไร

fallocate -l 1G /swapfile

และ

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

ทั้งคู่ดูเหมือนจะทำงานได้ดี แต่มีข้อได้เปรียบเหนืออีกข้อหนึ่งหรือไม่

สิ่งเดียวที่ฉันสามารถหาได้ทางออนไลน์คือมันใช้fallocateไม่ได้กับทุกระบบไฟล์


1
fallocateมักจะเร็วกว่า (เนื่องจากไม่ได้เติมไฟล์ที่สร้างด้วยศูนย์) - ไม่เช่นนั้นจะไม่มีความแตกต่างผลลัพธ์สุดท้ายก็เหมือนกัน ดู: antipaucity.com/2017/08/31/ …
JonasCz - Reinstate Monica

1
@JonasCz: ใช่… แต่ไม่ใช่! ดูคำตอบของ muru
David Foerster

คำตอบ:


22

จากmanpage :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.

และจากmanpage :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
manpage mkswap ยังบอกด้วยว่า: ในการตั้งค่าไฟล์ swap คุณจำเป็นต้องสร้างไฟล์นั้นก่อนที่จะเริ่มต้นด้วย mkswap เช่นการใช้คำสั่งเช่นfallocate --length 8GiB swapfileฉันสับสน
stumblebee

4
@stumblebee และสามารถใช้งานได้ดีกับระบบไฟล์ที่ไม่รองรับไฟล์ที่จัดสรรล่วงหน้าซึ่ง fallocate จะทำงานได้เหมือน dd แต่ไม่ใช่ใน ext4 ซึ่งเป็นค่าเริ่มต้นและเป็นระบบไฟล์ Linux ที่ใช้กันมากที่สุด
muru

2
ฉันสับสนเล็กน้อยว่าทำไมfallocateจะมีปัญหา ดูเหมือนว่าจะจัดสรรพื้นที่ (อย่างที่มันบอกไว้บนฉลาก) และการทำfallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptestต่อไปext4ไม่ได้บ่นอะไรเลย truncate -l 1gจะแตกต่างกันเนื่องจากมันเพิ่งตั้งขนาดไฟล์ แต่ไม่จัดสรรบล็อกใด ๆ
ilkkachu

1
ดังนั้นหากมันไม่ได้ทำเช่นนั้นใครบางคนต้องยื่นข้อบกพร่อง :)
จะ Crawford

1
@ilkkachu ใครบางคนทำซ้ำปัญหาบน
xfs

1

Fallocate เร็วขึ้นจาก manoc fallocate:

fallocate ใช้เพื่อจัดการกับพื้นที่ดิสก์ที่จัดสรรสำหรับไฟล์ไม่ว่าจะเป็นการจัดสรรคืนหรือจัดสรรล่วงหน้า สำหรับระบบไฟล์ที่รองรับการเรียกใช้ระบบ fallocate การจัดสรรล่วงหน้าทำได้อย่างรวดเร็วโดยการจัดสรรบล็อกและทำเครื่องหมายว่าไม่มีการกำหนดค่าเริ่มต้นโดยไม่ต้องใช้ IO กับบล็อกข้อมูล นี่คือเร็วกว่าการสร้างไฟล์โดยเติมด้วยศูนย์

fallocate(1)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.