Man page - fallocate(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

fallocate

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Allocation d’espace disque.
DĂ©sallocation d’espace de fichier
RĂ©duction d’espace de fichier
Initialisation d’espace de fichier
Augmenter l’espace de fichier
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
VOIR AUSSI
TRADUCTION

NOM

fallocate – Manipuler un espace de fichier

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <fcntl.h>

int fallocate(int fd , int mode , off_t offset , off_t len );

DESCRIPTION

C’est un appel systĂšme spĂ©cifique Ă  Linux et non portable. Pour la mĂ©thode portable, spĂ©cifiĂ©e par POSIX.1, pour assurer que de l’espace est allouĂ© pour un fichier, consultez posix_fallocate (3).

fallocate () permet Ă  l’appelant de manipuler directement l’espace disque allouĂ© pour le fichier rĂ©fĂ©rencĂ© par fd pour la plage d’octets dĂ©butant Ă  offset et de longueur len octets.

Le paramĂštre mode dĂ©finit l’opĂ©ration Ă  effectuer sur la plage donnĂ©e. Les sous-sections suivantes apportent des prĂ©cisions sur les opĂ©rations prises en charge.

Allocation d’espace disque.

L’opĂ©ration par dĂ©faut (c’est-Ă -dire si mode est zĂ©ro) de fallocate () alloue l’espace disque dans l’intervalle indiquĂ© par offset et len . La taille du fichier (comme indiquĂ©e par stat (2)) sera modifiĂ©e si offset + len est supĂ©rieur Ă  la taille du fichier. Toute sous-rĂ©gion dans l’intervalle indiquĂ© par offset et len sera initialisĂ©e Ă  zĂ©ro si elle ne contient pas de donnĂ©es au moment de l’appel. Ce comportement par dĂ©faut ressemble beaucoup au comportement de la fonction de bibliothĂšque posix_fallocate (3), et est conçu comme une mĂ©thode d’implĂ©mentation optimisĂ©e de cette fonction.

AprĂšs un appel rĂ©ussi, les Ă©critures suivantes dans l’intervalle indiquĂ© par offset et len seront garanties sans Ă©chec dĂ» Ă  un manque d’espace disque.

Si l’attribut FALLOC_FL_KEEP_SIZE est indiquĂ© dans mode , le comportement de l’appel est similaire, mais la taille du fichier ne sera pas modifiĂ©e si offset + len est supĂ©rieur Ă  la taille du fichier. L’allocation prĂ©alable de blocs mis Ă  zĂ©ro aprĂšs la fin du fichier de cette façon permet d’optimiser la charge de travail d’ajout.

Si l’attribut FALLOC_FL_UNSHARE est indiquĂ© dans mode , les extensions de donnĂ©es du fichier partagĂ© seront privĂ©es pour le fichier afin de garantir que l’écriture suivante n’échouera pas du fait d’un manque d’espace. GĂ©nĂ©ralement, cela se fera par une opĂ©ration copy-on-write sur toutes les donnĂ©es partagĂ©es du fichier. Cet attribut peut ne pas ĂȘtre pris en charge par tous les systĂšmes de fichiers.

Parce que l’allocation est effectuĂ©e en fragments de taille de blocs, fallocate () peut allouer un espace de disque plus grand que celui qui a Ă©tĂ© indiquĂ©.

DĂ©sallocation d’espace de fichier

Indiquer le paramĂštre FALLOC_FL_PUNCH_HOLE (disponible depuis Linux 2.6.38) dans mode dĂ©salloue l’espace (c’est-Ă -dire crĂ©e un trou) dans l’intervalle d’octets commençant Ă  offset et continuant pendant len octets. Dans l’espace indiquĂ©, les blocs incomplets du systĂšme de fichiers sont mis Ă  zĂ©ro et tous les blocs du systĂšme de fichiers sont retirĂ©s du fichier. AprĂšs un appel rĂ©ussi, les lectures suivantes dans cet intervalle renverront des zĂ©ros.

Le paramĂštre FALLOC_FL_PUNCH_HOLE doit ĂȘtre inclus avec FALLOC_FL_KEEP_SIZE dans mode (avec un OU binaire) ; autrement dit, mĂȘme en faisant des trous aprĂšs la fin du fichier, la taille du fichier (comme indiquĂ©e par stat (2)) ne changera pas.

Les systĂšmes de fichiers ne prennent pas tous FALLOC_FL_PUNCH_HOLE en charge ; si un systĂšme de fichiers n’accepte pas l’opĂ©ration, une erreur est renvoyĂ©e. L’opĂ©ration est prise en charge notamment par les systĂšmes de fichiers suivants :

-

XFS (depuis Linux 2.6.38)

-

ext4 (depuis Linux 3.0)

-

Btrfs (depuis Linux 3.7)

-

tmpfs (5) (depuis Linux 3.5)

-

gfs2 (5) (depuis Linux 4.16)

RĂ©duction d’espace de fichier

Indiquer le paramĂštre FALLOC_FL_COLLAPSE_RANGE (disponible depuis Linux 3.15) dans mode supprime un intervalle d’octets d’un fichier sans laisser de trou. L’intervalle commence Ă  offset et continue pendant len octets. Une fois l’opĂ©ration terminĂ©e, le contenu du fichier au-delĂ  de offset+len est dĂ©placĂ© Ă  l’emplacement offset , le fichier sera alors len octets plus court.

Un systĂšme de fichiers peut limiter la granularitĂ© de l’opĂ©ration, pour garantir une implĂ©mentation efficace. Typiquement, offset et len doivent ĂȘtre multiples de la taille de bloc du systĂšme de fichiers, qui est en fonction du type de systĂšme de fichiers et de sa configuration. Si cette exigence est applicable au systĂšme de fichiers mais n’est pas remplie, fallocate () Ă©chouera avec l’erreur EINVAL .

Si la plage dĂ©finie par offset et len atteint ou dĂ©passe la fin du fichier, une erreur est renvoyĂ©e. Le fichier devrait ĂȘtre tronquĂ© avec ftruncate (2).

Aucun autre attribut de ne peut ĂȘtre indiquĂ© dans mode en plus de FALLOC_FL_COLLAPSE_RANGE .

Linux 3.15 prend en charge FALLOC_FL_COLLAPSE_RANGE pour ext4 (seulement pour les fichiers à base de domaines ou « extent ») et XFS.

Initialisation d’espace de fichier

Indiquer le paramĂštre FALLOC_FL_ZERO_RANGE (disponible depuis Linux 3.15) dans mode met Ă  zĂ©ro l’espace dans l’intervalle d’octets commençant Ă  offset et continuant pendant len octets. Dans l’intervalle indiquĂ©, les blocs sont prĂ©allouĂ©s pour les zones qui couvrent les trous du fichier. AprĂšs un appel rĂ©ussi, les lectures suivantes dans cet intervalle renverront des zĂ©ros.

L’initialisation est rĂ©alisĂ©e dans le systĂšme de fichiers de prĂ©fĂ©rence en convertissant l’intervalle en « extents » non Ă©crits. Cette approche signifie que l’intervalle indiquĂ© ne sera pas physiquement initialisĂ© sur le pĂ©riphĂ©rique (Ă  part les blocs partiels aux extrĂ©mitĂ©s de l’intervalle) et qu’une entrĂ©e ou sortie n’est (sinon) nĂ©cessaire que pour mettre Ă  jour les mĂ©tadonnĂ©es.

Si l’attribut FALLOC_FL_KEEP_SIZE est Ă©galement indiquĂ© dans mode , le comportement de l’appel est similaire, mais la taille du fichier ne sera pas modifiĂ©e si offset + len est supĂ©rieur Ă  la taille du fichier. Le comportement est le mĂȘme lorsque de l’espace est prĂ©allouĂ© et que FALLOC_FL_KEEP_SIZE est indiquĂ©.

Les systĂšmes de fichiers ne prennent pas tous FALLOC_FL_ZERO_RANGE en charge ; si un systĂšme de fichiers n’accepte pas l’opĂ©ration, une erreur est renvoyĂ©e. L’opĂ©ration est prise en charge notamment par les systĂšmes de fichiers suivants :

-

XFS (depuis Linux 3.15)

-

ext4, pour les fichiers à base de domaines (« extent ») (depuis Linux 3.15)

-

SMB3 (depuis Linux 3.17)

-

Btrfs (depuis Linux 4.16)

Augmenter l’espace de fichier

Indiquer le paramĂštre FALLOC_FL_INSERT_RANGE (disponible depuis Linux 4.1) dans mode augmente l’espace d’un fichier en insĂ©rant un trou dans la taille du fichier sans effacer de donnĂ©es. Le trou commencera Ă  offset et continuera pendant len octets. Lors de l’insertion d’un trou dans un fichier, le contenu du fichier Ă  partir de offset sera dĂ©calĂ© vers le haut (Ă  savoir vers la position du fichier supĂ©rieure) de len octets. L’insertion d’un trou dans un fichier augmente sa taille de len octets.

Ce mode a les mĂȘmes limites que FALLOC_FL_COLLAPSE_RANGE concernant la granularitĂ© des opĂ©rations. Si les exigences de granularitĂ© ne sont pas satisfaites, fallocate () Ă©choue avec l’erreur EINVAL . Si offset est Ă©gal ou supĂ©rieur Ă  la fin du fichier, une erreur est renvoyĂ©e. Pour de telles opĂ©rations (Ă  savoir l’insertion d’un trou Ă  la fin du fichier), ftruncate (2) doit ĂȘtre utilisĂ©.

Aucun autre attribut ne peut ĂȘtre indiquĂ© dans mode en plus de FALLOC_FL_INSERT_RANGE .

FALLOC_FL_INSERT_RANGE requiert une prise en charge par le systÚme de fichiers. Les systÚmes de fichiers qui gÚrent cette opération comprennent XFS (dans Linux 4.1) et ext4 (depuis Linux 4.2).

VALEUR RENVOYÉE

En cas de succĂšs, fallocate () renvoie 0 . En cas d’erreur, -1 est renvoyĂ© et errno contient le code d’erreur.

ERREURS

EBADF

fd n’est pas un descripteur de fichier valable ou n’est pas ouvert en Ă©criture.

EFBIG

offset + len excĂšde la taille maximale du fichier.

EFBIG

mode vaut FALLOC_FL_INSERT_RANGE et la taille du fichier + size dépasse la taille maximale du fichier.

EINTR

Un signal a Ă©tĂ© capturĂ© pendant l’exĂ©cution ; voir signal (7).

EINVAL

offset était inférieur à 0, ou len était inférieur ou égal à 0.

EINVAL

mode vaut FALLOC_FL_COLLAPSE_RANGE et la plage indiquée par offset et len atteint ou dépasse la fin du fichier.

EINVAL

mode vaut FALLOC_FL_INSERT_RANGE et la plage indiquée par offset atteint ou dépasse la fin du fichier.

EINVAL

mode vaut FALLOC_FL_COLLAPSE_RANGE ou FALLOC_FL_INSERT_RANGE , mais offset ou len n’est pas un multiple de la taille du bloc du systùme de fichiers.

EINVAL

mode contient FALLOC_FL_COLLAPSE_RANGE ou FALLOC_FL_INSERT_RANGE ainsi que d’autres attributs, mais aucun autre attribut n’est autorisĂ© avec FALLOC_FL_COLLAPSE_RANGE ou FALLOC_FL_INSERT_RANGE .

EINVAL

mode vaut FALLOC_FL_COLLAPSE_RANGE , FALLOC_FL_ZERO_RANGE ou FALLOC_FL_INSERT_RANGE ,, mais le fichier rĂ©fĂ©rencĂ© par fd n’est pas un fichier normal.

EIO

Une erreur d’entrĂ©e-sortie s’est produite durant la lecture ou l’écriture sur un systĂšme de fichiers.

ENODEV

fd ne fait pas référence à un fichier régulier ou un répertoire (si fd est un tube ou une FIFO, une erreur différente en résultera).

ENOSPC

Il n’y a pas suffisamment d’espace disponible sur le pĂ©riphĂ©rique oĂč se trouve le fichier rĂ©fĂ©rencĂ© par fd .

ENOSYS

Ce noyau ne met pas en Ɠuvre fallocate ().

EOPNOTSUPP

Le systĂšme de fichiers contenant le fichier rĂ©fĂ©rencĂ© par fd ne gĂšre pas cette opĂ©ration, ou le mode n’est pas pris en charge par le systĂšme de fichiers contenant le fichier rĂ©fĂ©rencĂ© par fd .

EPERM

Le fichier auquel se réfÚre fd est marqué comme immuable (voir chattr (1)).

EPERM

mode indique FALLOC_FL_PUNCH_HOLE , FALLOC_FL_COLLAPSE_RANGE ou FALLOC_FL_INSERT_RANGE et le fichier auquel se réfÚre fd est marqué en ajout uniquement (consulter chattr (1)).

EPERM

La lecture a été interrompue par un signal ; consultez fnctl (2).

ESPIPE

fd fait référence à un tube ou une FIFO.

ETXTBSY

mode indique FALLOC_FL_COLLAPSE_RANGE ou FALLOC_FL_INSERT_RANGE , mais le fichier rĂ©fĂ©rencĂ© par fd est en cours d’exĂ©cution.

STANDARDS

Linux.

HISTORIQUE

fallocate ()

Linux 2.6.23, glibc 2.10.

FALLOC_FL_*

glibc 2.18.

VOIR AUSSI

fallocate (1), ftruncate (2), posix_fadvise (3), posix_fallocate (3)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .