سؤال

كيف يمكنني إنشاء حلقة في نظام ملفات Linux؟ أريد أن كسر خاصية الرسم البياني الموجه ACYCLIC (DAG) لنظام ملفات Linux. هل هذا ممكن؟ لقد رأيت هذه الحالة مرة واحدة عندما قمت بتثبيت مترجم الصليب المركب على Ubuntu.

أنا لا أعرف كيفية إعادة إنتاجها الآن.

هل كانت مفيدة؟

المحلول

أجاب بعض المستجيبين الآخرين بالفعل كيفية إعداد تثبيت باستخدام جهاز الاسترجاع، لكنك سئلت على وجه التحديد عن bind يتصاعد، وهو مختلف قليلا. إذا كنت ترغب في استخدام جبل BIND، فحدد فقط --bind في الأمر جبل. علي سبيل المثال:

mount --bind /original/path /new/path

هذا سيجعل موقع النظام يمكن الوصول إليه في /original/path أيضا يمكن الوصول إليها من خلال /new/path. وبعد لاحظ أن هذا سوف ليس بعد نقاط الجدة! على سبيل المثال، افترض أن لدي نقاط التحضير التالية:

/something
/something/underneath/that

الآن لنفترض أنني صنع bind جبل ل /something:

mount --bind /something /new_something

سأكون قادرا على الوصول إلى الملفات مثل /something/myfile عبر المسار /new_something/myfile. وبعد لكن سأفعل ليس تكون قادرة على الوصول إلى الملفات مثل /something/underneath/that/otherfile عبر المسار /new_something/underneath/that/otherfile. وبعد يجب عليك إعداد منفصلة bind جبل لكل نظام ملفات؛ أو إذا كان لديك kernel جديد نسبيا، يمكنك استخدام rbind يتصاعد، والتي فعل اتبع نقاط الجبل:

mount --rbind /something /new_something

تحذير واحد حول rbind يتصاعد: أنها لا تتعامل مع القضية حيث يتم تثبيت نظام الملفات بعد rbind ينصب. وهذا هو، لنفترض أن لدي جبل مثل هذا:

/something

ثم قمت بإعداد بلدي rbind على النحو الوارد أعلاه، و ومن بعد أنا جبل /something/underneath/that: ال rbind لن تجعل جبل جديد مرئيا من خلال rbind موقعك. كن على علم أيضا بأنه بسبب خطأ في النواة، لا يمكنك إلغاء تحميل rbind تتعدد.

أيضا، فقط في حالة المقصود "كيف أقوم بإعداد ربط الربط باستخدام مكالمة نظام Mount (2)؟": يجب عليك تحديد MS_BIND العلم (المعرفة في mount.h) عندما تتصل mount(2) من أجل العادية bind تتعدد. ل rbind جبل، يجب أن تحدد MS_BIND وغير وثيقة MS_REC العلم (المعرفة في linux/fs.h).

امل ان يساعد،

إريك مولكي

نصائح أخرى

يبدو أن جميع الإجابات حتى الآن حول التركيب على أجهزة الاسترجاع، وعدم إنشاء حلقة باستخدام ربط يتصاعد.

كما قد اكتشفت،

$ mkdir -p test/test
$ mount --bind test test/test

فقط يسمح لك بالوصول test/test/test, وليس أبعد من ذلك. ليس حتى

$ mount --rbind test test/test

يعمل، لأن جبل الربط العريض يمر بفعالية من خلال العثور على تصاعد موجود على المصدر وربطها في الهدف.

ما طلبته غير ممكن، لأن الربط يتصاعد لا تعبر نقاط الجبل. إذا كنت ترغب حقا في محاكاة حلقة نظام الملفات، فحاول استخدام جبل Bindo-Bind localfs.. وبعد لم أحاول نفسي، قد يحبس عند محاولة قراءة نظام ملفات يتم توفيره بمفرده. الآن فقط، حاولت تصدير شجرة NFS مع crossmnt وتركيبها تحت نفسها، لكنها تفشل لأسباب مماثلة.

mount /path/to/device /path/to/mount/location -o loop

حيث / المسار / إلى / الجهاز هو المسار إلى القسم الذي تريد تثبيته، أو المسار إلى صورة القرص، و / مسار / إلى / mount / الموقع هو المسار إلى المجلد الذي تريد تحميل الجهاز / الصورة تحت

قد تحتاج أيضا إلى تضمين نوع نظام الملفات مثل هذا (الذي يستخدم FAT16 / FAT32):

mount /path/to/device /path/to/mount/location -o loop -t vfat

قد ترغب أيضا في إنشاء واحدة من نقطة الصفر:

أولا إنشاء ملف الصورة وتهيئة ذلك

dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE

بعد ذلك، اجعله قسما صالحا باستخدام نوع FS من اختيارك

mkfs.ext3 -F /tmp/loop.img

جبل صورتك الجديدة

mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop

يمكنك الآن إنشاء / نسخ الملفات والدلائل في صورتك الجديدة.

استمتع،

من جديد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top