إنشاء حلقة في نظام ملفات Linux
-
06-09-2019 - |
سؤال
كيف يمكنني إنشاء حلقة في نظام ملفات 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
يمكنك الآن إنشاء / نسخ الملفات والدلائل في صورتك الجديدة.
استمتع،
من جديد