.\" -*- coding: UTF-8 -*- .\" Copyright 2002 Urs Thuermann (urs@isnogud.escape.de) .\" and Copyright 2015 Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH loop 4 "15 iunie 2024" "Pagini de manual de Linux 6.12" .SH NUME loop, loop\-control \- dispozitive de buclă .SH SINOPSIS .nf #include .fi .SH DESCRIERE Dispozitivul de buclă este un dispozitiv de blocuri care cartografiază blocurile sale de date nu la un dispozitiv fizic, cum ar fi un disc dur sau o unitate de disc optic, ci la blocurile unui fișier obișnuit dintr\-un sistem de fișiere sau la un alt dispozitiv de blocuri. Acest lucru poate fi util, de exemplu, pentru a furniza un dispozitiv de blocuri pentru o imagine a sistemului de fișiere stocată într\-un fișier, astfel încât acesta să poată fi montat cu comanda \fBmount\fP(8). Ați putea face .P .in +4n .EX $ \fBdd if=/dev/zero of=file.img bs=1MiB count=10\fP $ \fBsudo losetup /dev/loop4 file.img\fP $ \fBsudo mkfs \-t ext4 /dev/loop4\fP $ \fBsudo mkdir /myloopdev\fP $ \fBsudo mount /dev/loop4 /myloopdev\fP .EE .in .P Vedeți \fBlosetup\fP(8) pentru un alt exemplu. .P O funcție de transfer poate fi specificată pentru fiecare dispozitiv de buclă în scopul criptării și decriptării. .P Următoarele operații \fBioctl\fP(2) sunt furnizate de dispozitivul de blocuri al buclei: .TP \fBLOOP_SET_FD\fP Asociază dispozitivul buclei cu fișierul deschis al cărui descriptor de fișier este pasat ca (al treilea) argument al \fBioctl\fP(2). .TP \fBLOOP_CLR_FD\fP Dezasociază dispozitivul buclei de orice descriptor de fișier. .TP \fBLOOP_SET_STATUS\fP Stabilește starea dispozitivului buclei utilizând (al treilea) argument al \fBioctl\fP(2). Acest argument este un indicator către o structură \fIloop_info\fP, definită în \fI\fP ca: .IP .in +4n .EX struct loop_info { int lo_number; /* ioctl r/o */ dev_t lo_device; /* ioctl r/o */ unsigned long lo_inode; /* ioctl r/o */ dev_t lo_rdevice; /* ioctl r/o */ int lo_offset; int lo_encrypt_type; int lo_encrypt_key_size; /* ioctl w/o */ int lo_flags; /* ioctl r/w (r/o înainte de Linux 2.6.25) */ char lo_name[LO_NAME_SIZE]; unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ unsigned long lo_init[2]; char reserved[4]; }; .EE .in .IP Tipul de criptare (\fIlo_encrypt_type\fP) trebuie să fie unul dintre \fBLO_CRYPT_NONE\fP, \fBLO_CRYPT_XOR\fP, \fBLO_CRYPT_DES\fP, \fBLO_CRYPT_FISH2\fP, \fBLO_CRYPT_BLOW\fP, \fBLO_CRYPT_CAST128\fP, \fBLO_CRYPT_IDEA\fP, \fBLO_CRYPT_DUMMY\fP, \fBLO_CRYPT_SKIPJACK\fP sau ( începând cu Linux 2. 6.0) \fBLO_CRYPT_CRYPTOAPI\fP. .IP Câmpul \fIlo_flags\fP este o mască de biți care poate include niciuna sau mai multe dintre următoarele: .RS .TP \fBLO_FLAGS_READ_ONLY\fP Dispozitivul de buclă este numa\-pentru\-citire. .TP \fBLO_FLAGS_AUTOCLEAR\fP (începând cu Linux 2.6.25) .\" commit 96c5865559cee0f9cbc5173f3c949f6ce3525581 Dispozitivul de buclă se va autodistruge la ultima închidere. .TP \fBLO_FLAGS_PARTSCAN\fP (începând cu Linux 3.2) .\" commit e03c8dd14915fabc101aa495828d58598dc5af98 Permite scanarea automată a partițiilor. .TP \fBLO_FLAGS_DIRECT_IO\fP (începând cu Linux 4.10) .\" commit 2e5ab5f379f96a6207c45be40c357ebb1beb8ef3 Utilizează modul In/Ieș direct pentru a accesa fișierul de susținere. .RE .IP Singurele \fIlo_flags\fP care pot fi modificate de \fBLOOP_SET_STATUS\fP sunt \fBLO_FLAGS_AUTOCLEAR\fP și \fBLO_FLAGS_PARTSCAN\fP. .TP \fBLOOP_GET_STATUS\fP Obține starea dispozitivului buclei. Argumentul (al treilea) al \fBioctl\fP(2) trebuie să fie un indicator către o structură \fIstruct loop_info\fP. .TP \fBLOOP_CHANGE_FD\fP (începând cu Linux 2.6.5) Comută stocarea de susținere a dispozitivului de buclă la noul descriptor de fișier identificat în fișierul specificat în (al treilea) argument al \fBioctl\fP(2), care este un număr întreg. Această operație este posibilă numai în cazul în care dispozitivul de buclă este numai pentru citire, iar noua stocare de susținere are aceeași dimensiune și același tip ca vechea stocare de susținere. .TP \fBLOOP_SET_CAPACITY\fP (începând cu Linux 2.6.30) .\" commit 53d6660836f233df66490707365ab177e5fb2bb4 Redimensionează un dispozitiv de buclă activ. Se poate modifica dimensiunea stocării de susținere subiacente și apoi se poate utiliza această operație astfel încât controlorul buclei să afle despre noua dimensiune. Această operație nu are niciun argument. .TP \fBLOOP_SET_DIRECT_IO\fP (începând cu Linux 4.10) .\" commit ab1cb278bc7027663adbfb0b81404f8398437e11 Stabilește modul de In/Ieș DIRECT pe dispozitivul de buclă, astfel încât acesta să poată fi utilizat pentru a deschide fișierul de susținere. Al (treilea) argument al \fBioctl\fP(2) este o valoare lungă fără semn. O valoare diferită de zero reprezintă modul de In/Ieș direct. .TP \fBLOOP_SET_BLOCK_SIZE\fP (începând cu Linux 4.14) .\" commit 89e4fdecb51cf5535867026274bc97de9480ade5 Stabilește dimensiunea blocului dispozitivului buclei. Al (treilea) argument al \fBioctl\fP(2) este o valoare lungă fără semn. Această valoare trebuie să fie o putere de doi în intervalul [512,dimensiune\-pagină]; în caz contrar, rezultă o eroare \fBEINVAL\fP. .TP \fBLOOP_CONFIGURE\fP (începând cu Linux 5.8) .\" commit 3448914e8cc550ba792d4ccc74471d1ca4293aae Stabilește și configurează toți parametrii dispozitivului buclei într\-un singur pas utilizând argumentul (al treilea) al \fBioctl\fP(2). Acest argument este un indicator către o structură \fIloop_config\fP, definită în \fI\fP ca: .IP .in +4n .EX struct loop_config { __u32 fd; __u32 block_size; struct loop_info64 info; __u64 __reserved[8]; }; .EE .in .IP În plus față de ceea ce poate face \fBLOOP_SET_STATUS\fP, \fBLOOP_CONFIGURE\fP poate fi utilizat și pentru a face următoarele: .RS .IP \[bu] 3 stabilește imediat dimensiunea corectă a blocului prin parametrul \fIloop_config.block_size\fP; .IP \[bu] solicită în mod explicit modul de I/O direct prin definirea \fBLO_FLAGS_DIRECT_IO\fP în \fIloop_config.info.lo_flags\fP; și .IP \[bu] solicită în mod explicit modul numai\-citire prin definirea \fBLO_FLAGS_READ_ONLY\fP în \fIloop_config.info.lo_flags\fP. .RE .P Începând cu Linux 2.6, există două noi operații \fBioctl\fP(2): .TP \fBLOOP_SET_STATUS64\fP .TQ \fBLOOP_GET_STATUS64\fP Acestea sunt similare cu \fBLOOP_SET_STATUS\fP și \fBLOOP_GET_STATUS\fP descrise mai sus, dar utilizează structura \fIloop_info64\fP, care are câteva câmpuri suplimentare și un interval mai mare pentru alte câmpuri: .IP .in +4n .EX struct loop_info64 { uint64_t lo_device; /* ioctl r/o */ uint64_t lo_inode; /* ioctl r/o */ uint64_t lo_rdevice; /* ioctl r/o */ uint64_t lo_offset; uint64_t lo_sizelimit; /* octeți, 0 == maxim disponibil */ uint32_t lo_number; /* ioctl r/o */ uint32_t lo_encrypt_type; uint32_t lo_encrypt_key_size; /* ioctl w/o */ uint32_t lo_flags; i /* ioctl r/w (r/o înainte de Linux 2.6.25) */ uint8_t lo_file_name[LO_NAME_SIZE]; uint8_t lo_crypt_name[LO_NAME_SIZE]; uint8_t lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ uint64_t lo_init[2]; }; .EE .in .SS /dev/loop\-control .\" commit 770fe30a46a12b6fb6b63fbe1737654d28e84844 Începând cu Linux 3.1, nucleul oferă dispozitivul \fI/dev/loop\-control\fP, care permite unei aplicații să găsească în mod dinamic un dispozitiv liber și să adauge și să elimine dispozitive de buclă din sistem. Pentru a efectua aceste operații, se deschide mai întâi \fI/dev/loop\-control\fP și apoi se utilizează una dintre următoarele operații \fBioctl\fP(2): .TP \fBLOOP_CTL_GET_FREE\fP Alocă sau găsește un dispozitiv de buclă liber pentru utilizare. În caz de succes, numărul dispozitivului este returnat ca rezultat al apelului. Această operație nu are niciun argument. .TP \fBLOOP_CTL_ADD\fP Adaugă noul dispozitiv de buclă al cărui număr de dispozitiv este specificat ca număr întreg lung în al treilea argument al \fBioctl\fP(2). În caz de succes, indicele dispozitivului este returnat ca rezultat al apelului. Dacă dispozitivul este deja alocat, apelul eșuează cu eroarea \fBEEXIST\fP. .TP \fBLOOP_CTL_REMOVE\fP Elimină dispozitivul buclei al cărui număr de dispozitiv este specificat ca număr întreg lung în al treilea argument al \fBioctl\fP(2). În caz de succes, numărul dispozitivului este returnat ca rezultat al apelului. Dacă dispozitivul este în uz, apelul eșuează cu eroarea \fBEBUSY\fP. .SH FIȘIERE .TP \fI/dev/loop*\fP Fișierele dispozitivelor speciale de blocuri ai buclei. .SH EXEMPLE Programul de mai jos utilizează dispozitivul \fI/dev/loop\-control\fP pentru a găsi un dispozitiv de buclă liber, deschide dispozitivul de buclă, deschide un fișier care să fie utilizat ca spațiu de stocare de bază pentru dispozitiv și apoi asociază dispozitivul de buclă cu spațiul de stocare de bază. Următoarea sesiune shell demonstrează utilizarea programului: .P .in +4n .EX $ \fBdd if=/dev/zero of=file.img bs=1MiB count=10\fP 10+0 înregistrări in 10+0 înregistrări out 10485760 octeți (10 Mo) copiați, 0.00609385 s, 1.7 Go/s $ \fBsudo ./mnt_loop fișier.img\fP loopname = /dev/loop5 .EE .in .SS "Sursa programului" \& .EX #include #include #include #include #include #include \& #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \[rs] } while (0) \& int main(int argc, char *argv[]) { int loopctlfd, loopfd, backingfile; long devnr; char loopname[4096]; \& if (argc != 2) { fprintf(stderr, "Utilizare: %s fișier\-susținere\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& loopctlfd = open("/dev/loop\-control", O_RDWR); if (loopctlfd == \-1) errExit("open: /dev/loop\-control"); \& devnr = ioctl(loopctlfd, LOOP_CTL_GET_FREE); if (devnr == \-1) errExit("ioctl\-LOOP_CTL_GET_FREE"); \& sprintf(loopname, "/dev/loop%ld", devnr); printf("loopname = %s\[rs]n", loopname); \& loopfd = open(loopname, O_RDWR); if (loopfd == \-1) errExit("open: loopname"); \& backingfile = open(argv[1], O_RDWR); if (backingfile == \-1) errExit("open: fișier\-susținere"); \& if (ioctl(loopfd, LOOP_SET_FD, backingfile) == \-1) errExit("ioctl\-LOOP_SET_FD"); \& exit(EXIT_SUCCESS); } .EE .SH "CONSULTAȚI ȘI" \fBlosetup\fP(8), \fBmount\fP(8) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .