使只讀 /etc 可寫
我正在處理執行 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 可寫?我對系統具有 root 訪問權限,但我無法“離線”訪問文件系統,所有更改都必須通過 Bash 命令完成。
squashfs
是一個只讀的壓縮文件系統。它沒有規定在創建後對其進行修改。因此,即使可以使底層塊設備可寫,您也無法對其進行寫入。您需要使用您的修改創建整個文件系統的新 squashfs 映像,並將其刻錄到儲存該文件系統的儲存設備,這在實時系統中會出現問題。另一種選擇是在
/etc
. 如果核心支持,它可以通過聯合掛載,它通常將兩個文件系統合併在一起,一個文件系統只記錄對基本只讀文件系統的更改。檢查核心配置中對 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
將是可寫的。當然,您也可以對整個 of 執行此操作/etc
。(cp -a /etc /tmp && mount --bind /tmp/etc /etc
)。