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就是备份出来的根文件系统。