ioctl_fideduperange(2) System Calls Manual ioctl_fideduperange(2) NUME ioctl_fideduperange - partajeaza o parte din datele unui fiier cu un alt fiier BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include /* Definiia lui FIDEDUPERANGEi a constantelor FILE_DEDUPE_* */ #include int ioctl(int src_fd, FIDEDUPERANGE, struct file_dedupe_range *arg); DESCRIERE In cazul in care un sistem de fiiere accepta fiiere care partajeaza stocarea fizica intre mai multe fiiere, aceasta operaie ioctl(2) poate fi utilizata pentru a face ca o parte din datele din fiierul src_fd sa apara in fiierul dest_fd prin partajarea stocarii subiacente daca datele din fiiere sunt identice (,,deduplicare"). Ambele fiiere trebuie sa se afle in acelai sistem de fiiere. Acest lucru reduce consumul de stocare permiand sistemului de fiiere sa stocheze o singura copie partajata a datelor. In cazul in care o regiune partajata ar trebui sa fie scrisa intr-un fiier, sistemul de fiiere trebuie sa se asigure ca modificarile raman private pentru fiierul care este scris. Acest comportament este denumit in mod obinuit ,,copiere la scriere". Acest ioctl efectueaza operaia de ,,comparare i partajare daca este identica" pe pana la src_length octei din descriptorul de fiier src_fd la poziia src_offset. Aceasta informaie este transmisa intr-o structura de urmatoarea forma: struct file_dedupe_range { ; __u64 src_length; __u16 dest_count; __u16 reserved1; __u32 reserved2; struct file_dedupe_range_info info[0]; }; Deduplicarea este atomica in ceea ce privete scrierile simultane, astfel incat nu este nevoie sa se faca niciun blocaj pentru a obine o copie deduplicata consistenta. Campurile rezerved1 i rezerved2 trebuie sa fie zero. Destinaiile pentru operaia de deduplicare sunt transmise in matricea de la sfaritul structurii. Numarul de destinaii este indicat in dest_count, iar informaiile privind destinaia sunt transmise sub urmatoarea forma: struct file_dedupe_range_info { __s64 dest_fd; __u64 dest_offset; __u64 bytes_deduped; __s32 status; __u32 reserved; }; Fiecare operaie de deduplicare vizeaza src_length octei in descriptorul de fiier dest_fd la poziia dest_offset. Campul reserved trebuie sa fie zero. In timpul apelului, src_fd trebuie sa fie deschis pentru citire, iar dest_fd trebuie sa fie deschis pentru scriere. Dimensiunea combinata a structurii matricei file_dedupe_range i a structurii matricei file_dedupe_range_info nu trebuie sa depaeasca dimensiunea paginii de sistem. Dimensiunea maxima a src_length depinde de sistemul de fiiere i este de obicei de 16 Mio. Aceasta limita va fi impusa in mod silenios de catre sistemul de fiiere. Prin convenie, spaiul de stocare utilizat de src_fd este plasat in dest_fd, iar coninutul anterior din dest_fd este eliberat. La finalizarea cu succes a acestui ioctl, numarul de octei deduplicai cu succes este returnat in bytes_deduped i un cod de stare pentru operaia de deduplicare este returnat in status. In cazul in care nici macar un singur octet din interval nu corespunde, cererea de deduplicare va fi ignorata, iar status va fi stabilit la FILE_DEDUPE_RANGE_DIFFERS. Codul status este stabilit la FILE_DEDUPE_RANGE_SAME in caz de succes, un cod de eroare negativ in caz de eroare sau FILE_DEDUPE_RANGE_DIFFERS daca datele nu se potrivesc. VALOAREA RETURNATA In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE Posibilele erori includ (dar nu se limiteaza la) urmatoarele: EBADF src_fd nu este deschis pentru citire; dest_fd nu este deschis pentru scriere sau este deschis doar pentru scriere de tip ,,doar-adaugare"; sau sistemul de fiiere pe care se afla src_fd nu accepta deduplicarea. EINVAL Sistemul de fiiere nu accepta deduplicarea intervalelor de fiiere date. Aceasta eroare poate aparea, de asemenea, daca oricare dintre descriptorii de fiiere reprezinta un dispozitiv, FIFO sau soclu. In general, sistemele de fiiere pe disc necesita ca argumentele ,,offset" i ,,length" sa fie aliniate la dimensiunea blocului fundamental. Nici Btrfs i nici XFS nu accepta suprapunerea intervalelor de deduplicare in acelai fiier. EISDIR Unul dintre fiiere este un director, iar sistemul de fiiere nu accepta regiuni partajate in directoare. ENOMEM Nucleul nu a reuit sa aloce suficienta memorie pentru a efectua operaia sau dest_count este atat de mare incat descrierea argumentului de intrare se intinde pe mai mult de o singura pagina de memorie. EOPNOTSUPP Acest lucru poate aparea in cazul in care sistemul de fiiere nu accepta deduplicarea niciunui descriptor de fiier sau in cazul in care unul dintre descriptorii de fiiere se refera la noduri-i speciale. EPERM dest_fd este imuabil. ETXTBSY Unul dintre fiiere este un fiier swap. Fiierele swap nu pot partaja spaiul de stocare. EXDEV dest_fd i src_fd nu se afla pe acelai sistem de fiiere montat. VERSIUNI Unele sisteme de fiiere pot limita cantitatea de date care pot fi deduplicate intr-un singur apel. STANDARDE Linux. ISTORIC Linux 4.5. A fost cunoscuta anterior sub numele de BTRFS_IOC_FILE_EXTENT_SAME i a fost privata pentru Btrfs. NOTE Deoarece o operaie de copiere la scriere ,,copy-on-write" necesita alocarea de noi spaii de stocare, operaia fallocate(2) poate sa nu partajeze blocurile partajate pentru a garanta ca scrierile ulterioare nu vor eua din cauza lipsei de spaiu pe disc. CONSULTAI I ioctl(2) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 ioctl_fideduperange(2)