页面

分类

Openwrt: Rootfs on external storage (extroot)

2014/6/16, by wingfire ; 分类: 计算机技术; 0 comments

参考 http://wiki.openwrt.org/doc/howto/extroot?s[]=overlay

understand extroot

1.如果flash芯片直连到Soc,并且被Linux直接寻址,称其为“raw flash” 2。如果在其间有额外的控制芯片,称为“FTL(Flash Translation Layer) flash”

/overlay目录:

系统会将/rom和/overlay两个目录合并成root,其中/rom是只读的,/overlay是可写的,并且会覆盖隐藏掉/rom中同名的部分。

白化:

When the system is asked to delete a file that is in /rom, it instead creates a corresponding entry in /overlay, a whiteout. A whiteout is a symlink to (overlay-whiteout) that mostly behaves like a file that doesn't exist.

Pivot Root

mount usb disk 到/mnt, 复制/overlay到/mnt:

tar -C /overlay -cvf - . | tar -C /mnt -xf -

或者/到mnt:

mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt -xf -
umount /tmp/cproot

对于current分支('Barrier Breaker')的openwrt,要通过block_mount来实现extroot。

首先安装block_mount,然后用block detect的输出信息填入 /etc/config/fstab. 对于Pivot Root模式:

config mount
    option target '/'
    option uuid '<UUID>'
    option enabled '1'
    option options 'rw,async,noatime'
    option is_rootfs '1'

部分用block detect的信息填入,如果有多个usb存储设备,要避免写/dev/sda1这样具体的设备,因为会受加载顺序影响。

特别的,这里的target要写成 ‘/’,就可以mount整个root了。

访问原来的overlay

config mount
option target   /overlay-boot
option device   /dev/mtdblock3
option fstype   jffs2
option options  rw,sync
option enabled  1
option enabled_fsck 0

升级软件包

一种方法是:

opkg upgrade $(opkg list-upgradable)

不要这么做!这会升级内核(don't do that):

应该这么做:

opkg upgrade $(opkg list-upgradable | awk '($1 !~ "^kmod|Multiple") {print $1}')

如果是系统升级,可以先备份list-upgradable,sysupgrade完成后,在安装所有软件包。

添加评论:

 
 the email would not displayed
 

您可以使用 Markdown 语法。

您必须启用浏览器的 JavaScript 功能才能发表评论。