เมานต์ดิสก์ที่ไม่ว่างเป็นโหมดอ่านอย่างเดียว


19

ฉันต้องการบังคับให้พาร์ติชันดิสก์อ่านโหมดอย่างเดียวและเก็บไว้เป็นแบบอ่านอย่างเดียวนานกว่า 30 นาที

สิ่งที่ฉันได้ลอง:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    ปัญหา : สิ่งนี้ทำให้อุปกรณ์เกิดข้อผิดพลาดเนื่องจากบางกระบวนการใช้พาร์ติชัน ฉันไม่ต้องการฆ่ากระบวนการโดยใช้ดิสก์ ฉันต้องการจำลองดิสก์ในทันทีที่อ่านอย่างเดียวเมื่อกระบวนการยังคงใช้งานอยู่

  2. ใช้คีย์ sysrq magic ดังด้านล่าง

    echo u > /proc/sysrq-trigger
    

    ปัญหา : สิ่งนี้จะทำให้พาร์ติชันดิสก์ทั้งหมดเป็นแบบอ่านอย่างเดียว (แม้ว่าอุปกรณ์จะไม่ว่าง) แต่หลังจาก 20-30 นาทีเครื่องจะรีบูตตัวเอง เครื่องบางเครื่องกำลังรีบูตทันทีเมื่อคำสั่งนี้ถูกดำเนินการ ไม่แน่ใจว่าเกิดจากการรีบูตครั้งนี้หรือไม่ ฉันไม่ต้องการให้เครื่องรีบูตตัวเองและต้องการให้ดิสก์อยู่ในโหมดอ่านอย่างเดียวเป็นเวลา 30+ นาที

คำถาม : มีวิธีใดที่ดีกว่าที่ฉันสามารถบังคับให้พาร์ติชันดิสก์เดียวอ่านอย่างเดียวและอยู่ในสถานะนั้นเป็นเวลาครึ่งชั่วโมงและนำมันกลับไปที่โหมดอ่าน - เขียนโดยไม่ทำให้กระบวนการรีบูตใด ๆ ?


3
คุณเคยคิดfsfreeze -fไหม มันไม่ได้ติดตั้งระบบไฟล์เป็นแบบอ่านอย่างเดียว fsfreeze -uแต่มันบล็อกนักเขียนทั้งหมดจนกว่า แต่มันก็คล้ายกัน ...
Celada

ขอบคุณ Celada! เป็นความคิดที่ดี! .. ตอนนี้ฉันไม่มี fsfreeze ทำงานในเครื่องของฉัน แต่ฉันจะลองสิ่งนี้
AdithyaCS

ฉันพยายามfsfreeze -fและมันเป็นกรณีของฉันมันเป็น "os freeze" มากกว่า อาจเป็นเพราะการเขียนถูกบล็อกแทนที่จะถูกปฏิเสธ?
Piotr Findeisen

fsfreezeเปลี่ยนระบบของฉันไม่สามารถเข้าถึงได้และฉันไม่สามารถป้อนคำสั่งยกเลิกการทำน้ำแข็งไม่สามารถเปลี่ยนกลับไปเป็นเทอร์มินัลและต้องรีบูตเครื่องของฉันใหม่ ดังนั้นถูกเตือน ! :)
อเล็กซ์

คำตอบ:


16

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

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

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

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggerเป็นวิธีที่ค่อนข้างสุดขีดในการบังคับให้ remounting เป็นแบบอ่านอย่างเดียวเนื่องจากมีผลกับระบบไฟล์ทั้งหมด มันมีความหมายเป็นวิธีสุดท้ายทิ้งให้ระบบไฟล์อยู่ในสถานะที่สะอาดก่อนรีบูตเครื่อง

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


2
น่าเสียดายที่นี่ไม่ใช่โซลูชันแบบพกพา ในราสเบอร์รี่ฉันได้รับ: "การอนุญาตถูกปฏิเสธ" เมื่อฉันวิ่งecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen

.. และecho u > /proc/sysrq-triggerไม่เพียง แต่สุดขั้วเท่านั้น แต่ยังสามารถบังคับให้คุณรีบูตหากคุณต้องการติดตั้ง RW อีกครั้ง เมื่อฉันลองทำสิ่งนี้แล้วให้ remount (พร้อมmount..) dmesgพูดว่า "ไม่สามารถ remount RDWR เนื่องจากรายการ inode ของเด็กกำพร้าที่ยังไม่ได้ประมวลผลโปรด umount / remount แทน"
Piotr Findeisen

@PiotrFindeisen คุณเรียกใช้มันในฐานะ root หรือไม่?
hanshenrik

@ hanshenrik ฉันเดาอย่างนั้น
Piotr Findeisen

4

ใช้mountตัวเลือกบังคับของ (สมมติว่าการเมานท์ของคุณมีหนึ่งตัว GNU mountไม่ได้ทำเช่น BSD และ macOS เป็นต้น):

mount -f -o remount,ro /mount/point

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


1
@psusi no มันอนุญาตให้ฉันติดตั้งใหม่/พาร์ติชันext4 ของฉัน
Piotr Findeisen

2
ปรากฎว่าฉันกำลังคิดอยู่umount -fแต่ฉันแค่พยายามลองใหม่เพื่อ ro และในขณะที่ -f ทำให้คำสั่งไม่ส่งคืนข้อผิดพลาดระบบแฟ้มนั้นแท้จริงแล้วไม่ใช่ทำให้อ่านได้อย่างเดียว
psusi

1
@psusi ไม่แปลกใจเลย ฉันไม่คาดหวังว่าจะมีวิธีการใดที่จะทำงานได้ในทุกกรณี นี้ทำงานให้ฉัน repeatably (พาร์ทิชันราก ext4 ในราสเบอร์รี่สำหรับเรื่อง) - และฉันหมายความremountingเพื่อ RO ไม่ละเลยข้อผิดพลาด - ดังนั้นผมคิดว่าจะทำงานให้บางส่วน แต่ไม่ทุกกรณีอื่น ๆ ขออภัยนี่ไม่ได้รวมของคุณ
Piotr Findeisen

13
คนภูเขากล่าวว่าเป็น-f --fakeอ้างถึง: "ทำให้ทุกอย่างเสร็จสิ้นยกเว้นการเรียกใช้ระบบจริงหากไม่ชัดเจนการติดตั้งระบบไฟล์ '' ปลอม '' ตัวเลือกนี้มีประโยชน์เมื่อใช้ร่วมกับแฟล็ก -v เพื่อพิจารณาว่าคำสั่ง mount กำลังพยายามทำอะไร ทำได้นอกจากนี้ยังสามารถใช้เพื่อเพิ่มรายการสำหรับอุปกรณ์ที่ติดตั้งไว้ก่อนหน้านี้ด้วยตัวเลือก -n ตัวเลือก -f ตรวจสอบระเบียนที่มีอยู่ใน / etc / mtab และล้มเหลวเมื่อมีบันทึกอยู่แล้ว การตรวจสอบนี้ทำโดยเคอร์เนล) "
Will Manley

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