การย้ายไฟล์ไปยังไฟล์ที่กำลังอ่าน


10

เมื่อไฟล์ถูกย้ายและไฟล์ปลายทางมีอยู่แล้วและกำลังอ่านอยู่การดำเนินการจะสำเร็จหรือไม่ มันจะขึ้นอยู่กับระยะเวลาที่การอ่านไฟล์ปลายทางนานเท่าไร?

คำตอบ:


9

การดำเนินการอ่านจะสำเร็จไม่ว่าจะใช้เวลานานเท่าใดในการดำเนินการอ่าน

ทำไมและทำงานอย่างไร

เมื่อการดำเนินการอ่านเริ่มขึ้นInodeของไฟล์จะถูกใช้เป็นจุดจับซึ่งมีการอ่านเนื้อหาของไฟล์

เมื่อย้ายไฟล์อื่นไปยังไฟล์เป้าหมายผลลัพธ์จะเป็นไอโหนดใหม่ซึ่งหมายความว่าเนื้อหาทางกายภาพของไฟล์บนดิสก์จะถูกวางไว้ที่อื่นและเนื้อหาต้นฉบับของไฟล์ที่กำลังอ่านจะไม่ถูกสัมผัส

สิ่งเดียวที่พวกเขามีเหมือนกันคือเส้นทาง / ชื่อไฟล์ของพวกเขาในขณะที่ inode และตำแหน่ง phyiscal บนดิสก์เปลี่ยนแปลง

เมื่อการดำเนินการอ่านเสร็จสิ้น (ไม่มีกระบวนการอื่นใดที่ยังคงมีตัวจัดการไฟล์ที่เปิดอยู่บนไฟล์เก่าและไม่มีฮาร์ดลิงก์อื่น ๆ ที่อ้างถึง inode ของมัน) ข้อมูลเก่าจะถูกยกเลิก

เมื่อการดำเนินการย้ายเสร็จสมบูรณ์ไฟล์จะมีหมายเลขดัชนีไอโหนดใหม่

ท่านสามารถแสดงไฟล์ inode ls -i /tmp/some-fileหมายเลขดัชนีการใช้

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


1
คุณลืมที่จะพูดถึงฮาร์ดลิงก์: เมื่อการดำเนินการอ่านเสร็จสิ้นหากไอโหนดนั้นเชื่อมโยงจากรายการไดเรกทอรีอื่นข้อมูลจะไม่ถูกลบออก (เพราะยังมีชื่ออยู่)
cjm

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