fallocate vs dd dla pliku wymiany?


19

Zastanawiam się, jaka jest różnica między tworzeniem pliku wymiany

fallocate -l 1G /swapfile

i

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

oba wydają się działać dobrze, ale czy jedno ma przewagę nad drugim?

Jedyne, co mogłem znaleźć online, to to, że fallocatenie działa na wszystkich systemach plików.


1
fallocatejest zwykle szybszy (ponieważ nie wypełnia utworzonego pliku zerami) - w przeciwnym razie nie ma różnic, wynik końcowy jest taki sam. Zobacz: antipaucity.com/2017/08/31/…
JonasCz - Przywróć Monikę

1
@JonasCz: Tak… ale nie! Zobacz odpowiedź muru.
David Foerster,

Odpowiedzi:


22

Z strony mkswappodręcznika :

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.

I ze strony swaponman :

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.

Wynika z tego, że chociaż fallocatemoże być szybszy dd, nie nadaje się do tworzenia plików wymiany i nie jest obsługiwany przez narzędzia związane z zamianą.


1
Strona podręcznika mkswap mówi również: Aby skonfigurować plik wymiany, konieczne jest utworzenie tego pliku przed zainicjowaniem go za pomocą mkswap, np. Za pomocą polecenia takiego jak fallocate --length 8GiB swapfileja.
stumblebee

4
@stumblebee i to będzie działało dobrze na systemach plików, które nie obsługują wstępnie przydzielonych plików, gdzie fallocate będzie działało zasadniczo jak dd, ale nie na ext4, który jest domyślnym i zdecydowanie najczęściej używanym systemem plików Linux.
muru

2
Jestem trochę zdezorientowany, dlaczego fallocatemiałby być problemem. Wygląda na to, że alokuje przestrzeń. (Jak napisano na etykiecie.) A robienie fallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptestdalej ext4nic nie narzeka. truncate -l 1gbyłoby inaczej, ponieważ po prostu ustawia rozmiar pliku, ale nie przydziela żadnych bloków.
ilkkachu

1
Więc jeśli tak się nie stanie, ktoś musi zgłosić błąd :)
Will Crawford,

1
@ilkkachu ktoś odtworzył problem na XFS, przynajmniej: bugzilla.redhat.com/show_bug.cgi?id=1129205
mur

1

Fallocate jest szybszy, ze strony Fallocate:

fallocate służy do manipulowania przydzielonym miejscem na dysku dla pliku, zarówno w celu zwolnienia, jak i wstępnego przydzielenia. W przypadku systemów plików, które obsługują wywołanie systemowe Fallocate, wstępny przydział odbywa się szybko przez przydzielenie bloków i oznaczenie ich jako niezainicjowanych, nie wymagając od operacji We / Wy bloków danych. Jest to o wiele szybsze niż tworzenie pliku przez wypełnienie go zerami.

fallocate(1)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.