ngụy biện vs dd cho hoán đổi?


18

Tôi đang tự hỏi sự khác biệt giữa việc tạo ra một tập tin hoán đổi với

fallocate -l 1G /swapfile

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

cả hai dường như hoạt động tốt, nhưng cái này có lợi thế hơn cái kia không?

Điều duy nhất tôi có thể tìm thấy trực tuyến là fallocatenó không hoạt động trên tất cả các hệ thống tệp.


1
fallocatethường nhanh hơn (vì nó không điền vào tệp được tạo bằng số không) - nếu không thì không có sự khác biệt nào, kết quả cuối cùng là như nhau. Xem: antipaucity.com/2017/08/31/ Từ
JonasCz - Tái lập Monica

1
@JonasCz: Có, nhưng không! Xem câu trả lời của muru.
David

Câu trả lời:


21

Từ các mkswapmanpage :

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.

Và từ các swaponmanpage :

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.

Theo sau, trong khi fallocatecó thể nhanh hơn dd, nó không phù hợp để tạo các tệp hoán đổi và không được hỗ trợ bởi các công cụ liên quan đến trao đổi.


1
Trang chủ mkswap cũng cho biết: Để thiết lập tệp hoán đổi, cần phải tạo tệp đó trước khi khởi tạo tệp bằng mkswap, ví dụ: sử dụng lệnh như fallocate --length 8GiB swapfiletôi đang nhầm lẫn.
stumblebee

4
@stumblebee và điều đó sẽ hoạt động tốt trên các hệ thống tệp không hỗ trợ các tệp được phân bổ trước, trong đó fallocate sẽ hoạt động cơ bản như dd, nhưng không phải trên ext4, là hệ thống tệp Linux được sử dụng phổ biến nhất.
muru

2
Tôi hơi bối rối về lý do tại sao fallocatesẽ là một vấn đề. Dường như, tốt, phân bổ không gian. (Như nó nói trên nhãn.) Và làm fallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptesttrên ext4không phàn nàn về bất cứ điều gì. truncate -l 1gsẽ khác, vì nó chỉ đặt kích thước tệp nhưng không phân bổ bất kỳ khối nào.
ilkkachu

1
Vì vậy, nếu nó không làm điều đó, ai đó cần phải báo lỗi :)
Will Crawford

1
@ilkkachu ai đó đã tái tạo vấn đề trên xfs, ít nhất là: bugzilla.redhat.com/show_orms.cgi?id=1129205
muru

1

Fallocate nhanh hơn, Từ trang man Fallocate:

fallocate được sử dụng để thao tác không gian đĩa được phân bổ cho một tệp, hoặc để phân bổ hoặc phân bổ nó. Đối với các hệ thống tập tin hỗ trợ cuộc gọi hệ thống ngụy biện, việc sắp xếp trước được thực hiện nhanh chóng bằng cách phân bổ các khối và đánh dấu chúng là chưa được khởi tạo, không yêu cầu IO cho các khối dữ liệu. Điều này nhanh hơn nhiều so với việc tạo một tệp bằng cách điền vào nó bằng số không.

fallocate(1)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.