เหตุใดฮาร์ดลิงก์จึงใช้ได้ในระบบไฟล์เดียวกันเท่านั้น


22

ฉันกำลังอ่านบทนำนี้ถึงบรรทัดคำสั่งโดย Mark Bates

ในบทแรกเขากล่าวว่าฮาร์ดลิงก์ไม่สามารถขยายระบบไฟล์ได้

สิ่งสำคัญที่ควรทราบเกี่ยวกับฮาร์ดลิงก์คือมันใช้งานได้กับระบบไฟล์ปัจจุบันเท่านั้น คุณไม่สามารถสร้างฮาร์ดลิงก์ไปยังไฟล์บนระบบไฟล์อื่น ในการทำเช่นนั้นคุณต้องใช้ลิงก์สัญลักษณ์ส่วน 1.4.3

ฉันรู้จักระบบไฟล์เดียว หนึ่งเริ่มต้นจาก root ( /) คำสั่งนี้ฮาร์ดลิงก์ไม่สามารถครอบคลุมระบบไฟล์ได้ไม่สมเหตุสมผลสำหรับฉัน

บทความ Wikipedia เกี่ยวกับระบบไฟล์ Unixนั้นไม่เป็นประโยชน์เช่นกัน

คำตอบ:


29

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

แต่ถ้าคุณแบ่งพาร์ติชั่นฮาร์ดไดรฟ์ของคุณให้มีพาร์ติชั่นมากกว่าหนึ่งพาร์ติชั่น (คิดว่า Apple Pie ตัดเป็นชิ้น ๆ ) หรือเพิ่มฮาร์ดไดรฟ์เพิ่มเติม เพื่อประโยชน์ในการโต้แย้งพวกเขาทุกคนมีระบบไฟล์อยู่ด้วยเช่นกัน

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

image.jpg             image2.jpg
          \           /
           [your data]

ที่นี่, image.jpg และ image2.jpg ทั้งคู่ชี้ไปยังข้อมูลของคุณโดยตรง พวกเขาทั้งสองเชื่อมโยงกัน อย่างไรก็ตาม ...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

ในตัวอย่างนี้ (หยาบ), image2.jpg ไม่ได้ชี้ไปที่ข้อมูลของคุณ แต่จะชี้ไปที่ image.jpg ... ซึ่งเป็นลิงก์ไปยังข้อมูลของคุณ

ลิงก์สัญลักษณ์สามารถทำงานข้ามขอบเขตของระบบไฟล์ (สมมติว่าระบบไฟล์นั้นเชื่อมต่อและติดตั้งอยู่เช่นแท่ง usb ของคุณ) อย่างไรก็ตามฮาร์ดลิงก์ไม่สามารถทำได้ มันไม่รู้อะไรเลยเกี่ยวกับสิ่งที่อยู่ในระบบไฟล์อื่นของคุณหรือที่เก็บข้อมูลของคุณ

หวังว่านี่จะช่วยให้เข้าใจได้ดีขึ้น


ขอบคุณ ฉันไม่ทราบว่าพาร์ทิชันไฟล์ต่าง ๆ เรียกว่า "ระบบไฟล์"
Anton Paras

1
หนึ่งในสิ่งที่คุณสามารถทำกับพาร์ติชันได้คือวางระบบไฟล์ไว้ในนั้นมีที่อื่น ๆ ที่คุณสามารถวางระบบไฟล์และสิ่งอื่น ๆ ที่คุณสามารถทำได้ด้วยพาร์ติชัน แต่ตัวเลือกที่พบบ่อยที่สุดก็คือ
Jasen

10
มีลำดับชั้นไฟล์หนึ่งไฟล์ที่เริ่มต้นที่ "/" จะมีระบบไฟล์หนึ่งตัวหรือมากกว่าถูกติดตั้ง
mpez0

@ mpez0: ไม่ได้ด้วยเช่นchroot(2)หรือการบรรจุจริงคุณสามารถมีหลายลำดับชั้นซึ่งอาจไม่มีอะไรเกี่ยวข้องกับแต่ละอื่น ๆ
Kevin

