วิธีบังคับให้ unmount ระบบไฟล์ (โดยไม่ต้องตรวจสอบด้วยตนเองว่าทำไมมันถึงยุ่ง)


13

วิธียกเลิกการต่อเชื่อมระบบไฟล์ใน Linux โดยไม่ต้องตรวจสอบสาเหตุที่ไม่ว่าง

ฉันต้องการที่จะทำมันในหนึ่งคำสั่ง ควรจัดการกับแอปพลิเคชันที่ใช้ระบบไฟล์, submounts, container ( lxc-execute -n qqq <command>) และสิ่งอื่น ๆ ทั้งหมด

เพียงแค่ "unmount. ไม่มีการคัดค้าน!" อนุญาตให้ใช้แพตช์เคอร์เนลหรือการกำหนดค่าพิเศษ

ระบบไฟล์ควรถูก unmount จริง ๆ ดังนั้นจึงumount -lไม่ใช่ตัวเลือก ตัวอย่างเช่นสำหรับcryptsetup remove(BTW จะบังคับได้cryptsetup removeอย่างไรUpdate: cryptsetup luksSuspendแต่คุณจะไม่สามารถทำได้cryptsetup luksResumeถ้าไม่ใช่ LUKS)

วิธีทำให้ filehandles ทั้งหมดในระบบไฟล์นั้นไม่ถูกต้อง

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

ป.ล. รู้แล้วว่าเมาfuserlsof | grepท์cat /proc/*/mounts | grepและล้าสมัย "แพตช์ badfs" ที่ไม่ทำงาน

คำตอบ:


3

ใช้คีย์ผสมMagic SysRq : Alt+ SysRq+u

โปรดทราบว่าคุณควรทำการซิงค์ฉุกเฉินก่อน: Alt+ SysRq+s

โปรดทราบว่าในบางคีย์บอร์ด (โดยเฉพาะที่ใหม่กว่า) คุณต้องใช้PrtScมากกว่าSysRq


ไม่จำเป็นต้องใช้ปุ่ม Shift เพียงปุ่ม Alt + SysRq + สิ่งที่ควรค่าแก่การกล่าวถึง (โดยเฉพาะอย่างยิ่งสำหรับผู้ใช้แล็ปท็อป) คือคุณสามารถกด Alt กดและปล่อย SysRq จากนั้นกดตัวอักษรแล้วปล่อยตัวเลข / หลักและปล่อย Alt สิ่งสำคัญที่สุดคือการกำหนดระบบไฟล์ทั้งหมดเป็นแบบอ่านอย่างเดียวดังนั้นจึงเป็นสิ่งที่ต้องใช้ก่อนที่จะทำการรีบูตโดยไม่ใช้วิธีการทั่วไปในการบอกระบบไฟล์แบบอ่านอย่างเดียว
Gilles 'หยุดชั่วร้าย'

@Gilles: ขอบคุณสำหรับเคล็ดลับเกี่ยวกับปุ่ม Shift ฉันแก้ไขคำแนะนำของฉันแล้ว
sml

1. จะเป็นเพียงการอ่านอย่างเดียวเท่านั้น มันไม่ได้เป็นที่ต้องการ ตัวอย่างเช่นฉันต้องการยกเลิกการต่อเชื่อมและติดตั้งใหม่โดยใช้ FUSE 2. สิ่งที่แย่คือฉันต้อง "-o remount, rw" ระบบไฟล์รูทและสิ่งอื่น ๆ หลังจากนั้นเพื่อกลับสู่การทำงานปกติ
วิ

3

umount --forceหรือumount -f(เทียบเท่า)

หากล้มเหลวให้ใช้:

umount --lazyหรือumount --l(เทียบเท่า)

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


แน่นอน--forceไม่ทำงาน และ--lazyไม่ใช่การ unmount จริง - มันไม่ปล่อยสิ่งต่างๆ LVM, loopback หรือ cryptsetup
วิ

1
umount -f

สามารถใช้เพื่อบังคับให้ unmount เมื่อระบบไฟล์ไม่ว่าง


1
มันไม่เคยได้ผลสำหรับฉัน: umount2: Device or resource busyความสำเร็จเพียงบางส่วนเท่านั้นคือเมื่อฉันทดลองใช้ patch badfs
วิ

ฉันมีข้อความ "ข้อผิดพลาด" เหมือนกัน แต่มันก็ใช้งานได้ ระบบไฟล์ถูก unmount หลังจาก umount -f
IanH

3
ลองใช้ "lazy umount", umount -l มันจะติดเสมอ แต่สามารถสร้างระบบไฟล์ที่ไม่เสถียร
Jimmy Hedman

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

@deesto, Lazy unmount ไม่ได้ทำให้อุปกรณ์บล็อกที่ไม่ได้ทำการบล็อก (ระดับเสียง LVM, LUKS container, loopback) ไม่ได้รับการอ้างอิง
วิ

1

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

แต่ไม่ต้องกังวลมีวิธีหนึ่งที่จะทำให้ทั้งหมดนี้เป็นคำสั่งเดียว: สร้างเชลล์ / Perl สคริปต์ซึ่งฆ่ากระบวนการที่ต้องการ, unmounts container, submounts และในที่สุดก็ unmount mount อื่น ๆ จากนั้นคุณสามารถโทรหาสคริปต์ตามต้องการ ตอนแรกมันใช้งานได้ดีกว่าสำหรับคุณ แต่หลังจากที่คุณได้สคริปต์แล้วทุกอย่างก็เป็นของเด็ก ๆ :)


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