OpenWrt之U盤SD卡掛載overlay

2021-09-30 00:00:47 字數 3599 閱讀 5440

官方參考

掛載擴充套件儲存指令碼:

#!/bin/sh

# 一鍵指令碼掛載rootfs到sd卡,u盤則改mmcblk0p1為sda1

umount /dev/mmcblk0p1

mkfs.ext4 /dev/mmcblk0p1 -f

mount /dev/mmcblk0p1 /mnt

tar -c /overlay -cvf - .

|tar -c /mnt -xf -

umount /mnt

block detect > /etc/config/fstab

sed -i s/option$'\t'enabled$'\t'\'0\'/option$'\t'enabled$'\t'\'1\'/ /etc/config/fstab

sed -i s#/mnt/mmcblk0p1#/overlay# /etc/config/fstab

cat /etc/config/fstab

製作exroot 需要的前提條件:

首先要使用usb或者 micro sd 卡槽,需要安裝必須的模組核心模組:

sd:opkg install kmod-sdhci kmod-sdhci-mt7620,在 /dev 會看到 mmcblk0 檔案,就是 micro sd。

u盤:kmod-usb-core kmod-usb-ohci kmod-usb-uhci kmod-usb-storage kmod-usb-storage-extras kmod-usb2 kmod-usb3 kmod-fs-ext4 kmod-fs-vfat kmod-scsi-core,並不是全部必須。

然後再安裝一些檔案系統相關的軟體包。

block-mount kmod-fs-ext4 e2fsprogs fdisk

指令碼解讀(sd為例)

首先是把 sd 卡格式化成 ext4 格式。:mkfs.ext4 /dev/mmcblk0p1

然後把現有的檔案拷貝到sd卡中。/overlay 目錄的意義的可以看後面。

mount /dev/mmcblk0p1 /mnt ; tar -c /overlay -cvf - . | tar -c /mnt -xf - ; umount /mnt

建立 mmcblk0p1 的掛載配置,將配置資訊(sd卡的uuid,block info也可檢視)重定向到fstab 檔案中並把/mnt/mmcblk0p1改為voerlay,0改為1。實現自動掛載。

block detect > /etc/config/fstab;\

sed -i s/option$'\t'enabled$'\t'\'0\'/option$'\t'enabled$'\t'\'1\'/ /etc/config/fstab; \

sed -i s#/mnt/mmcblk0p1#/overlay# /etc/config/fstab; \

cat /etc/config/fstab;

mount /dev/mmcblk0p1 /overlay

現在可以看到,/overlay 的空間已經增加了。但是這個是時候overlay與檔案系統中的內容並不關聯,重啟之後無論修改那哪個下面的檔案,對應的都會發生改變。

df -h可以檢視是否成功

#執行block detect得到以下資訊重定向到fstab並修改target與enable

#預設配置

config 'global'

option anon_swap '0'

option anon_mount '0'

option auto_swap '1'

option auto_mount '1'

option delay_root '5'

option check_fs '0'

#關於掛載exroot的配置

config 'mount'

option target '/mnt/mmcblk0p1'

option uuid 'ac3174ef-7c68-47c1-b3c8-5613d138e9d4'

option enabled '0'

注意有坑

如果不想使用exroot了,這個時候修改/etc/config/fstab檔案中enable為0,重啟發現未生效。甚至刪除相關配置資訊,依然能夠掛載。原因是這裡修改的fstab並不是openwrt路由器啟動所讀取的配置檔案。檢視啟動日誌可以發現:

openwrt在載入檔案系統時,所讀取的fstab如下所示:對應的fstab是板載emmc中的配置檔案中的fstab

block: attempting to load /tmp/jffs_cfg/upper/etc/config/fstab

我們在最開始修改/etc/config/fstab時,修改的就是這個fstab,然後將/overlay下的資訊拷貝到sd卡中。配置完成後重啟,依然讀的是板載emmc中的fstab,然後配置檔案中設定是通過sd卡的uuid找到裝置掛載為/voerlay。

如果關機重啟之前拔掉sd卡則提示block: extroot: cannot find device with uuid ac3174ef-7c68-47c1-b3c8-5613d138e9d45秒內再次嘗試,還未找到,則mount_root: switching to jffs2 overlay選擇板載emmc對應的分割槽掛載。所以,其實配置檔案不修改的情況下,只需要關機拔出sd卡重啟即可即可。如想修改檔案則需要在未掛載sd卡時修改/etc/config/fstab檔案。

/overlay 是什麼意思呢?

openwrt 一般使用的檔案系統是 squashfs ,這個檔案系統的特點就是:唯讀。

那,乙個唯讀的檔案系統,是怎麼做到儲存設定和安裝軟體的呢?

這裡就是使用乙個 /overlay 的分割槽,overlay顧名思義就是覆蓋在上面一層的意思。

雖然原來的檔案不能修改,但我們把修改的部分放在 overlay 分割槽上,然後對映到原來的位置,讀取的時候就可以讀到我們修改過的檔案了。

但為什麼要用這麼複雜的方法呢? openwrt 當然也可以使用 ext4 檔案系統,但使用 squashfs + overlay 的方式有一定的優點。

首先 squashfs 是經過壓縮的,在路由器這種小型 rom 的裝置可以放下更多的東西。

然後 openwrt 的恢復出廠設定也要依賴於這個方式。在你捅 reset 重置的時候,它只需要把 overlay 分割槽清空就可以了,一切都回到了剛刷進去的樣子。

如果是 ext4 檔案系統,就只能夠備份每個修改的檔案,在恢復出廠設定的時候複製回來,十分複雜。

當然,squashfs + overlay 也有它的缺點,修改檔案的時候會占用更多的空間。

首先你不能夠刪除檔案,因為刪除檔案實際上是在 overlay 分割槽中寫入乙個刪除的標識,反而占用更多的空間。

另外在修改檔案的時候相當於增加了乙份檔案的副本,占用了雙份的空間。

U盤 SD卡掛載

說明 u盤和sd卡大部分操作上是一樣的,因此下面將用u盤進行說明,如無特別說明在u盤上的操作在sd卡上同樣有效 u盤和sd卡里的檔案系統比較常用的是fat32 這裡也是基於fat32來說明的 掛載 掛載前首先要保證u盤已經被系統識別到了。被識別到了後在 dev下會有節點顯示,需要注意的是u盤的節點和...

OpenWrt 自動掛載sd卡

在編譯的時候經常會遇到flash不夠用的問題,怎麼解決呢?可以通過掛載usb或者sd卡解決問題。make kernel menuconfig依次進入選項device drivers mmc sd sdio card support 依照上圖在相關選項前打上 號。進入kernel modules na...

Linux下給掛載U盤或者SD卡

對於armlinux來說,第一次使用u盤時,u盤這個檔案目錄是不能直接進入的,我們需要對其進行掛載,然後再接下來的使用中就可以直接進行使用了。通過再網上查資料,現將u盤在liunx下的掛載方法記錄下來 第一步 插入u盤,如果能夠識別出u盤,則會列印出一些資訊 第二步 檢視u盤系統分配給u盤的裝置名 ...