.\" -*- coding: UTF-8 -*- .\" Copyright 2002, Urs Thuermann .\" Copyright 2015, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH loop 4 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم loop، loop\-control \- أجهزة loop .SH موجز .nf #include .fi .SH الوصف جهاز loop هو جهاز كتلي يربط كتل بياناته ليس بجهاز مادي مثل القرص الصلب أو محرك الأقراص الضوئية، بل بكتل ملف عادي في نظام ملفات أو بجهاز كتلي آخر. يمكن أن يكون هذا مفيدًا على سبيل المثال لتوفير جهاز كتلي لصورة نظام ملفات مخزنة في ملف، بحيث يمكن وصلها باستخدام الأمر \fBmount\fP(8). يمكنك القيام بما يلي .P .in +4n .EX $\fB dd if=/dev/zero of=file.img bs=1MiB count=10\fP; $\fB sudo losetup /dev/loop4 file.img\fP; $\fB sudo mkfs \-t ext4 /dev/loop4\fP; $\fB sudo mkdir /myloopdev\fP; $\fB sudo mount /dev/loop4 /myloopdev\fP; .EE .in .P انظر \fBlosetup\fP(8) لمثال آخر. .P يمكن تحديد دالة نقل لكل جهاز loop لأغراض التعمية وفك التعمية. .P تُوفر عمليات \fBioctl\fP(2) التالية بواسطة جهاز loop الكتلي: .TP \fBLOOP_SET_FD\fP اربط جهاز loop بالملف المفتوح الذي وُمرر واصف ملفه كمعامل \fBioctl\fP(2) (الثالث). .TP \fBLOOP_CLR_FD\fP افصل جهاز loop عن أي واصف ملف. .TP \fBLOOP_SET_STATUS\fP اضبط حالة جهاز loop باستخدام معامل \fBioctl\fP(2) (الثالث). هذا المعامل هو مؤشر إلى بنية \fIloop_info\fP، المُعرفة في \fI\fP كالتالي: .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 قبل لينكس 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 يجب أن يكون نوع التعمية (\fIlo_encrypt_type\fP) واحدًا من \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، أو (منذ لينكس 2.6.0) \fBLO_CRYPT_CRYPTOAPI\fP. .IP حقل \fIlo_flags\fP هو قناع بتات يمكن أن يتضمن صفرًا أو أكثر مما يلي: .RS .TP \fBLO_FLAGS_READ_ONLY\fP جهاز loopback للقراءة فقط. .TP \fBLO_FLAGS_AUTOCLEAR\fP (منذ لينكس 2.6.25) .\" commit 96c5865559cee0f9cbc5173f3c949f6ce3525581 سيُدمر جهاز loopback آليًا عند آخر إغلاق. .TP \fBLO_FLAGS_PARTSCAN\fP (منذ لينكس 3.2) .\" commit e03c8dd14915fabc101aa495828d58598dc5af98 اسمح بمسح الأقسام آليًا. .TP \fBLO_FLAGS_DIRECT_IO\fP (منذ لينكس 4.10) .\" commit 2e5ab5f379f96a6207c45be40c357ebb1beb8ef3 استخدم وضع الإدخال/الإخراج المباشر للوصول إلى الملف الخلفي. .RE .IP أعلام \fIlo_flags\fP الوحيدة التي يمكن تعديلها بواسطة \fBLOOP_SET_STATUS\fP هي \fBLO_FLAGS_AUTOCLEAR\fP و \fBLO_FLAGS_PARTSCAN\fP. .TP \fBLOOP_GET_STATUS\fP اجلب حالة جهاز loop. يجب أن يكون معامل \fBioctl\fP(2) (الثالث) مؤشرًا إلى \fIstruct loop_info\fP. .TP \fBLOOP_CHANGE_FD\fP (منذ لينكس 2.6.5) حول المخزن الخلفي لجهاز loop إلى واصف الملف الجديد المحدد في معامل \fBioctl\fP(2) (الثالث)، والذي هو عدد صحيح. هذه العملية ممكنة فقط إذا كان جهاز loop للقراءة فقط وكان المخزن الخلفي الجديد بنفس الحجم والنوع للمخزن الخلفي القديم. .TP \fBLOOP_SET_CAPACITY\fP (منذ لينكس 2.6.30) .\" commit 53d6660836f233df66490707365ab177e5fb2bb4 غير حجم جهاز loop نشط. يمكن للمرء تغيير حجم المخزن الخلفي الأساسي ثم استخدام هذه العملية ليعرف مشغل loop الحجم الجديد. لا تأخذ هذه العملية أي معامل. .TP \fBLOOP_SET_DIRECT_IO\fP (منذ لينكس 4.10) .\" commit ab1cb278bc7027663adbfb0b81404f8398437e11 اضبط وضع الإدخال/الإخراج المباشر (DIRECT I/O) على جهاز loop، ليُستخدم لفتح الملف الخلفي. معامل \fBioctl\fP(2) (الثالث) هو قيمة طويلة غير موقعة. تمثل القيمة غير الصفرية وضع الإدخال/الإخراج المباشر. .TP \fBLOOP_SET_BLOCK_SIZE\fP (منذ لينكس 4.14) .\" commit 89e4fdecb51cf5535867026274bc97de9480ade5 اضبط حجم الكتلة لجهاز loop. معامل \fBioctl\fP(2) (الثالث) هو قيمة طويلة غير موقعة. يجب أن تكون هذه القيمة من قوى العدد اثنين في النطاق [512,pagesize]؛ وإلا، ستنتج خطأ \fBEINVAL\fP. .TP \fBLOOP_CONFIGURE\fP (منذ لينكس 5.8) .\" commit 3448914e8cc550ba792d4ccc74471d1ca4293aae أعدّ واضبط جميع معاملات جهاز loop في خطوة واحدة باستخدام معامل \fBioctl\fP(2) (الثالث). هذا المعامل هو مؤشر إلى بنية \fIloop_config\fP، المُعرفة في \fI\fP كالتالي: .IP .in +4n .EX struct loop_config { __u32 fd; __u32 block_size; struct loop_info64 info; __u64 __reserved[8]; }; .EE .in .IP بالإضافة إلى ما يمكن لـ \fBLOOP_SET_STATUS\fP فعله، يمكن استخدام \fBLOOP_CONFIGURE\fP أيضًا للقيام بما يلي: .RS .IP \[bu] 3 ضبط حجم الكتلة الصحيح فورًا عن طريق ضبط \fIloop_config.block_size\fP؛ .IP \[bu] طلب وضع الإدخال/الإخراج المباشر صراحةً عن طريق ضبط \fBLO_FLAGS_DIRECT_IO\fP في \fIloop_config.info.lo_flags\fP؛ و .IP \[bu] طلب وضع القراءة فقط صراحةً عن طريق ضبط \fBLO_FLAGS_READ_ONLY\fP في \fIloop_config.info.lo_flags\fP. .RE .P منذ لينكس 2.6، توجد عمليتا \fBioctl\fP(2) جديدتان: .TP \fBLOOP_SET_STATUS64\fP .TQ \fBLOOP_GET_STATUS64\fP هاتان العمليتان مشابهتان لـ \fBLOOP_SET_STATUS\fP و \fBLOOP_GET_STATUS\fP الموضحتين أعلاه ولكنهما تستخدمان بنية \fIloop_info64\fP، التي تحتوي على بعض الحقول الإضافية ونطاق أكبر لبعض الحقول الأخرى: .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; /* بايت، 0 == أقصى متاح */ 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 قبل لينكس 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 منذ لينكس 3.1، تُوفر النواة جهاز \fI/dev/loop\-control\fP، الذي يسمح للتطبيق بالعثور ديناميكيًا على جهاز حر، وإضافة أجهزة loop وإزالتها من النظام. للقيام بهذه العمليات، يفتح المرء أولاً \fI/dev/loop\-control\fP ثم يستخدم إحدى عمليات \fBioctl\fP(2) التالية: .TP \fBLOOP_CTL_GET_FREE\fP خصص أو اعثر على جهاز loop حر للاستخدام. عند النجاح، يُعاد رقم الجهاز كنتيجة للاستدعاء. لا تأخذ هذه العملية أي معامل. .TP \fBLOOP_CTL_ADD\fP أضف جهاز loop جديد رقم جهازه محدد كعدد صحيح طويل في معامل \fBioctl\fP(2) الثالث. عند النجاح، يُعاد فهرس الجهاز كنتيجة للاستدعاء. إذا كان الجهاز مخصصًا بالفعل، يفشل الاستدعاء بالخطأ \fBEEXIST\fP. .TP \fBLOOP_CTL_REMOVE\fP أزل جهاز loop الذي رقم جهازه محدد كعدد صحيح طويل في معامل \fBioctl\fP(2) الثالث. عند النجاح، يُعاد رقم الجهاز كنتيجة للاستدعاء. إذا كان الجهاز قيد الاستخدام، يفشل الاستدعاء بالخطأ \fBEBUSY\fP. .SH الملفات .TP \fI/dev/loop*\fP ملفات أجهزة loop الكتلية الخاصة. .SH أمثلة يستخدم البرنامج أدناه جهاز \fI/dev/loop\-control\fP للعثور على جهاز loop حر، ويفتح جهاز loop، ويفتح ملفًا ليُستخدم كمخزن أساسي للجهاز، ثم يربط جهاز loop بالمخزن الخلفي. توضح جلسة الصدفة التالية استخدام البرنامج: .P .in +4n .EX $\fB dd if=/dev/zero of=file.img bs=1MiB count=10\fP; 10+0 سجلات للداخل 10+0 سجلات للخارج 10485760 بايت (10 ميجابايت) نُسخت، 0.00609385 ثانية، 1.7 جيجابايت/ثانية $\fB sudo ./mnt_loop file.img\fP; loopname = /dev/loop5 .EE .in .SS "مصدر البرنامج" \& .EX #include #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int loopctlfd, loopfd, backingfile; long devnr; char loopname[4096]; \& if (argc != 2) { fprintf(stderr, "الاستخدام: %s backing\-file\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& loopctlfd = open("/dev/loop\-control", O_RDWR); if (loopctlfd == \-1) err(EXIT_FAILURE, "فتح: /dev/loop\-control"); \& devnr = ioctl(loopctlfd, LOOP_CTL_GET_FREE); if (devnr == \-1) err(EXIT_FAILURE, "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) err(EXIT_FAILURE, "فتح: loopname"); \& backingfile = open(argv[1], O_RDWR); if (backingfile == \-1) err(EXIT_FAILURE, "فتح: backing\-file"); \& if (ioctl(loopfd, LOOP_SET_FD, backingfile) == \-1) err(EXIT_FAILURE, "ioctl\-LOOP_SET_FD"); \& exit(EXIT_SUCCESS); } .EE .SH "انظر أيضًا" \fBlosetup\fP(8)، \fBmount\fP(8) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .