“ ภูเขาผูก” คืออะไร? ฉันจะสร้างได้อย่างไร มันดีสำหรับอะไร?
ฉันได้รับคำสั่งให้ใช้ตัวยึดสำหรับบางอย่าง แต่ฉันไม่เข้าใจว่ามันคืออะไรหรือใช้อย่างไร
“ ภูเขาผูก” คืออะไร? ฉันจะสร้างได้อย่างไร มันดีสำหรับอะไร?
ฉันได้รับคำสั่งให้ใช้ตัวยึดสำหรับบางอย่าง แต่ฉันไม่เข้าใจว่ามันคืออะไรหรือใช้อย่างไร
คำตอบ:
การเชื่อมต่อเมาท์คือมุมมองทางเลือกของแผนผังไดเร็กทอรี การติดตั้งแบบคลาสสิกจะสร้างมุมมองของอุปกรณ์จัดเก็บข้อมูลเป็นแผนผังต้นไม้ การเชื่อมต่อเมานท์จะใช้แผนผังไดเรกทอรีที่มีอยู่แล้วทำซ้ำภายใต้จุดที่ต่างออกไป ไดเร็กทอรีและไฟล์ในการเชื่อมต่อ bind จะเหมือนกับของเดิม การแก้ไขใด ๆ ในด้านใดด้านหนึ่งจะปรากฏขึ้นอีกด้านทันทีเนื่องจากทั้งสองมุมมองแสดงข้อมูลเดียวกัน
ตัวอย่างเช่นหลังจากออกคำสั่ง Linux
mount --bind /some/where /else/where
ไดเรกทอรี/some/where
และ/else/where
มีเนื้อหาเดียวกัน
ซึ่งแตกต่างจากฮาร์ดลิงก์หรือลิงก์สัญลักษณ์การเชื่อมโยงไม่มีผลกับสิ่งที่เก็บไว้ในระบบไฟล์ มันเป็นคุณสมบัติของระบบถ่ายทอดสด
bindfs
ระบบแฟ้มเป็นFUSEระบบแฟ้มที่สร้างมุมมองของต้นไม้ไดเรกทอรี ตัวอย่างเช่นคำสั่ง
bindfs /some/where /else/where
ทำให้/else/where
จุดเมานต์ซึ่งเนื้อหาของ/some/where
สามารถมองเห็นได้
เนื่องจาก bindfs เป็นระบบไฟล์แยกต่างหากไฟล์/some/where/foo
และ/else/where/foo
ปรากฏเป็นไฟล์ที่แตกต่างกันสำหรับแอปพลิเคชัน (ระบบไฟล์ bindfs มีst_dev
ค่าของตัวเอง) การเปลี่ยนแปลงในด้านใดด้านหนึ่งคือ“ อย่างน่าอัศจรรย์” ที่ปรากฎที่อีกด้านหนึ่ง แต่ความจริงที่ว่าไฟล์นั้นเหมือนกันนั้นจะปรากฏต่อเมื่อรู้ว่า bindfs ทำงานอย่างไร
Bindfs มีความรู้ในจุดเชื่อมต่อไม่ได้ดังนั้นหากมีจุดเชื่อมต่อภายใต้ก็จะปรากฏเป็นเพียงไดเรกทอรีอื่นภายใต้/some/where
/else/where
การติดตั้งหรือถอนการติดตั้งระบบไฟล์ใต้/some/where
จะปรากฏขึ้นภายใต้/else/where
การเปลี่ยนแปลงของไดเรกทอรีที่เกี่ยวข้อง
Bindfs สามารถแก้ไขข้อมูลเมตาของไฟล์บางส่วน: มันสามารถแสดงสิทธิ์ปลอมและความเป็นเจ้าของไฟล์ ดูคู่มือสำหรับรายละเอียดและดูตัวอย่างด้านล่าง
ระบบไฟล์ bindfs สามารถติดตั้งได้ในฐานะผู้ใช้ที่ไม่ใช่รูทคุณต้องมีสิทธิ์ในการเมานต์ระบบไฟล์ FUSE เท่านั้น ขึ้นอยู่กับการกระจายของคุณสิ่งนี้อาจต้องอยู่ในfuse
กลุ่มหรือได้รับอนุญาตจากผู้ใช้ทุกคน ในการเลิกเมานท์ระบบไฟล์ FUSE ให้ใช้fusermount -u
แทนumount
เช่น
fusermount -u /else/where
FreeBSD จัดเตรียมnullfs
ระบบไฟล์ซึ่งสร้างมุมมองทางเลือกของระบบไฟล์ คำสั่งสองคำสั่งต่อไปนี้เทียบเท่ากัน:
mount -t nullfs /some/where /else/where
mount_nullfs /some/where /else/where
หลังจากออกคำสั่งอย่างใดอย่างหนึ่ง/else/where
จะกลายเป็นจุดเชื่อมต่อที่/some/where
มองเห็นเนื้อหา
เนื่องจาก nullfs เป็นระบบไฟล์แยกต่างหากไฟล์/some/where/foo
และ/else/where/foo
ปรากฏเป็นไฟล์ที่แตกต่างกันสำหรับแอปพลิเคชัน (ระบบไฟล์ nullfs มีst_dev
ค่าของตัวเอง) การเปลี่ยนแปลงในด้านใดด้านหนึ่งคือ“ อย่างน่าอัศจรรย์” ที่ปรากฎที่อีกด้านหนึ่ง แต่ความจริงที่ว่าไฟล์นั้นเหมือนกันจะปรากฏให้เห็นก็ต่อเมื่อมีใครรู้ว่า nullfs ทำงานอย่างไร
ซึ่งแตกต่างจาก bindfs FUSE ซึ่งทำหน้าที่ในระดับของต้นไม้ไดเรกทอรี nullfs ของ FreeBSD ทำหน้าที่ลึกใน kernel ดังนั้นจุดเมาภายใต้/else/where
ไม่สามารถมองเห็นเพียงต้นไม้ที่เป็นส่วนหนึ่งของการติดจุดเดียวกับที่จะสะท้อนให้เห็นภายใต้/some/where
/else/where
ระบบไฟล์ nullfs อาจใช้งานได้ภายใต้ตัวแปร BSD อื่น ๆ (OS X, OpenBSD, NetBSD) แต่ไม่ได้รวบรวมเป็นส่วนหนึ่งของระบบเริ่มต้น
ภายใต้ Linux, การเชื่อมต่อ bind จะพร้อมใช้งานเป็นคุณลักษณะเคอร์เนล คุณสามารถสร้างได้ด้วยmount
คำสั่งโดยผ่าน--bind
ตัวเลือกบรรทัดคำสั่งหรือbind
ตัวเลือกเมา คำสั่งสองคำสั่งต่อไปนี้เทียบเท่ากัน:
mount --bind /some/where /else/where
mount -o bind /some/where /else/where
ที่นี่“ อุปกรณ์” /some/where
ไม่ใช่พาร์ติชั่นดิสก์เหมือนในกรณีของระบบไฟล์บนดิสก์ แต่เป็นไดเรกทอรีที่มีอยู่ จุดเมานท์/else/where
ต้องเป็นไดเรกทอรีที่มีอยู่ตามปกติ โปรดทราบว่าไม่มีการระบุประเภทระบบไฟล์ด้วยวิธีใดวิธีหนึ่ง: การสร้างการเชื่อมโยงไม่เกี่ยวข้องกับไดรเวอร์ระบบไฟล์ แต่จะคัดลอกโครงสร้างข้อมูลเคอร์เนลจากการเมาท์ดั้งเดิม
mount --bind
ยังสนับสนุนการเมาท์ไดเร็กทอรีที่ไม่ใช่ไดเร็กทอรี: /some/where
สามารถเป็นไฟล์ปกติ (ซึ่งในกรณีนี้/else/where
จำเป็นต้องเป็นไฟล์ปกติด้วย)
Linux bind mount นั้นส่วนใหญ่แยกไม่ออกจากต้นฉบับ คำสั่งdf -T /else/where
แสดงอุปกรณ์เดียวกันและระบบไฟล์ชนิดdf -T /some/where
เดียวกัน ไฟล์/some/where/foo
และ/else/where/foo
แยกไม่ออกราวกับว่าพวกเขามีการเชื่อมโยงอย่างหนัก เป็นไปได้ที่จะยกเลิกการต่อเชื่อม/some/where
ซึ่งในกรณีนี้/else/where
ยังคงติดตั้งอยู่
ด้วยเมล็ดที่เก่ากว่า (ฉันไม่รู้ว่าเมื่อไหร่ฉันคิดว่าจนถึง 3.x) การผูกภูเขาจะแยกไม่ออกจากต้นฉบับ เคอร์เนลล่าสุดจะติดตามการเมานต์ bind และเปิดเผยข้อมูลผ่าน PID / mountinfo ซึ่งอนุญาตให้findmnt
ระบุการเชื่อม bind เช่นนี้
คุณสามารถใส่รายการเชื่อมโยงเมาท์/etc/fstab
ได้ เพียงรวมbind
(หรือrbind
อื่น ๆ ) ในตัวเลือกพร้อมกับตัวเลือกอื่น ๆ ที่คุณต้องการ "อุปกรณ์" เป็นต้นไม้ที่มีอยู่ คอลัมน์ระบบไฟล์สามารถมีnone
หรือbind
(มันถูกละเว้น แต่การใช้ชื่อระบบไฟล์อาจสร้างความสับสน) ตัวอย่างเช่น:
/some/where /readonly/view none bind,ro
หากมีจุดเมาภายใต้เนื้อหาของพวกเขาจะไม่สามารถมองเห็นภายใต้/some/where
/else/where
แทนที่จะbind
คุณสามารถใช้ยังทำซ้ำจุดเชื่อมใต้rbind
/some/where
ตัวอย่างเช่นถ้า/some/where/mnt
เป็นจุดเมานต์แล้ว
mount --rbind /some/where /else/where
เทียบเท่ากับ
mount --bind /some/where /else/where
mount --bind /some/where/mnt /else/where/mnt
นอกจากนี้ยังช่วยให้ลินุกซ์เมาท์จะได้รับการประกาศให้เป็นที่ใช้ร่วมกัน , ทาส , ส่วนตัวหรือunbindable สิ่งนี้มีผลต่อการดำเนินการเมานต์นั้นจะสะท้อนภายใต้การเชื่อมต่อแบบเชื่อมที่ทำซ้ำจุดเมานท์ สำหรับรายละเอียดเพิ่มเติมโปรดดูที่เอกสาร kernel
ลินุกซ์ยังให้วิธีการย้ายเมานท์: ที่--bind
คัดลอก--move
ย้ายจุดเมานท์
เป็นไปได้ที่จะมีตัวเลือกการเมานต์ที่แตกต่างกันในสองไดเรคทอรี่ที่ผูกเข้าด้วยกัน อย่างไรก็ตามมีการเล่นโวหาร: การทำให้การผูกติดตั้งและการตั้งค่าตัวเลือกการเมานต์ไม่สามารถทำได้แบบอะตอมมิกพวกเขาต้องดำเนินการต่อเนื่องสองครั้ง (เคอร์เนลที่เก่ากว่าไม่อนุญาตสิ่งนี้) ตัวอย่างเช่นคำสั่งต่อไปนี้สร้างมุมมองแบบอ่านอย่างเดียว แต่มีหน้าต่างเล็ก ๆ ของเวลาในระหว่างที่/else/where
อ่าน - เขียน:
mount --bind /some/where /else/where
mount -o remount,ro,bind /else/where
หากระบบของคุณไม่รองรับ FUSE กลอุบายแบบคลาสสิกเพื่อให้ได้ผลเหมือนกันคือการเรียกใช้เซิร์ฟเวอร์ NFS ให้ทำการส่งออกไฟล์ที่คุณต้องการแสดง (อนุญาตการเข้าถึงlocalhost
) และติดตั้งบนเครื่องเดียวกัน สิ่งนี้มีค่าใช้จ่ายที่สำคัญในแง่ของหน่วยความจำและประสิทธิภาพดังนั้นการเชื่อมต่อแบบผูกจึงมีข้อได้เปรียบแน่นอนหากมี (ซึ่งอยู่ในรุ่น Unix ส่วนใหญ่ต้องขอบคุณ FUSE)
มันจะมีประโยชน์ในการสร้างมุมมองแบบอ่านอย่างเดียวของระบบไฟล์ไม่ว่าจะด้วยเหตุผลด้านความปลอดภัยหรือเป็นเลเยอร์ความปลอดภัยเพื่อให้แน่ใจว่าคุณจะไม่แก้ไขมันโดยไม่ตั้งใจ
ด้วย bindfs:
bindfs -r /some/where /mnt/readonly
ด้วย Linux วิธีง่ายๆ:
mount --bind /some/where /mnt/readonly
mount -o remount,ro,bind /mnt/readonly
การทำเช่นนี้จะทำให้ช่วงเวลาสั้น ๆ ระหว่างที่/mnt/readonly
อ่าน - เขียน หากนี่เป็นข้อกังวลด้านความปลอดภัยอันดับแรกให้สร้างการเชื่อมต่อเชื่อมโยงในไดเรกทอรีที่มีเพียงรูทเท่านั้นที่สามารถเข้าถึงทำให้เป็นแบบอ่านอย่างเดียวจากนั้นย้ายไปยังตำแหน่งเมานท์สาธารณะ ในตัวอย่างด้านล่างโปรดทราบว่าสิ่งสำคัญคือ/root/private
(ไดเรกทอรีด้านบนจุดเชื่อมต่อ) เป็นส่วนตัว การอนุญาตดั้งเดิมที่/root/private/mnt
ไม่เกี่ยวข้องเนื่องจากถูกซ่อนอยู่หลังจุดเมานท์
mkdir -p /root/private/mnt
chmod 700 /root/private
mount --bind /some/where /root/private/mnt
mount -o remount,ro,bind /root/private/mnt
mount --move /root/private/mnt /mnt/readonly
ระบบไฟล์บันทึกผู้ใช้และกลุ่มด้วยรหัสตัวเลข บางครั้งคุณอาจใช้หลาย ๆ ระบบที่กำหนด ID ผู้ใช้ที่แตกต่างกันให้กับบุคคลเดียวกัน นี่ไม่ใช่ปัญหาการเข้าถึงเครือข่าย แต่จะทำให้ ID ผู้ใช้ไม่มีความหมายเมื่อคุณนำข้อมูลจากระบบหนึ่งไปยังอีกระบบหนึ่งบนดิสก์ สมมติว่าคุณมีดิสก์ที่สร้างด้วยระบบไฟล์ที่มีผู้ใช้หลายคน (เช่น ext4, btrfs, zfs, UFS, …) ในระบบที่ Alice มี ID ผู้ใช้ 1000 และ Bob มี ID ผู้ใช้ 1001 และคุณต้องการทำให้ดิสก์นั้นสามารถเข้าถึงได้ ระบบที่ Alice มี ID ผู้ใช้ 1001 และ Bob มี ID ผู้ใช้ 1000 หากคุณต่อดิสก์โดยตรงไฟล์ของ Alice จะปรากฏขึ้นเป็นของ Bob (เพราะ ID ผู้ใช้คือ 1001) และไฟล์ของ Bob จะปรากฏเป็นของ Alice (เพราะ ID ผู้ใช้คือ 1000)
คุณสามารถใช้ bindfs เพื่อทำการแมป ID ผู้ใช้ใหม่ ก่อนอื่นให้ติดตั้งดิสก์พาร์ติชันในไดเรกทอรีส่วนตัวซึ่งมีเพียงรูทเท่านั้นที่สามารถเข้าถึงได้ จากนั้นสร้างมุมมอง bindfs ในพื้นที่สาธารณะด้วย ID ผู้ใช้และ ID กลุ่ม remaps ที่แลกเปลี่ยน ID ผู้ใช้และ ID กลุ่มของ Alice และ Bob
mkdir -p /root/private/alice_disk /media/alice_disk
chmod 700 /root/private
mount /dev/sdb1 /root/private/alice_disk
bindfs --map=1000/1001:1001/1000:@1000/1001:@1001/1000 /root/private/alice_disk /media/alice_disk
ดูที่หนึ่งไฟล์ที่อนุญาตให้เข้าถึงได้อย่างไรในโฟลเดอร์หลักของผู้ใช้ที่ไม่บู๊ตระบบ และเมานท์ - ผูกผู้ใช้อื่นเป็นตัวฉันอีกตัวอย่างหนึ่ง
คุก chrootหรือภาชนะวิ่งกระบวนการในทรีย่อยของต้นไม้ไดเรกทอรีระบบฯ สิ่งนี้มีประโยชน์ในการเรียกใช้โปรแกรมที่มีการ จำกัด การเข้าถึงเช่นใช้เซิร์ฟเวอร์เครือข่ายที่มีการเข้าถึงเฉพาะไฟล์ของตัวเองและไฟล์ที่ให้บริการ แต่ไม่รวมถึงข้อมูลอื่นที่เก็บไว้ในคอมพิวเตอร์เครื่องเดียวกัน) ข้อ จำกัด ของ chroot คือโปรแกรมถูก จำกัด อยู่ที่ทรีย่อย: มันไม่สามารถเข้าถึงทรีย่อยได้ การเชื่อมต่อแบบผูกช่วยให้การต่อกิ่งต้นไม้ย่อยอื่น ๆ บนต้นไม้หลักนั้นได้ สิ่งนี้ทำให้พวกมันเป็นพื้นฐานของการใช้งานจริงของคอนเทนเนอร์ภายใต้ Linux
ตัวอย่างเช่นสมมติว่าเครื่องวิ่งบริการซึ่งควรจะมีเพียงการเข้าถึงข้อมูลภายใต้/usr/sbin/somethingd
/var/lib/something
แผนผังไดเร็กทอรีที่เล็กที่สุดที่มีทั้งไฟล์เหล่านี้คือรูท บริการจะถูก จำกัด อย่างไร? หนึ่งเป็นไปได้ที่จะทำให้การเชื่อมโยงอย่างหนักกับไฟล์ทั้งหมดที่ความต้องการบริการ (อย่างน้อย/usr/sbin/somethingd
และห้องสมุดที่ใช้ร่วมกันหลาย ๆ คน) /var/lib/something
ภายใต้ แต่นี่เป็นสิ่งที่ยุ่งยาก (ฮาร์ดลิงก์ต้องได้รับการอัปเดตเมื่อใดก็ตามที่มีการอัปเกรดไฟล์) และจะไม่ทำงานหาก/var/lib/something
และ/usr
อยู่ในระบบไฟล์ที่แตกต่างกัน ทางออกที่ดีกว่าคือการสร้างรากเฉพาะกิจและเติมด้วยการใช้การเมาท์:
mkdir /run/something
cd /run/something
mkdir -p etc/something lib usr/lib usr/sbin var/lib/something
mount --bind /etc/something etc/something
mount --bind /lib lib
mount --bind /usr/lib usr/lib
mount --bind /usr/sbin usr/sbin
mount --bind /var/lib/something var/lib/something
mount -o remount,ro,bind etc/something
mount -o remount,ro,bind lib
mount -o remount,ro,bind usr/lib
mount -o remount,ro,bind usr/sbin
chroot . /usr/sbin/somethingd &
เนมสเปซของการเมานต์ของ Linux จะกำหนดค่า chroots การเชื่อมต่อเชื่อมโยงเป็นวิธีที่เนมสเปซสามารถเติมข้อมูลด้วยวิธีที่ยืดหยุ่น ดูที่การทำให้กระบวนการอ่านไฟล์อื่นสำหรับชื่อไฟล์เดียวกันสำหรับตัวอย่าง
การใช้ chroots อื่นคือการติดตั้งการกระจายตัวที่แตกต่างกันในไดเรกทอรีและเรียกใช้โปรแกรมจากมันถึงแม้ว่าพวกเขาต้องการไฟล์ที่เส้นทางฮาร์ดโค้ดที่ไม่มีอยู่หรือมีเนื้อหาต่าง ๆ ในระบบพื้นฐาน สิ่งนี้มีประโยชน์ตัวอย่างเช่นในการติดตั้งการกระจายแบบ 32 บิตบนระบบ 64 บิตที่ไม่สนับสนุนแพ็คเกจแบบผสมการติดตั้งรุ่นเก่าของการแจกจ่ายหรือการกระจายอื่น ๆ เพื่อทดสอบความเข้ากันได้เพื่อติดตั้งรีลีสใหม่เพื่อทดสอบ คุณสมบัติล่าสุดในขณะที่รักษาระบบฐานที่มั่นคง ฯลฯ ดูฉันจะรันโปรแกรม 32 บิตบน Debian / Ubuntu 64 บิตได้อย่างไร สำหรับตัวอย่างบน Debian / Ubuntu
สมมติว่าคุณมีการติดตั้งแพคเกจล่าสุดของการกระจายของคุณภายใต้ไดเรกทอรีที่คุณเรียกใช้โปรแกรมโดยสลับไปที่ไดเรกทอรีที่มี/f/unstable
chroot /f/unstable
ในการทำให้โฮมไดเร็กทอรีพร้อมใช้งานจากการติดตั้งนี้ให้ผูกเมานต์เหล่านั้นลงใน chroot:
mount --bind /home /f/unstable/home
โปรแกรมschrootทำสิ่งนี้โดยอัตโนมัติ
เมื่อคุณเมานต์ระบบไฟล์ในไดเรกทอรีนี้จะซ่อนสิ่งที่อยู่เบื้องหลังไดเรกทอรี ไฟล์ในไดเรกทอรีนั้นไม่สามารถเข้าถึงได้จนกว่าไดเรกทอรีนั้นจะถูก unmount เนื่องจาก BSD nullfs และ Linux bind mounts ทำงานที่ระดับต่ำกว่าโครงสร้างพื้นฐาน mount, nullfs mount หรือ bind mount ของระบบไฟล์จะแสดงไดเรกทอรีที่ซ่อนอยู่ด้านหลัง submounts ในต้นฉบับ
ตัวอย่างเช่นสมมติว่าคุณมีระบบแฟ้ม tmpfs /tmp
ติดตั้งที่ หากมีไฟล์อยู่ภายใต้/tmp
เมื่อระบบไฟล์ tmpfs ถูกสร้างขึ้นไฟล์เหล่านี้อาจยังคงอยู่ไม่สามารถเข้าถึงได้อย่างมีประสิทธิภาพ แต่กินพื้นที่ดิสก์ วิ่ง
mount --bind / /mnt
(Linux) หรือ
mount -t nullfs / /mnt
(FreeBSD) /mnt
เพื่อสร้างมุมมองของระบบแฟ้มรากที่ ไดเร็กทอรี/mnt/tmp
คือหนึ่งจากระบบไฟล์รูท
เซิร์ฟเวอร์ NFS บางตัว (เช่นเซิร์ฟเวอร์ Linux เคอร์เนล NFS ก่อน NFSv4) โฆษณาตำแหน่งของไดเรกทอรีที่แท้จริงเสมอเมื่อพวกเขาส่งออกไดเรกทอรี นั่นคือเมื่อมีการร้องขอของลูกค้าเซิร์ฟเวอร์ให้บริการต้นไม้ที่ตั้งserver:/requested/location
/requested/location
บางครั้งเป็นที่พึงปรารถนาที่จะอนุญาตให้ลูกค้าร้องขอ/request/location
แต่ให้บริการไฟล์/actual/location
จริง หากเซิร์ฟเวอร์ NFS ของคุณไม่รองรับการให้บริการตำแหน่งอื่นคุณสามารถสร้างการเชื่อมต่อสำหรับคำขอที่ต้องการเช่น
/requested/location *.localdomain(rw,async)
ใน/etc/exports
และต่อไปนี้ใน/etc/fstab
:
/actual/location /requested/location bind bind
บางครั้งคุณต้องการที่จะทำให้การเชื่อมโยงสัญลักษณ์ที่จะทำให้ไฟล์ที่/some/where/is/my/file
ปรากฏอยู่ภายใต้/else/where
แต่แอพลิเคชันที่ใช้ขยายการเชื่อมโยงสัญลักษณ์และปฏิเสธfile
/some/where/is/my/file
ผูกติดสามารถทำงานรอบนี้ผูกติด/some/where/is/my
ไป/else/where/is/my
แล้วrealpath
จะรายงาน/else/where/is/my/file
จะอยู่ภายใต้/else/where
, /some/where
ไม่อยู่ภายใต้
หากคุณใช้ bind mounts คุณต้องดูแลแอพพลิเคชั่นที่สำรวจทรีของระบบไฟล์ซ้ำเช่นการสำรองข้อมูลและการจัดทำดัชนี (เช่นการสร้างฐานข้อมูลค้นหา )
โดยปกติแล้วการเชื่อมต่อแบบโยงควรถูกแยกออกจากทราฟฟิกไดเร็กทอรีแบบเรียกซ้ำเพื่อให้ทรีไดเรกทอรีแต่ละทราฟฟิกครั้งเดียวที่ตำแหน่งเดิม ด้วย bindfs และ nullfs กำหนดค่าเครื่องมือการแวะผ่านเพื่อละเว้นประเภทระบบไฟล์เหล่านี้ถ้าเป็นไปได้ ไม่รู้จักการเชื่อมต่อ Linux bind: ตำแหน่งใหม่เทียบเท่ากับต้นฉบับ ด้วย Linux bind mounts หรือด้วยเครื่องมือที่สามารถแยกพา ธ และไม่ใช่ประเภทระบบไฟล์ได้คุณต้องแยกจุดเมานท์สำหรับ bind mounts
traversals ที่หยุดที่ขอบเขตระบบแฟ้ม (เช่นfind -xdev
, rsync -x
, du -x
, ... ) จะหยุดโดยอัตโนมัติเมื่อพวกเขาพบ bindfs หรือ nullfs จุดติดเพราะที่จุดติดตั้งเป็นระบบไฟล์ที่แตกต่างกัน ด้วย Linux bind mounts สถานการณ์จะซับซ้อนกว่านี้เล็กน้อย: มีขอบเขตของระบบไฟล์เฉพาะเมื่อการผูก bind mount เป็นการกราฟต์ระบบไฟล์ที่แตกต่างกันไม่ใช่ว่าจะทำการกราฟต์ส่วนอื่นของระบบไฟล์เดียวกัน
Bind mounts จัดเตรียมมุมมองของแผนผังไดเร็กทอรีที่ตำแหน่งอื่น พวกเขาเปิดเผยไฟล์เดียวกันอาจมีตัวเลือกการเมานท์ที่แตกต่างกันและ (ด้วย bindfs) ความเป็นเจ้าของและสิทธิ์ที่แตกต่างกัน แฟ้มที่นำเสนอมุมมองที่เปลี่ยนแปลงของต้นไม้ไดเรกทอรีจะเรียกว่าระบบไฟล์ภาพซ้อนทับหรือfilesystems วางซ้อนกันได้ มีระบบไฟล์ซ้อนทับอื่น ๆ อีกมากมายที่ดำเนินการแปลงขั้นสูงมากขึ้น นี่คือบางส่วนที่พบบ่อย หากกรณีการใช้งานที่คุณต้องการไม่ครอบคลุมที่นี่ตรวจสอบพื้นที่เก็บข้อมูลของระบบไฟล์ FUSE
bindfs -r
น้ำหนักเบาเพียงเล็กน้อยม้ายูเนี่ยน - ปัจจุบันระบบไฟล์หลาย ๆ (เรียกว่าสาขา ) ภายใต้ไดเรกทอรีเดียว: ถ้าtree1
มีfoo
และtree2
มีbar
แล้วมุมมองของสหภาพของพวกเขามีทั้งและfoo
bar
ไฟล์ใหม่จะถูกเขียนไปยังสาขาเฉพาะหรือสาขาที่เลือกตามกฎที่ซับซ้อนมากขึ้น แนวคิดนี้มีการใช้งานหลายอย่างรวมไปถึง:
mount --bind /dir1 /dir1
ทำอย่างไร มันแตกต่างจากเคสที่แหล่งที่มาและเป้าหมายของการติดตั้งแตกต่างกันอย่างไร?
/proc/self/mountinfo
อยู่ สำหรับ chroot มันสามารถใช้สำหรับการแยก แต่ไม่ได้อยู่ในตัวของมันเอง คุณไม่ต้องการเมานต์เนมสเปซแม้ว่า: chroot ก็เพียงพอสำหรับส่วนของระบบไฟล์เนมสเปซ คุณจำเป็นต้องตรวจสอบให้แน่ใจว่าไม่มีกระบวนการใดใน chroot รันในฐานะผู้ใช้เดียวกันกับกระบวนการนอก chroot
ง่าย ๆ เมื่อคุณใช้ bind mount ไฟล์หรือไดเร็กตอรี่ในเครื่องโฮสต์นั้นจะถูกเมาท์ลงในคอนเทนเนอร์ดังนั้นการเปลี่ยนแปลงใด ๆ ก็ตามที่อยู่ภายในไดเรคทอรีไฟล์ของเครื่องโฮสต์จะพร้อมใช้งานโดยอัตโนมัติภายในคอนเทนเนอร์ในไดเรคทอรี