umount(2)

الاسم
umount, umount2 - إلغاء وصل نظام الملفات

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/mount.h>

int umount(const char *target);
int umount2(const char *target, int flags);

الوصف
umount() و umount2() يزيلان تعلق (أعلى) نظام الملفات الموصول على target.

الامتياز المناسب (لينكس: القدرة CAP_SYS_ADMIN) مطلوب لإلغاء وصل أنظمة الملفات.

أضاف لينكس 2.1.116 استدعاء النظام umount2()، الذي، مثل umount()، يلغي وصل هدف، لكن يسمح بإشارات flags إضافية تتحكم في سلوك العملية:

MNT_FORCE (منذ لينكس 2.1.116)
    يطلب من نظام الملفات إحباط الطلبات المعلقة قبل محاولة إلغاء الوصل. قد يسمح هذا بإكمال إلغاء الوصل دون انتظار خادم غير قابل للوصول، لكن قد يسبب فقدان بيانات. إذا، بعد إحباط الطلبات، لا تزال بعض العمليات تحتوي على مراجع نشطة لنظام الملفات، سيفشل إلغاء الوصل. اعتبارًا من لينكس 4.12، MNT_FORCE مدعوم فقط على أنظمة الملفات التالية: 9p (منذ لينكس 2.6.16)، ceph (منذ لينكس 2.6.34)، cifs (منذ لينكس 2.6.12)، fuse (منذ لينكس 2.6.16)، lustre (منذ لينكس 3.11)، و NFS (منذ لينكس 2.1.116).

MNT_DETACH (منذ لينكس 2.4.11)
    ينفذ إلغاء وصل كسول: يجعل الوصلة غير متاحة للوصولات الجديدة، يفصل فورًا نظام الملفات وجميع أنظمة الملفات الموصولة تحته عن بعضها البعض وعن جدول الوصلات، وينفذ فعليًا إلغاء الوصل عندما تتوقف الوصلة عن الانشغال.

MNT_EXPIRE (منذ لينكس 2.6.8)
    يضع علامة على الوصلة كمنتهية الصلاحية. إذا كانت الوصلة غير مستخدمة حاليًا، فإن استدعاء أولي لـ umount2() بهذه الإشارة يفشل مع الخطأ EAGAIN، لكن يضع علامة على الوصلة كمنتهية الصلاحية. تبقى الوصلة منتهية الصلاحية طالما لم يتم الوصول إليها بواسطة أي عملية. استدعاء ثانٍ لـ umount2() يحدد MNT_EXPIRE يلغي وصل وصلة منتهية الصلاحية. لا يمكن تحديد هذه الإشارة مع MNT_FORCE أو MNT_DETACH.

UMOUNT_NOFOLLOW (منذ لينكس 2.6.34)
    لا يتبع target إذا كان رابطًا رمزيًا. تسمح هذه الإشارة بتجنب مشاكل أمنية في برامج set-user-ID-root التي تسمح للمستخدمين غير المميزين بإلغاء وصل أنظمة الملفات.

قيمة الإرجاع
عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء
قيم الخطأ الواردة أدناه ناتجة عن أخطاء مستقلة عن نوع نظام الملفات. قد يكون لكل نوع نظام ملفات أخطاؤه الخاصة وسلوكه الخاص. انظر كود مصدر نواة لينكس للتفاصيل.

EAGAIN
    استدعاء لـ umount2() يحدد MNT_EXPIRE وضع علامة بنجاح على نظام ملفات غير مشغول كمنتهي الصلاحية.

EBUSY
    لا يمكن إلغاء وصل target لأنه مشغول.

EFAULT
    يشير target إلى خارج مساحة عنوان المستخدم.

EINVAL
    target ليس نقطة وصل.

EINVAL
    target مقفل؛ انظر mount_namespaces(7).

EINVAL
    تم استدعاء umount2() مع MNT_EXPIRE وإما MNT_DETACH أو MNT_FORCE.

EINVAL (منذ لينكس 2.6.34)
    تم استدعاء umount2() بقيمة إشارة غير صالحة في flags.

ENAMETOOLONG
    كان اسم المسار أطول من MAXPATHLEN.

ENOENT
    كان اسم المسار فارغاً أو احتوى على مكون غير موجود.

ENOMEM
    لم تُخصص النواة صفحة خالية لنسخ أسماء الملفات أو البيانات إليها.

EPERM
    لا يملك المستدعي الصلاحيات المطلوبة.

المعايير
لينكس.

التاريخ
MNT_DETACH و MNT_EXPIRE متاحان منذ glibc 2.11.

تم استدعاء الدالة الأصلية umount() كـ umount(device) وكانت تعيد ENOTBLK عند استدعائها بشيء غير جهاز كتلة. في لينكس 0.98p4، تمت إضافة استدعاء umount(dir)، لدعم الأجهزة المجهولة. في لينكس 2.3.99-pre7، تمت إزالة استدعاء umount(device)، تاركًا فقط umount(dir) (لأن الأجهزة يمكن وصلها الآن في أكثر من مكان، لذا تحديد الجهاز لا يكفي).

ملاحظات

  umount() والوصلات المشتركة
تتسبب الوصلات المشتركة في إعادة توجيه أي نشاط وصل على وصلة، بما في ذلك عمليات umount()، إلى كل وصلة مشتركة في مجموعة النظراء وكل وصلة تابعة لتلك المجموعة. يعني هذا أن umount() لأي نظير في مجموعة وصلات مشتركة سيؤدي إلى إلغاء وصل جميع نظرائه وجميع توابعهم أيضًا.

يمكن أن يكون هذا الانتشار لنشاط إلغاء الوصل مفاجئًا بشكل خاص على الأنظمة حيث تكون كل وصلة مشتركة مبدئيًا. على هذه الأنظمة، وصل ربط متكرر للدليل الجذر لنظام الملفات إلى دليل فرعي ثم إلغاء وصل ذلك الدليل الفرعي لاحقًا باستخدام MNT_DETACH سيؤدي إلى إلغاء وصل كل وصلة في مساحة اسم الوصلة بشكل كسول.

لضمان عدم انتشار umount() بهذه الطريقة، يمكن إعادة وصل الوصلة باستخدام استدعاء mount(2) مع وسيطة mount_flags تتضمن كلاً من MS_REC و MS_PRIVATE قبل استدعاء umount().

انظر أيضًا
mount(2), mount_namespaces(7), path_resolution(7), mount(8), umount(8)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.