swapfile için fallocate vs dd?


19

Bir swapfile oluşturmak arasındaki farkın ne olduğunu merak ediyorum

fallocate -l 1G /swapfile

ve

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

her ikisi de iyi çalışıyor gibi görünüyor, ama birinin diğerine göre bir avantajı var mı?

Çevrimiçi bulabildiğim tek şey fallocate, tüm dosya sistemlerinde çalışmadığıydı.


1
fallocategenellikle daha hızlıdır (oluşturulan dosyayı sıfırlarla doldurmadığından) - aksi halde hiçbir fark yoktur, sonuç aynıdır. Bakınız: antipaucity.com/2017/08/31/…
JonasCz - Monica'yı eski durumuna döndür

1
@JonasCz: Evet… ama hayır! Muru'nun cevabına bakın.
David Foerster

Yanıtlar:


22

Gönderen man :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.

Ve aralarından man :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.

Bundan fallocatedaha hızlı olsa da dd, takas dosyaları oluşturmak için uygun olmadığı ve takasla ilgili araçlar tarafından desteklenmediği anlaşılmaktadır .


1
Mkswap manpage ayrıca şunu söylüyor: Bir takas dosyası ayarlamak için, mfwap ile başlatmadan önce bu dosyayı oluşturmak gerekir, örneğin fallocate --length 8GiB swapfilekafam karışmış gibi bir komut kullanarak .
2018'de

4
@stumblebee ve bu, fallocate'in esas olarak dd gibi çalışacağı önceden ayrılmış dosyaları desteklemeyen, varsayılan ve en çok kullanılan Linux dosya sistemi olan ext4'te çalışmayan dosya sistemlerinde iyi çalışır.
muru

2
Neden fallocatebir sorun olacağı konusunda biraz kafam karıştı . Görünüşe göre, alanı tahsis ediyor. (Etikette diyor.) Ve yapıyor fallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptestüzerinde ext4herhangi bir şey hakkında şikayet etmez. truncate -l 1gdosya boyutunu ayarladığından ancak herhangi bir blok ayırmadığından farklı olur.
ilkkachu

1
Eğer bunu yapmazsa, birisinin hata bildirmesi gerekir :)
Crawford

1
@ilkkachu birisi sorunu xfs'de yeniden oluşturdu: en azından: bugzilla.redhat.com/show_bug.cgi?id=1129205
muru

1

Fallocate daha hızlıdır, Fallocate man sayfasından:

fallocate bir dosya için ayrılan disk alanını değiştirmek veya yeniden konumlandırmak için kullanılır. Fallocate sistem çağrısını destekleyen dosya sistemleri için, önceden tahsis blokları tahsis ederek ve bunları başlatılmamış olarak işaretleyerek veri bloklarına GÇ gerektirmez. Bu, sıfırlarla doldurarak bir dosya oluşturmaktan çok daha hızlıdır.

fallocate(1)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.