linux系统镜像备份

rootfs制作成功后,会参与打包,和kernel、uboot等img文件打包成一个完整镜像。
烧录镜像后,可能会出现rootfs还需重新安装软件或者配置修改,以下是操作方式记录。

基于现有的rootfs.img 修改

注意事项:如果需要基于现有的rootfs 安装其他软件,挂载前应先调整rootfs大小

根据现实需求功能修改,仅供参考

1
2
3
e2fsck -p -f rootfs.img
# 调整大小为10G
resize2fs rootfs.img 10240M

1、建立roofs文件夹,挂载现有的rootfs.img

1
2
sudo mount rootfs.img ./rootfs

2、挂载本机网络通信等设备到rootfs/,这样才能使用本机网络进行更新

1
2
3
4
5
sudo mount -t proc /proc rootfs/proc
sudo mount -t sysfs /sys rootfs/sys
sudo mount -o bind /dev rootfs/dev
sudo mount -o bind /dev/pts rootfs/dev/pts

3、使用chroot命令进入rootfs

1
sudo chroot rootfs/

4、安装本次软件

1
2
3
4
apt-get update
# xxx 为更新软件 如有必要,需要更换、/etc/apt/source.list 文件源
apt-get install xxx

5、系统性配置修改
此项根据具体需求更改,若无需求跳过此步骤

  • 修改调试连接显示logo
1
2
3
4
5
修改/etc/update-motd.d
00-header:
TERM=linux toilet -f standard -F gay xxxx
帮助信息
10-help-text:
  • firefly 修改输出logo
1
2
3
4
5
vim /etc/update-motd.d/00-header
修改
TERM=linux toilet -f standard -F gay Firefly
gay 后面文字
-f 字体 ( 目录在 /usr/share/figlet/ )
  • 修改hostname
1
echo "xxx" > /etc/hostname
  • 修改logout session 注销选项 去除suspend

vim /usr/share/polkit-1/actions/org.freedesktop.login1.policy

1
2
3
4
5
6
7
<action id="org.freedesktop.login1.suspend-multiple-sessions">

<action id="org.freedesktop.login1.suspend">

把 <allow_active>yes</allow_active> 改为
<allow_active>no</allow_active>

  • 修改软键盘

思路:软键盘是写配置文件,把老镜像的配置文件替换新镜像的配置文件

1
2
3
4
# 老镜像 打包.config 在home/xx
tar czvf config_324.tar.gz .config/
# 新镜像 删除原有.config 解压
tar xzvf config_324.tar.gz -C .
  • 桌面背景图
1
2
3
4
5
6
7
8
9
// 桌面背景图保存目录
usr/share/lubuntu/wallpapers

// 配置文件目录中 修改加载图片
// /home/username/.config/pcmanfm-qt/lubuntu/settings.config

xubuntu:

usr/share/xfce4/backdrops/xubuntu-wallpaper.png
  • 屏幕旋转

/etc/default/xrandr

  • panel 状态栏大小

/etc/xdg/xdg-xubuntu/xfce4/panel

1
2
3
<property name="background-style" type="uint" value="0"/>
<property name="size" type="uint" value="24"/> 修改

  • 修改onboard 不能移动

TouchHandles.py 修改注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class TouchHandles(object):
""" Full set of resize and move handles """
active = False
opacity = 1.0
rect = None

def __init__(self):
self.handles = []
self._handle_pool = [TouchHandle(Handle.MOVE)]
# ,
# TouchHandle(Handle.NORTH_WEST),
# TouchHandle(Handle.NORTH),
# TouchHandle(Handle.NORTH_EAST),
# TouchHandle(Handle.EAST),
# TouchHandle(Handle.SOUTH_EAST),
# TouchHandle(Handle.SOUTH),
# TouchHandle(Handle.SOUTH_WEST),
# TouchHandle(Handle.WEST)]
  • 禁止屏保启动
1
2
gsettings set org.gnome.desktop.screensaver lock-enabled false

  • 删除更新通知程序
1
2
sudo apt-get remove update-notifier

6、退出执行

1
2
3
4
5
6
7
8
exit

sudo umount rootfs/proc
sudo umount rootfs/sys
sudo umount rootfs/dev/pts
sudo umount rootfs/dev
# 卸载镜像
sudo umount rootfs

7、重新调整镜像大小

1
2
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img

到这里就结束了,可以用打包工具重新打包系统update镜像

8、其他指令

1
2
3
// 查看
file rootfs.img

自动挂载本机设备脚本
使用方法:
建立一个 ch-mount.sh 脚本文件

  • 使用前需要

    1
    sudo mount rootfs.img ./rootfs
  • 增加可执行权限

    1
    chmod +x ch-mount.sh
  • 挂载设备
    sudo bash ch-mount.sh -m rootfs/

  • 卸载设备
    ./ch-mount.sh -u rootfs/

注意:一定要带文件符 /

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
#
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
sudo umount ${2}dev
sudo umount rootfs

}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi


其他

镜像挂载处理出现问题
1、temporary failure resolving xxxx

处理方式:

1
2
3
4
5
6
/etc/resolv.conf 增加

nameserver 8.8.8.8
或者
nameserver 114.114.114.114