ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างการใช้และln -s
mount --bind
ในสถานการณ์พื้นฐานฉันสามารถใช้ทั้งสองเพื่อเข้าถึงหนึ่งไดเรกทอรีจากที่อื่น ในสถานการณ์ใดที่ทั้งสองจะทำงานแตกต่างกันอย่างไร
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างการใช้และln -s
mount --bind
ในสถานการณ์พื้นฐานฉันสามารถใช้ทั้งสองเพื่อเข้าถึงหนึ่งไดเรกทอรีจากที่อื่น ในสถานการณ์ใดที่ทั้งสองจะทำงานแตกต่างกันอย่างไร
คำตอบ:
พวกเขาจะทำงานแตกต่างกันอย่างน้อยสองกรณี:
A
) ซึ่งมีอย่างอื่น ( B
) ติดตั้งอยู่ การเชื่อมโยงจะแสดงเนื้อหาของภูเขาเป้าหมาย (คนB
) แทนของเดิม ( A
)นอกจากนี้คุณสามารถผูกติดไดเรกทอรีหรือไฟล์บนไดเรกทอรีหรือไฟล์ที่มีอยู่แล้วปิดบังเนื้อหาต้นฉบับ (การแสดงเนื้อหาต้นฉบับไม่สามารถเข้าถึงได้เว้นแต่ว่าต้นฉบับถูกผูกติดอยู่ที่อื่น) ลิงก์สัญลักษณ์ต้องการให้ย้ายหรือลบต้นฉบับ
ดีln -s
สร้างลิงค์สัญลักษณ์ในขณะที่mount --bind
สร้างภูเขา
ลิงก์สัญลักษณ์เป็นไฟล์ชนิดพิเศษ ถ้าคุณทำเช่นln -s /var/target /var/link
นั้น/var/link
จะเป็นไฟล์ที่มีพา ธ " /var/target
" อยู่ในนั้น ข้อแตกต่างระหว่างลิงก์สัญลักษณ์และไฟล์ทั่วไปคือเมื่อโปรแกรมพยายามดำเนินการกับลิงก์สัญลักษณ์การดำเนินการมักจะดำเนินการกับเป้าหมายแทนที่จะเป็นไฟล์ ดังนั้นถ้าคุณทำเช่นls /var/link
นี้ls
โปรแกรมจะพยายามรับรายชื่อไดเรกทอรี/var/link
แต่จะได้รับรายชื่อไดเรกทอรี/var/target
แทน
ลิงก์สัญลักษณ์ยังคงเป็นเพียงไฟล์ พวกเขาสามารถเปลี่ยนชื่อและลบและแจ๊สทั้งหมดที่ โปรดทราบว่าคุณไม่สามารถสร้างลิงก์สัญลักษณ์ (หรือไฟล์ธรรมดาสำหรับเรื่องนั้น) ที่เรียกว่า/var/link
มีไฟล์ที่ถูกเรียก/var/link
แล้ว คุณต้องกำจัดมันเสียก่อน
การเมาท์ไม่ใช่ไฟล์ เป็นเรคคอร์ดที่เคอร์เนลเก็บไว้ในหน่วยความจำ ถ้าคุณทำmount --bind /var/target /var/mount
เคอร์เนลจะบันทึกความจริงที่ว่าตอนนี้เป็นชื่อใหม่สำหรับ/var/mount
/var/target
(ฉันไม่ทราบรายละเอียดโดยเฉพาะฉันไม่ทราบว่าการติดตั้งบางสิ่งในไดเรกทอรีย่อย/var/target
จะทำให้ปรากฏขึ้น/var/mount
ด้วยหรือไม่หรือทำไมหรือไม่ทำไมการแก้ไขคำตอบนี้จะได้รับการชื่นชม) ดังนั้นตอนนี้ ถ้าคุณทำls /var/mount
สิ่งเดียวกันจะเกิดขึ้นราวกับว่าคุณทำls /var/target
เพราะ/var/mount
และ/var/target
เป็นไดเรกทอรีเดียวกัน
เมาท์ไม่ใช่ไฟล์ /var/mount
ผมไม่ทราบว่าสิ่งที่จะเกิดขึ้นถ้าคุณพยายามที่จะเปลี่ยนชื่อหรือลบ โปรดทราบว่าคุณไม่สามารถกำหนดอะไร/var/mount
เว้นแต่/var/mount
มีอยู่แล้วไดเรกทอรีที่
ln -s ../../myfile .
เหมือนที่ หากคุณย้ายไปที่ไดเรกทอรีอื่นมันจะชี้ไปที่อื่นเพราะเป็นลิงก์ที่เกี่ยวข้อง สิ่งนี้จะมีประโยชน์หากคุณต้องการแบ็คอัพทรีย่อยและยังคงมีลิงค์ทำงานอยู่ในการสำรองข้อมูล
นอกจากนี้ ln -s จะสามารถรีบูตเครื่องได้ ในขณะที่ mount - ผูกจะไม่เว้นแต่ว่าคุณจะแก้ไข / etc / fstab เพื่อให้มันขัดขืน
นอกจากคำตอบอื่น ๆ ระบบไม่อนุญาตให้เชื่อมโยงไปยังไดเรกทอรีอย่างหนัก:
# ln mydir mpoint
ln: `mydir': hard link not allowed for directory
เมานต์ช่วยให้คุณสร้างลิงก์ได้ยากเช่นชื่อสองชื่อขึ้นไปสำหรับinodeเดียวกัน:
# mount -B mydir/ mpoint/
# ls -d -i *
807175 mpoint/ 807175 mydir/
(หนึ่งสามารถค้นหาช่วยสำรอง snapshot ด้วย rsync รุ่นเก่า)
นอกจากนี้โปรดทราบว่าการติดตั้งนี้ไม่สมบูรณ์:
# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)
ดังนั้นเมานต์ยังคงอ่านและเขียนแม้ว่าฉันจะขอตัวเลือก ro (อ่านอย่างเดียว)
rm -r
mount --bind
ด้วยln
ก็เอาการเชื่อมโยงในขณะที่หา--bind
ก็มีผลเช่นเดียวกับการทำงานของrm -r
เป้าหมาย ไม่ดีอย่างที่ฉันพบเมื่อไม่นานมานี้ก่อนที่จะสร้างเซิร์ฟเวอร์ของฉันขึ้นมาใหม่ ...