ln -s vs mount - ผูก


19

มีความแตกต่างในทางปฏิบัติระหว่างการใช้ln -sหรือmount --bind?

ฉันต้องการย้ายบางโฟลเดอร์ไปยังพาร์ติชันอื่นโดยไม่เปลี่ยนการตั้งค่าภูตของพวกเขาและสงสัยว่าฉันควรใช้วิธีใด

ฉันชอบln -sเนื่องจากต้องการการตั้งค่าขั้นต่ำ (ไม่มี/etc/fstabการแก้ไข) แต่อาจมีสาเหตุที่ไม่ธรรมดา

คำตอบ:


25

ใช่. หากคุณดำเนินการln -sคุณสร้างลิงค์สัญลักษณ์ซึ่งเป็นinodeชี้ไปที่วัตถุระบบไฟล์บางอย่างซึ่งเป็นสาเหตุที่ symlinks สามารถสำรวจระบบไฟล์และฮาร์ดลิงก์ไม่สามารถ: ฮาร์ดลิงก์ไม่มีไอโหนดของตัวเอง

หากคุณเมานต์ระบบไฟล์ด้วย--bindคุณจะสร้างการเมานต์ที่สองสำหรับอุปกรณ์หรือระบบไฟล์

หากคุณมองเห็น symlink เป็นการเปลี่ยนเส้นทางให้มองเห็น--bindระบบไฟล์ที่เมาท์แล้วเช่นเดียวกับการสร้างเกตเวย์ไปยังข้อมูลอื่น

Symlinks และ bind mounts เป็น ballgame ที่แตกต่างกันโดยสิ้นเชิง

--bindภูเขาดูเหมือนว่าบิตที่แข็งแกร่งมากขึ้นกับผมและมันอาจจะเป็นบิตเร็วกว่าการทำงานกับลิงก์สัญลักษณ์ ในทางกลับกันไม่มีข้อเสียอย่างร้ายแรงในการใช้ symlink เนื่องจากประสิทธิภาพการทำงานจะน้อย (ถ้ามีอยู่ทั้งหมด)

แก้ไข : ฉันกำลังคิดเกี่ยวกับสิ่งนี้และการแสดงที่มีประสิทธิภาพอาจใหญ่กว่าที่ฉันคิดไว้เล็กน้อย หากคุณมีแอพพลิเคชั่นที่อ่านไฟล์ต่าง ๆ มากมายไฟล์ใหม่ทุกไฟล์ที่เปิดจะต้องอ่านเพิ่ม งานวิจัยบางคนนี่แสดงให้เห็นว่าสมมติฐานของฉันถูกต้องดังนั้นหากคุณมีโปรแกรมหนัก IO ทำงานมีพิจารณา--bindตัวเลือกในการแก้ปัญหาดังกล่าวข้างต้นติด symlink

สาเหตุที่ไม่ธรรมดาอาจเป็นความจริงที่ว่า symlink สามารถมองเห็นได้ในlsขณะที่การเชื่อมโยง bind จะปรากฏเฉพาะเมื่อดู / proc / mounts หรือ / etc / mtab (ซึ่งเป็นสิ่งที่คำสั่ง mount ทำถ้าเป็น ดำเนินการโดยไม่มีพารามิเตอร์) นอกจากนั้นฉันไม่คิดว่าจะมีปัญหาใด ๆ ฉันจะสนใจถ้ามี

เพิ่มเติม : ปัญหาอีกประการหนึ่งln -sคือสำหรับบางแอปพลิเคชันเมื่อเส้นทางถูกยกเลิกการลงทะเบียนอาจทำให้แอปพลิเคชันหยุดชะงักหาก "คาดว่า" บางรายการจะอยู่ในสถานที่เฉพาะ


ขอบคุณสำหรับคำอธิบายผ่าน! คำถามติดตามผลขนาดเล็ก - พารามิเตอร์ --rbind ทำอะไรได้บ้างและใช้อย่างไร? จากคู่มือดูเหมือนว่าพารามิเตอร์รองรับการติดตั้ง sub-mounts ในแผนผังที่ประกอบเข้าด้วยกันถูกต้องหรือไม่ นอกจากนี้มีเพียง - ผูกพอหรือฉันต้องทำ - ผูกแล้ว - ยกเลิก? ขอบคุณอีกครั้ง.
SyRenity

