fallocate vs dd per file di scambio?


19

Mi chiedo quale sia la differenza tra la creazione di un file di scambio

fallocate -l 1G /swapfile

e

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

entrambi sembrano funzionare bene, ma l'uno ha un vantaggio rispetto all'altro?

L'unica cosa che ho trovato online è che fallocatenon funziona su tutti i file system.


1
fallocatedi solito è più veloce (poiché non riempie il file creato di zeri), altrimenti nessuna differenza, il risultato finale è lo stesso. Vedi: antipaucity.com/2017/08/31/…
JonasCz - Ripristina Monica

1
@JonasCz: Sì ... ma no! Vedi la risposta di Muru.
David Foerster,

Risposte:


22

Dalla mkswappagina di manuale :

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.

E dalla swaponpagina di manuale :

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.

Ne consegue che, sebbene fallocatepossa essere più veloce di dd, non è adatto per la creazione di file di scambio e non è supportato da strumenti relativi allo scambio.


1
La manpage mkswap dice anche: Per impostare un file di scambio, è necessario creare quel file prima di inizializzarlo con mkswap, ad esempio usando un comando come fallocate --length 8GiB swapfilese fossi confuso.
Stumblebee,

4
@stumblebee e funzionerà bene su filesystem che non supportano file pre-allocati in cui fallocate funzionerà essenzialmente come dd, ma non su ext4, che è il filesystem Linux predefinito e di gran lunga più comunemente usato.
Muru,

2
Sono un po 'confuso sul perché fallocatesarebbe un problema. Sembra, bene, allocare lo spazio. (Come si dice in etichetta.) E facendo fallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptestsulla ext4non si lamenta di nulla. truncate -l 1gsarebbe diverso, poiché imposta solo la dimensione del file ma non alloca alcun blocco.
ilkkachu,

1
Quindi, se non lo fa, qualcuno deve presentare un bug :)
Will Crawford

1
@ilkkachu qualcuno ha riprodotto il problema su xfs, almeno: bugzilla.redhat.com/show_bug.cgi?id=1129205
muru

1

Fallocate è più veloce, dalla manpage fallocate:

fallocate viene utilizzato per manipolare lo spazio su disco allocato per un file, sia per deallocare che per preallocarlo. Per i filesystem che supportano la chiamata di sistema fallocate, la preallocazione viene eseguita rapidamente allocando i blocchi e contrassegnandoli come non inizializzati, senza richiedere IO sui blocchi di dati. Questo è molto più veloce della creazione di un file riempendolo con zeri.

fallocate(1)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.