2. 根文件系统备份¶
在“Buildroot根文件系统的构建”章节,我们讲解了如何构建根文件系统,在“添加软件包”章节,我们讲解了如何添加编译软件包, 在“添加定制内容到Buildroot源码”章节,我们讲解了如何添加自己定制的内容到Buildroot源码在构建时添加到文件系统。
一般情况下,即使不重新编译根文件系统,也可以解压rootfs.tar根文件系统,添加或者修改文件,然后重新压缩成rootfs.tar进行使用, 因此,直接备份板卡的根文件系统不是最优的选择,有可能一些文件损坏、一些多余的运行文件产生等等,都不利于系统的迭代升级。
为了教程的完整性,下面还是介绍如何备份板卡的根文件系统。
2.1. 备份前的准备工作¶
为了顺利的进行根文件系统的备份,我们先要做一些准备工作。
一张已经烧录了板卡镜像的SD卡。
一个用于存储备份镜像的U盘。
用于后期镜像处理的Linux PC或虚拟机。
注意
如果U盘格式为fat32,而fat32格式单文件最大只能是4G,因此要备份的根文件系统大于4G,不能使用fat32格式,格式化为exFAT或者NTFS格式。
2.2. 根文件系统备份¶
2.2.1. 查看根文件系统大小¶
首先用户需要准备一个u盘,注意u盘的容量一定要比当前系统占用的磁盘空间要大, 否则备份过程将会失败,用户可通过在控制台终端输入以下命令,查看当前系统大小:
1 2 3 4 5 6 7 8 9 10 | #查看挂载信息
df -h
#打印信息如下
Filesystem Size Used Available Use% Mounted on
/dev/root 7.0G 38.6M 6.6G 1% /
devtmpfs 85.1M 0 85.1M 0% /dev
tmpfs 245.6M 0 245.6M 0% /dev/shm
tmpfs 245.6M 28.0K 245.5M 0% /tmp
tmpfs 245.6M 20.0K 245.6M 0% /run
|
其中 /
表示当前系统使用大小为38.6M,可用空间6.6G,因此,用户需要确保u盘容量大于38.6M。
2.2.2. 确认U盘设备号¶
插入u盘,确保当前系统识别到相应设备文件,设备文件为:/dev/sdx(x为具体英文字母), 如果系统只有一个u盘设备, 那么该设备文件通常为:/dev/sda,用户可通过输入以下命令确认:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #查看系统设备
fdisk -l
#打印信息如下
Disk /dev/mmcblk1: 7456 MB, 7818182656 bytes, 15269888 sectors
238592 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes
Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
/dev/mmcblk1p1 128,0,1 383,3,16 8192 90111 81920 40.0M c Win95 FAT32 (LBA)
/dev/mmcblk1p2 384,0,1 1023,3,16 90112 15269887 15179776 7412M 83 Linux
Disk /dev/sda: 30 GB, 31914983424 bytes, 62333952 sectors
3880 cylinders, 255 heads, 63 sectors/track
Units: sectors of 1 * 512 = 512 bytes
Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
/dev/sda1 0,130,3 1023,254,63 8192 62333951 62325760 29.7G c Win95 FAT32 (LBA)
|
根据输出信息可知,此处的U盘为/dev/sda1
2.2.3. 挂载U盘并打包根文件系统¶
U盘格式不同挂载命令也不同,对应命令如下,因为fat32格式不需要安装额外软件包,建议使用fat32格式:
1 2 3 4 5 6 7 8 | #fat32格式
mount /dev/sda1 /mnt
#exFAT格式,需要安装exfat-fuse exfat-utils软件包
mount -t exfat /dev/sda1 /mnt
#NTFS格式,需要安装ntfs-3g软件包
mount -t ntfs-3g /dev/sda1 /mnt
|
挂载U盘后将文件系统打包到U盘,执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 | tar -cvf /mnt/rootfs.tar \
--exclude=dev \
--exclude=proc \
--exclude=sys \
--exclude=tmp \
--exclude=run \
--exclude=mnt \
--exclude=media \
--exclude=lost+found \
--exclude=boot \
/*
|
tar -cvf /mnt/rootfs.tar:打包根文件系统到/mnt/rootfs.tar
exclude:排除不需要打包的目录
/*:打包根目录
打包出来的rootfs.tar就是备份出来的根文件系统。