@Kevin chrootแยกส่วนของลำดับชั้นสำหรับกระบวนการและการสืบทอด แต่ผู้ปกครองยังคงมีลำดับชั้นที่สมบูรณ์หนึ่งรายการ การทำคอนเทนเนอร์อาจทำได้ขึ้นอยู่กับว่า VM อยู่ใกล้แค่ไหน แต่รายละเอียดเท่าไหร่ที่สามารถบรรจุลงในความคิดเห็น? ขอบคุณ
mpez0

23

ของระบบไฟล์ประกอบด้วยโครงสร้างไดเรกทอรีประกอบด้วยสำหรับรายการไดเรกทอรีการจัดระเบียบไฟล์ รายการไดเรกทอรีแต่ละเชื่อมโยงชื่อไฟล์ที่มีinode

ซอฟต์ลิงค์ ( สัญลักษณ์ ) คือรายการไดเรกทอรีที่ไม่มีข้อมูลมันแค่ชี้ไปที่รายการอื่น (ไฟล์หรือไดเรกทอรีในระบบไฟล์เดียวกันหรือระบบไฟล์อื่น) และเมื่อคุณลบไฟล์ปลายแหลมลิงก์สัญลักษณ์จะใช้ไม่ได้

ฮาร์ดลิงก์คือรายการไดเร็กทอรีที่มีชื่อไฟล์และ หมายเลขinode เมื่อคุณลบฮาร์ดลิงก์สุดท้ายคุณจะไม่สามารถเข้าถึงไฟล์ได้อีกต่อไป

ความแตกต่างระหว่างซอฟต์ลิงค์และฮาร์ดลิงค์

สรุป:

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

ดังนั้นฮาร์ดลิงก์จะใช้ได้เฉพาะในระบบไฟล์เดียวกัน แต่ซอฟต์ลิงก์ (Symbolic link) สามารถขยายระบบไฟล์ได้เนื่องจากมันชี้ไปที่รายการไดเรกทอรีอื่น (อินเทอร์เฟซของระบบไฟล์ไม่ใช่วัตถุภายใน)


1
คำตอบที่กระชับ
dubkat

จะเกิดอะไรขึ้นหากระบบไฟล์อื่น (สมมติว่า USB) จะมีไฟล์ที่มีชื่อเดียวกันซึ่งลิงค์สัญลักษณ์ของเราเชื่อมต่อกับระบบไฟล์ของเรา
Josef Klimuk

@JosefKlimuk /mnt/myfileลิงค์นุ่มจะชี้ไปเส้นทางสมมติว่า /mnt/หากคุณติดระบบไฟล์อื่นลง /mnt/การเชื่อมโยงนุ่มจะได้รับการแก้ไขไปยังรายการของที่ติดตั้งระบบแฟ้มภายใต้ ดังนั้นหากคุณติดตั้งระบบไฟล์จากอุปกรณ์ USB ของคุณ/mntซอฟต์ลิงค์จะแก้ไขรายการในระบบไฟล์นั้น
Facundo Victor

2

ระบบไฟล์รูทสามารถประกอบด้วยหลายระบบไฟล์ /usr/localอาจถูกเมาท์บนพาร์ติชันแยกต่างหากและ/homeอาจอยู่บนพาร์ติชันอื่นบนดิสก์เครือข่ายที่อื่น ในกรณีนี้การเชื่อมโยงยากสำหรับ/usr/local/bin/git(ตัวอย่าง) อาจจะไม่ได้สร้างขึ้นนอก/usr/local, เพราะมันจะครอบคลุมระบบไฟล์

เหตุผลของเรื่องนี้ก็คือว่า inodes จะจัดสรรแยกต่างหากสำหรับ/, /usr/localและ/home(อีกครั้งในตัวอย่างนี้) และเมื่อคุณสร้างการเชื่อมโยงอย่างหนักจริงๆเพียงแค่คุณทำให้ชื่อเพิ่มเติมสำหรับ inode


2

