ทำให้อ่านได้อย่างเดียว / etc เขียนได้


11

ฉันกำลังจัดการกับอุปกรณ์ฝังตัวที่ใช้ Linux ผู้ผลิตอุปกรณ์นี้ได้ทำการตั้งค่าเพื่อให้โหลดระบบไฟล์รูทเป็นแบบอ่านอย่างเดียว

จาก / etc / mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

หมายความว่าฉันไม่สามารถแก้ไขไฟล์ภายใน / etc เช่นการเพิ่มผู้ใช้ใหม่

ฉันได้ลองติดตั้งไดเรกทอรีรากใหม่แล้ว:

mount -o remount,rw -t squashfs /dev/root /

แต่ฉันเพิ่งได้รับข้อผิดพลาด

mount: cannot remount block device /dev/root read-write, is write-protected

ฉันค้นหาข้อผิดพลาดนี้และมีคนพูดว่าใช้ blockdev ระบบไม่ได้ติดตั้ง blockdev ดังนั้นฉันจึงรวบรวมและคัดลอกมันข้าม จากนั้นฉันก็วิ่ง

blockdev --setrw rootfs

แต่ฉันพบข้อผิดพลาดอีกครั้ง:

blockdev: cannot open rootfs: No such file or directory

เป็นไปได้ที่จะทำให้ / etc สามารถเขียนได้ถ้ายังไม่ได้? ฉันมีสิทธิ์เข้าถึงระบบ แต่ไม่สามารถเข้าถึงระบบไฟล์ 'ออฟไลน์' การเปลี่ยนแปลงทั้งหมดจะต้องทำผ่านคำสั่ง Bash

คำตอบ:


19

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

อีกทางเลือกหนึ่งคือติดตั้งระบบไฟล์/etcอื่น มันอาจจะผ่านทางสหภาพติดถ้าได้รับการสนับสนุนโดย kernel ซึ่งผสานสองระบบไฟล์ร่วมกันโดยปกติจะมีหนึ่งในการบันทึกระบบไฟล์เฉพาะการเปลี่ยนแปลงไปยังฐานอ่านอย่างเดียวระบบแฟ้ม

ตรวจสอบการสนับสนุน AUFS_FS หรือ OVERLAY_FS ในการกำหนดค่าเคอร์เนล

ตัวอย่างเช่นการรวมไดเร็กทอรีเข้าด้วยกัน/tmp(หวังว่าจะเขียนได้ แต่อาจอยู่tmpfsในหน่วยความจำ (ดังนั้นจึงไม่คงอยู่ตลอดการบูทใหม่) ในกรณีของคุณหากระบบไม่มีที่เก็บข้อมูลแบบถาวรที่สามารถเขียนได้)

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
      -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
       overlay /etc

จากนั้นจะเขียนได้และการปรับเปลี่ยนที่คุณทำกับมันจริงจะถูกเก็บไว้ใน/etc/tmp/etc/upper

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

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

จากนั้น/etc/passwdจะสามารถเขียนได้ แน่นอนคุณสามารถทำเช่นนั้นได้ทั้งหมด/etcแทน ( cp -a /etc /tmp && mount --bind /tmp/etc /etc)


ระบบฝังตัวบางตัวสามารถแทนที่ไฟล์ใน/etcเวลาบูตขึ้นอยู่กับการตั้งค่าบางอย่างใน nvram ดังนั้นหากต้องการเปลี่ยนไฟล์ใน/etcคุณจะต้องตั้งค่าตัวแปรระบบ "เวทย์มนตร์" ให้คอมมิตเป็น nvram จากนั้นทำการรีโหลดการกำหนดค่าหรือรีบูต เราเตอร์บ้านส่วนใหญ่ทำงานแบบนั้น แต่กลไกและคำสั่งที่แน่นอนนั้นเป็นระบบเฉพาะ
Satō Katsura

ที่สมบูรณ์แบบ! อุปกรณ์ไม่รองรับการเมาท์แบบซ้อนทับ แต่การผูกไฟล์ที่กำหนดเองไว้กับไฟล์ใน / etc นั้นทำงานได้ดีมาก! ขอบคุณสำหรับความช่วยเหลือของคุณ.
Joshua Walsh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.