Provided by: manpages-ro-dev_4.23.1-1_all bug

NUME

       ioctl_fideduperange - partajează o parte din datele unui fișier cu un alt fișier

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <linux/fs.h>      /* Definiția lui FIDEDUPERANGEși a
       constantelor                              FILE_DEDUPE_* */
       #include <sys/ioctl.h>

       int ioctl(int src_fd, FIDEDUPERANGE, struct file_dedupe_range *arg);

DESCRIERE

       În  cazul  în  care  un sistem de fișiere acceptă fișiere care partajează stocarea fizică între mai multe
       fișiere, această operație ioctl(2) poate fi utilizată pentru a face ca o parte din  datele  din  fișierul
       src_fd  să  apară  în  fișierul  dest_fd prin partajarea stocării subiacente dacă datele din fișiere sunt
       identice („deduplicare”). Ambele fișiere trebuie să se afle în același sistem  de  fișiere.  Acest  lucru
       reduce  consumul  de  stocare  permițând  sistemului  de  fișiere să stocheze o singură copie partajată a
       datelor. În cazul în care o regiune partajată ar trebui să fie scrisă într-un fișier, sistemul de fișiere
       trebuie să se asigure că modificările rămân private pentru fișierul care este scris.  Acest  comportament
       este denumit în mod obișnuit „copiere la scriere”.

       Acest  ioctl  efectuează  operația  de  „comparare și partajare dacă este identică” pe până la src_length
       octeți din descriptorul de fișier src_fd la poziția src_offset. Această informație este transmisă  într-o
       structură de următoarea formă:

           struct file_dedupe_range {
           ;
               __u64 src_length;
               __u16 dest_count;
               __u16 reserved1;
               __u32 reserved2;
               struct file_dedupe_range_info info[0];
           };

       Deduplicarea este atomică în ceea ce privește scrierile simultane, astfel încât nu este nevoie să se facă
       niciun blocaj pentru a obține o copie deduplicată consistentă.

       Câmpurile rezerved1 și rezerved2 trebuie să fie zero.

       Destinațiile  pentru  operația  de  deduplicare  sunt  transmise  în matricea de la sfârșitul structurii.
       Numărul de destinații este indicat în dest_count, iar informațiile privind destinația sunt transmise  sub
       următoarea formă:

           struct file_dedupe_range_info {
               __s64 dest_fd;
               __u64 dest_offset;
               __u64 bytes_deduped;
               __s32 status;
               __u32 reserved;
           };

       Fiecare  operație  de  deduplicare vizează src_length octeți în descriptorul de fișier dest_fd la poziția
       dest_offset. Câmpul reserved trebuie să fie zero. În timpul  apelului,  src_fd  trebuie  să  fie  deschis
       pentru  citire,  iar  dest_fd  trebuie  să fie deschis pentru scriere. Dimensiunea combinată a structurii
       matricei file_dedupe_range și a structurii  matricei  file_dedupe_range_info  nu  trebuie  să  depășească
       dimensiunea  paginii de sistem. Dimensiunea maximă a src_length depinde de sistemul de fișiere și este de
       obicei de 16 Mio. Această limită va fi impusă în  mod  silențios  de  către  sistemul  de  fișiere.  Prin
       convenție,  spațiul  de  stocare  utilizat  de src_fd este plasat în dest_fd, iar conținutul anterior din
       dest_fd este eliberat.

       La finalizarea cu succes a acestui ioctl, numărul de  octeți  deduplicați  cu  succes  este  returnat  în
       bytes_deduped și un cod de stare pentru operația de deduplicare este returnat în status. În cazul în care
       nici măcar un singur octet din interval nu corespunde, operația de deduplicare va fi ignorată, iar status
       va  fi stabilit la FILE_DEDUPE_RANGE_DIFFERS. Codul status este stabilit la FILE_DEDUPE_RANGE_SAME în caz
       de succes, un cod de eroare negativ în caz de eroare sau  FILE_DEDUPE_RANGE_DIFFERS  dacă  datele  nu  se
       potrivesc.

VALOAREA RETURNATĂ

       În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

       Posibilele erori includ (dar nu se limitează la) următoarele:

       EBADF  src_fd nu este deschis pentru citire; dest_fd nu este deschis pentru scriere sau este deschis doar
              pentru  scriere  de tip „doar-adăugare”; sau sistemul de fișiere pe care se află src_fd nu acceptă
              deduplicarea.

       EINVAL Sistemul de fișiere nu acceptă deduplicarea intervalelor de fișiere  date.  Această  eroare  poate
              apărea,  de  asemenea,  dacă oricare dintre descriptorii de fișiere reprezintă un dispozitiv, FIFO
              sau soclu. În general, sistemele de fișiere pe disc necesită ca argumentele „offset”  și  „length”
              să  fie  aliniate  la  dimensiunea  blocului  fundamental.  Nici  Btrfs  și  nici  XFS  nu acceptă
              suprapunerea intervalelor de deduplicare în același fișier.

       EISDIR Unul dintre fișiere este un director, iar sistemul de fișiere  nu  acceptă  regiuni  partajate  în
              directoare.

       ENOMEM Nucleul nu a reușit să aloce suficientă memorie pentru a efectua operația sau dest_count este atât
              de  mare  încât  descrierea  argumentului de intrare se întinde pe mai mult de o singură pagină de
              memorie.

       EOPNOTSUPP
              Acest lucru poate apărea în cazul în care sistemul de fișiere  nu  acceptă  deduplicarea  niciunui
              descriptor  de  fișier  sau  în  cazul  în  care  unul dintre descriptorii de fișiere se referă la
              noduri-i speciale.

       EPERM  dest_fd este imuabil.

       ETXTBSY
              Unul dintre fișiere este un fișier swap. Fișierele swap nu pot partaja spațiul de stocare.

       EXDEV  dest_fd și src_fd nu se află pe același sistem de fișiere montat.

VERSIUNI

       Unele sisteme de fișiere pot limita cantitatea de date care pot fi deduplicate într-un singur apel.

STANDARDE

       Linux.

ISTORIC

       Linux 4.5.

       A fost cunoscută anterior sub numele de BTRFS_IOC_FILE_EXTENT_SAME și a fost privată pentru Btrfs.

NOTE

       Deoarece o operație de copiere la scriere „copy-on-write” necesită alocarea de  noi  spații  de  stocare,
       operația  fallocate(2) poate să nu partajeze blocurile partajate pentru a garanta că scrierile ulterioare
       nu vor eșua din cauza lipsei de spațiu pe disc.

CONSULTAȚI ȘI

       ioctl(2)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.8                      2 mai 2024                             ioctl_fideduperange(2)