การเชื่อมโยงยากมีผลในการรักษาเป้าหมายของพวกเขายังมีชีวิตอยู่ ตราบใดที่สามารถเข้าถึงฮาร์ดลิงก์ใด ๆ ได้ระบบจะตรวจสอบให้แน่ใจว่าเป้าหมายไม่สามารถถูกปล่อยได้ ดังนั้นจึงมีความจำเป็นที่สื่อทั้งหมดที่อาจมีฮาร์ดลิงก์ไปยังไอโหนดนั้นจะถูกเมาท์เมื่อใดก็ตามที่ระบบจะพยายามตรวจสอบว่ามีการอ้างอิงใด ๆ อยู่หรือไม่

เนื่องจากอายุการใช้งานไอโหนดมักจะถูกกำหนดโดยการรักษาจำนวนการอ้างอิงมากกว่าการสแกนเพื่อการอ้างอิงอาจเป็นไปได้ที่จะจัดเรียงสิ่งต่าง ๆ ให้กับระบบไฟล์สองระบบขึ้นไปที่จัดเก็บลิงก์ซึ่งกันและกันสามารถใช้งานได้โดยอิสระ เชื่อมโยงระหว่างระบบและไม่จำเป็นต้องใช้ fsck กับระบบใดระบบหนึ่ง หากไอโหนดนับหนึ่งในระบบถูกรบกวนอย่างไรก็ตามวิธีเดียวที่จะทำให้ระบบนั้นมีประโยชน์อีกครั้งคือการใช้รูปแบบของการดำเนินการ fsck ซึ่งสามารถสแกนทั้งระบบไฟล์เพื่อการอ้างอิง เนื่องจากข้อ จำกัด ดังกล่าวในขณะที่อาจเป็นไปได้ที่จะอนุญาตให้ระบบไฟล์ที่เชื่อมโยงสองระบบสามารถใช้งานได้อย่างอิสระประโยชน์ของการทำเช่นนั้นอาจมีข้อ จำกัด เกินกว่าที่จะคุ้มค่า


จุดดี แต่สัมผัสเกินกว่าจะตอบได้ดี
Joe

@ Joe: อนุญาตให้เชื่อมโยงอย่างหนักกับระบบไฟล์ข้ามจะกำหนดจำนวนของปัญหาทางเทคนิค แต่ส่วนใหญ่ของพวกเขาสามารถเอาชนะจึงยกคำถามที่ว่ามีเหตุผลที่น่าสนใจใด ๆ ว่าทำไมพวกเขาไม่ควรจะเป็น ปัญหาที่ยังมีชีวิตอยู่อาจดูไม่ชัดเจน แต่ไม่เหมือนปัญหาอื่น ๆ ที่ฉันสามารถแก้ไขได้โดยกำหนดข้อ จำกัด ทางความหมายอย่างรุนแรงเกี่ยวกับการใช้ลิงก์ดังกล่าวซึ่งจะ จำกัด ค่าของพวกเขาอย่างรุนแรง
supercat

จุดดี. ระบบไฟล์สามารถติดตั้งบนอุปกรณ์อื่นและปรับเปลี่ยนดังนั้น inode และลิงก์สามารถรับ "out of sync" ระบบไฟล์ทุกระบบอาจมี GUID และลิงก์สามารถรวม GUID นั้นเพื่อติดตาม inode ในระบบไฟล์ อาจมีบันทึกบางอย่างเกี่ยวกับ FS และเมื่อติดตั้งแล้วระบบโฮสต์ไม่จำเป็นต้องสแกน แต่สามารถอ่านบันทึกและ "ทัน" ในการเชื่อมโยงการเปลี่ยนแปลง inode (เมื่อเราล้างข้อมูล แม้ว่า?) บรรทัดล่างคือ FS พื้นฐานจะต้องมีการปรับเปลี่ยนในรูปแบบที่ไม่สำคัญและมันจะใช้ได้กับระบบไฟล์ที่เข้ากัน
Rolf

1

หมายเลขไอโหนดเดี่ยวใช้เพื่อแสดงไฟล์ในแต่ละระบบไฟล์ ฮาร์ดลิงก์ทั้งหมดขึ้นอยู่กับหมายเลขไอโหนด แฟ้มการเชื่อมโยงระบบการอ้างอิงที่นี่

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