ลิงก์สัญลักษณ์สร้างความแตกต่างในการใช้งานดิสก์จริงหรือไม่


21

ฉันได้อ่านในเว็บไซต์จำนวนมากที่ใน Linux ลิงก์สัญลักษณ์ (ลิงก์นุ่ม ๆ symlink) ก็เหมือนกับตัวชี้ที่อ้างอิงไฟล์อื่นซึ่งอาจอยู่ที่ใดก็ได้ (เช่นทางลัด Windows) อย่างไรก็ตามเมื่อฉันตรวจสอบการใช้งานดิสก์ของโฟลเดอร์ที่มีลิงก์สัญลักษณ์มีความไม่ตรงกันระหว่างสิ่งที่ตัวจัดการไฟล์ของฉันพูดและduรายงานอะไร แต่ถ้าฉันพิมพ์du -L( -L, --dereference; dereference all symbolic linksจากหน้าคน) การส่งออกของdu -Lและขนาดที่รายงานการจัดการไฟล์ของฉันเหมือนกัน

คำถามของฉันคือ : ถ้าฉันมี softlink เป็นไฟล์ขนาดใหญ่เช่นhomeพาร์ติชันแยกฉันจะมีปัญหาหรือไม่?

ตัวอย่าง :

/var/tmpโฟลเดอร์ของฉันว่างเปล่าตอนนี้ มาสร้างไฟล์กัน

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

และตัวจัดการไฟล์ของฉัน (Thunar ในกรณีนี้) รายงาน

ขนาด: 1 รายการรวมเป็น 163.0 kB

เอาล่ะ ตอนนี้ให้สร้างไฟล์ที่มีขนาดใหญ่มาก/tmpและเชื่อมโยงกับมัน:

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

ทุกอย่างเรียบร้อยดีในตอนนี้ แต่ถ้าฉันเปิดโปรแกรมจัดการไฟล์:

ขนาด: 2 ชิ้นรวมเป็น 570.3 kB

และในที่สุดก็:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

หากพาร์ติชั่นซึ่ง/var/tmpตั้งอยู่ที่ 1 GiB ใหญ่และฉันสร้างลิงค์ไว้ในไฟล์ 1 GiB ฮาร์ดดิสก์ของฉันจะตายหรือไม่? ฉันรู้ว่ามันduจะเอาท์พุท 168 และ Thunar 1 GiB แต่ฉันไม่รู้ว่ามันถูกต้อง


คุณแน่ใจหรือว่าโปรแกรมหนึ่งไม่มีการรายงานตัวอย่างใน Mib และอีกโปรแกรมหนึ่งเป็น MB
HandyGandy

ไม่ไม่ใช่ปัญหาหน่วย
astrojuanlu

คำตอบ:


34

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

ล้วนduรายงานพื้นที่ที่ไดเรกทอรีต้นไม้วางไว้บนดิสก์ du -Lรายงานพื้นที่ที่จะถูกนำโดยแผนผังไดเรกทอรีหากลิงก์สัญลักษณ์ทั้งหมดถูกแทนที่ด้วยเป้าหมาย อดีตมักเป็นข้อมูลที่มีประโยชน์ ตัวอย่างเช่นเป็นพื้นที่ที่คุณจะกู้คืนหากคุณลบทรีและพื้นที่ (โดยประมาณ) ที่คุณต้องการสำรองทรี

duบนแผนผังไดเร็กทอรีจะแสดง (โดยปกติ) มากกว่าขนาดไฟล์ทั้งหมดเล็กน้อย นั่นเป็นเพราะสองสิ่ง ขั้นแรกให้duนับไดเรกทอรีซึ่งใช้เวลาเล็กน้อยในการจัดเก็บชื่อไฟล์และข้อมูลเมตา ประการที่สองduนับเนื้อที่ดิสก์ที่ถ่ายโดยไฟล์ซึ่งอาจแตกต่างจากขนาดไฟล์: ผลกระทบที่พบบ่อยที่สุดคือไฟล์ใช้จำนวนบล็อกจำนวนเต็ม (4kB สำหรับการติดตั้ง Linux ทั่วไป) ดังนั้นไฟล์ขนาด 1 ไบต์สามารถ แสดงเป็น 4kB ในเอาต์พุต du; แต่การบีบอัด (เช่นรูปแบบดั้งเดิมที่จัดทำโดยไฟล์กระจัดกระจายในระบบไฟล์ยูนิกซ์ทุกระบบ) สามารถทำให้ขนาดไฟล์มีขนาดใหญ่กว่าการใช้งานดิสก์

จากตัวเลขที่คุณให้ปรากฏว่า Thunar รายงานผลรวมของขนาดของไฟล์ในต้นไม้ไดเรกทอรีต่อไปนี้การเชื่อมโยงสัญลักษณ์ ที่จริงแล้วมันพูดอย่างละเอียด - มันอ้างว่าขนาดรวมคือ 570.3 kB ไม่ใช่การใช้ดิสก์ 570.3 kB สิ่งที่ไม่ชัดเจนจากส่วนต่อประสานผู้ใช้หรือเอกสารก็คือ Thunar ติดตามลิงก์สัญลักษณ์เมื่อคำนวณขนาด

อันไหนที่“ ถูกต้อง” เป็นเรื่องส่วนตัว duรายงานการใช้งานดิสก์ Thunar รายงานขนาดทั้งหมดตามลิงก์สัญลักษณ์ การสร้างลิงก์สัญลักษณ์มีผลกระทบเล็กน้อยต่อการใช้งานดิสก์ แต่ตามคำจำกัดความจะเปลี่ยนลิงก์ขนาดสัญลักษณ์ต่อไปนี้ทั้งหมดที่ Thunar รายงาน


ฉันได้แก้ไขคำถามของฉันดังนั้นฉันคิดว่าตอนนี้ค่อนข้างชัดเจน แต่ขอขอบคุณสำหรับคำตอบ
astrojuanlu

@ Juanlu001: ฉันได้อัปเดตคำตอบแล้ว ในระยะสั้นduแสดงการใช้งานดิสก์ในขณะที่ Thunar แสดงอย่างอื่น
Gilles 'หยุดความชั่วร้าย'

ความแตกต่างมีความสำคัญเมื่อคุณสร้างสำเนาสำรองที่แก้ไข symlink คุณอาจต้องการทำเช่นนั้นถ้าคุณรู้ว่าคุณมีสัญลักษณ์เชื่อมโยงหลายด้านล่างต้นไม้ที่แก้ไขตำแหน่งนอกต้นไม้ แต่สิ่งที่เหลือนอกต้นไม้นั้นไม่สำคัญสำหรับคุณ
Mel

3

ฉันคิดว่าโดยค่าเริ่มต้นตัวจัดการไฟล์ของคุณกำลังพยายามหาขนาดของไฟล์ที่ซอฟต์ลิ้งค์ชี้ไปในขณะที่duให้ขนาดของไดเร็กตอรี่และซอฟต์ลิงค์ด้วยตัวเอง แต่ไม่ใช่ไฟล์ที่ชี้ไป

เพื่อชี้แจง

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

ฉันไม่แน่ใจว่านี่คือสิ่งที่คุณถามหรือไม่ แต่ถ้าเป็นเช่นนั้นฉันเชื่อว่านี่อาจเป็นคำตอบสำหรับคำถามของคุณ


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