เหตุใดจึงขี้เกียจ MNT_DETACH หรือ `umount -l` ไม่ปลอดภัย / อันตราย?


10

ฉันได้อ่านไม่กี่แห่งที่umount -lไม่ปลอดภัย:

ในคำตอบของ @cas :

ไม่ได้ใช้umountของ--lazyตัวเลือกถ้าคุณดูแลเกี่ยวกับเมื่อไดรฟ์ภายนอกสามารถถอดออกได้อย่างปลอดภัย

ความคิดเห็นโดย @frostschutz :

umount --lazyไม่ปลอดภัยและไม่สามารถทำให้ปลอดภัย [ ... ]

util-linux ความคิดเห็นนี้โดย Ruediger Meier :

คุณควรหลีกเลี่ยงการใช้umount -lงานเลย เพียงแค่ฆ่ากระบวนการทั้งหมดใช้/tmp/mountpointแล้ว umount -lไม่มีตัวเลือก

ทำไมumount -lไม่ปลอดภัย / อันตราย

มีวิธีทำให้ปลอดภัยหรือไม่?

คำตอบ:


12

unmount ที่ขี้เกียจสร้างตัวยึดแมวของSchrödinger

  • คุณไม่สามารถรู้ได้ว่าอุปกรณ์นั้นถูกถอดออกจริงหรือไม่
  • ระบบไฟล์ "unmount" ยังคงสามารถเข้าถึงได้ในบางสถานการณ์
  • ระบบไฟล์ "unmounted" ไม่สามารถเข้าถึงได้ในบางสถานการณ์

มีการรักษาความปลอดภัยที่ผิดพลาด : ปรากฏว่าระบบไฟล์ถูกถอดออก แต่ในความเป็นจริงมันถูกซ่อนเฉพาะจากเนมสเปซ / heirarchy

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

ซึ่งหมายความว่าหากคุณumount -l /media/hddคุณจะไม่สามารถเข้าถึงได้อีกต่อไป/media/hdd/dir/file(ชื่อพา ธ สัมบูรณ์) แต่ถ้าคุณมีกระบวนการที่มีไดเรกทอรีทำงาน/media/hddมันจะยังสามารถสร้างกระบวนการใหม่ที่สามารถอ่าน / เขียน./dir/file(ชื่อพา ธ สัมพัทธ์)

หากคุณพยายามยกเลิกการต่อเชื่อมอุปกรณ์คุณจะได้รับข้อความที่สับสน:

# umount --force --all-targets /dev/sdb2
umount: /dev/sdb2: not mounted

สิ่งนี้ทำให้ดูเหมือนว่าอุปกรณ์ไม่ได้เมานท์ แต่ยังสามารถมีกระบวนการที่เขียนลงดิสก์ได้

เนื่องจากมีสถานการณ์ที่ไม่ชัดเจนหลายอย่างที่อาจทำให้เกิดการติดตั้ง umountระบบไฟล์อาจยังไม่ถูกถอดออกแม้ว่าlsof +f -- /dev/deviceจะไม่มีอะไรแสดงก็ตาม

คุณจะไม่มีทางรู้ว่าระบบไฟล์นั้นเลิกเมานท์จริงหรือไม่ ไม่มีวิธีการค้นหา

อุปกรณ์ที่ถอดออกได้

หากคุณทำumount -lดิสก์แบบถอดได้แสดงว่าคุณอยู่ในบริเวณขอบรก: คุณไม่สามารถแน่ใจได้ว่าข้อมูลที่ค้างอยู่ทั้งหมดถูกเขียนลงดิสก์

สิ่งที่ดีที่สุดที่คุณสามารถทำได้หลังจากumount -lคือเพื่อให้แน่ใจว่าการเขียนทั้งหมดเสร็จสมบูรณ์และป้องกันการเขียนในอนาคตแต่คุณก็ยังไม่สามารถรับประกันได้ว่ามันถูกยกเลิกการต่อเชื่อมแล้ว

สำหรับอุปกรณ์ที่ถอดออกได้หากอุปกรณ์ไม่ได้ถูกถอดออกอย่างถูกต้องพฤติกรรมแปลก ๆ อาจส่งผลให้เกิดการเชื่อมต่อครั้งต่อไป:

  • อุปกรณ์ที่จะได้รับชื่ออุปกรณ์ที่เพิ่มขึ้นคือจะกลายเป็น/dev/sdb /dev/sdcข้อความบันทึกเคอร์เนลยังอาจหมายถึงแม้ว่าอุปกรณ์ที่ไม่มีอยู่แล้วเป็นไฟล์ภายใต้/dev/sdb /dev(วิธีเดียวที่ฉันรู้วิธีแก้ปัญหานี้คือการรีบูต)

  • ความเสียหาย btrfs สามารถส่งผลให้ btrfs คาดว่าจะมีระบบไฟล์เดียวที่มี UUID ที่กำหนดอยู่ในครั้งเดียว เคอร์เนลยังคงเห็น UUID เดียวกันที่มีอยู่ในอุปกรณ์แฟนทอมและอุปกรณ์ใหม่ (ฉันต้องสร้าง HDD สำรอง btrfs ของฉันขึ้นมาใหม่)

systemd gotchas


"ไฟล์ใหม่หรือไฟล์ที่มีอยู่สามารถเปิดได้สำหรับการเขียนโดยกระบวนการที่มีไดเรกทอรีทำงานภายในจุดผ่านทางชื่อพา ธ สัมพัทธ์"นี่คือข้อมูลที่ฉันกำลังมองหา คุณมีลิงค์หรือข้อมูลอ้างอิงเพิ่มเติมหรือไม่?
Jonathon Reinhart

@Jonathon ตรวจสอบยอดชาย ฉันต้องการ google เป็นอย่างอื่น กรุณาโพสต์สิ่งที่คุณค้นพบถ้าคุณทำเช่นนี้
Tom Hale

ฉันอ่านumount(2)หลายครั้งเมื่อเร็ว ๆ นี้ มันบอกว่า"ทำการ unmount แบบขี้เกียจ: ทำให้จุดเชื่อมต่อไม่พร้อมใช้งานสำหรับการเข้าถึงใหม่ยกเลิกการเชื่อมต่อระบบไฟล์ทันทีและระบบไฟล์ทั้งหมดที่ติดตั้งอยู่ด้านล่างจากกันและกันและจากตารางเมานท์และทำการ unmount เมื่อจุดเมานท์สิ้นสุด ." แต่น่าเสียดายที่นี่มีรายละเอียดน้อยกว่าที่คุณให้ไว้
Jonathon Reinhart

umount(8)กล่าวว่าระบบไฟล์ไม่ว่าง"ตัวอย่างเช่นเมื่อมีไฟล์ที่เปิดอยู่หรือเมื่อบางกระบวนการมีไดเรกทอรีทำงานอยู่ที่นั่นหรือเมื่อมีการใช้ไฟล์ swap ในนั้น" ไม่เหมือนรายการที่สรุปได้ แต่อาจดีเท่าที่ฉันจะหาได้
Jonathon Reinhart

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