2
mountเมื่อเรียกโดยไม่ได้ข้อโต้แย้งใด ๆ พิมพ์เนื้อหาของซึ่งมีข้อมูลที่แตกต่างกันเล็กน้อย/etc/mtab /proc/mounts(โดยเฉพาะอย่างยิ่ง/proc/mounts(symlink to /proc/self/mounts) จะแสดงจุดเมานท์ที่มองเห็นได้สำหรับกระบวนการที่อ่านมันเสมอ)
grawity

1
@wzzrd - จากคำถามที่พบบ่อย "ที่สุดของทั้งหมด - แก้ไขและปรับปรุงคำถามและคำตอบที่มีอยู่!" :) ..this โดยไม่มีหมายถึงเล็กน้อยเพื่อคำตอบของคุณ - มันคือการปรับปรุงขนาดเล็กที่มีข้อมูลเพิ่มเติมที่คุณจะได้รับเพิ่มเติมหากตัวแทน / เมื่อมันได้รับการโหวตขึ้น :)
วอร์เรน

1
@warren ไม่เคยคิดผมไม่บ้า :) มันเป็นเพียงแค่คุณเพิ่มสิ่งที่ฉันมีความคิดเกี่ยวกับการไม่ดังนั้นที่รู้สึกแปลกสักหน่อย;)
wzzrd

2
@wzzrd - ไม่ได้หมายถึงขั้นตอนเกี่ยวกับเท้าใด ๆ :) ..the ปัญหาเฉพาะแอปเป็นสิ่งที่ผมเคยทำงานเป็นที่มีการใช้สินค้าที่ผมหลัก
วอร์เรน

6

หนึ่งในความแตกต่างที่สำคัญระหว่างln -sและการผูกติดคือคุณสามารถใช้การผูกติดตั้งเพื่อ "แก้ไข" ระบบไฟล์แบบอ่านอย่างเดียว ตัวอย่างเช่นหากมีซีดีติดตั้งอยู่/mnt/applicationและคุณต้องการแทนที่/mnt/application/badconfigfile.confด้วยเวอร์ชั่นที่ถูกต้องคุณสามารถทำได้:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

เป็นไปไม่ได้ที่จะมีผลต่อการเปลี่ยนแปลงเดียวกันโดยใช้ symlink เพราะคุณไม่สามารถแก้ไขระบบไฟล์เป้าหมายได้

สิ่งนี้สามารถใช้เพื่อส่งผลดีหากคุณแจกจ่ายชุดซอฟต์แวร์ทั่วไปผ่าน NFS (หรือระบบไฟล์คลัสเตอร์บางประเภท) และคุณต้องการทำการเปลี่ยนแปลงเฉพาะโฮสต์ในระบบเดียว คุณสามารถใช้การเชื่อมต่อเชื่อมโยงบนระบบเป้าหมายเพื่อแทนที่ไฟล์หรือไดเรกทอรีตามความจำเป็น


ปวดหัวประหยัด! (กรณีที่หายาก แต่ควรจำในช่วงเวลาพิเศษนั้น)
โจนาธานโคมาร์

2

ความแตกต่างในการปฏิบัติ # 1 สำหรับฉันระหว่าง ln -s และ mount - ผูก:

vsftpd ไม่อนุญาตให้เรียกดูไดเรกทอรีผ่านลิงก์สัญลักษณ์ แต่อนุญาตเมื่อติดตั้ง

ฉันไม่รู้ว่าคุณกำลังใช้ภูตอะไร แต่มันอาจทำงานในทำนองเดียวกัน


1

บางคนอาจสังเกตว่าเป็นผลมาจากการผูกพันกับภูเขาซึ่งเป็นผลผูกพันที่จะเด้งภายหลังผูกพันเดิมยังคงไม่บุบสลายสมมติว่าทุกสิ่งที่ร่างกายเชื่อมต่ออยู่

นั่นคือถ้าผูก A ถึง B และผูก B กับ C แล้วผูก D กับ B, C จะยังคงผูกพันกับ A นั่นอาจเป็นสิ่งที่คุณต้องการหรือไม่ หากต้องการให้ C ติดตาม B ให้นับใหม่โดยใช้เป้าหมายเดียวกันคือmount -o remount B Cหรือใช้--rbindแทน ไม่มี--rebindตัวเลือก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.