全卡备份
就是把当前的SD卡全部复制到另一张新的SD卡上。要求新卡的容量大于等于旧卡。(并不适用于我。。)
原卡备份
参考:https://blog.csdn.net/qingtian11112/article/details/99825257
安装所需的软件
1 | sudo apt install dosfstools dump parted kpartx |
dosfstools:fat32分区格式化工具
dump:dump & restore 备份工具
parted & kpartx:虚拟磁盘工具
要求当前树莓派所占空间小于 SD 卡空间的 50%,就可以在树莓派内部直接生成镜像。否则要将备份的镜像生成到挂载的外置 SD 卡里面。df -h
查看一下空间使用。
1 | Filesystem Size Used Avail Use% Mounted on |
重点看/dev/root
和/dev/mmcblk0p1
,分别对应root区和boot区。这两个分区就是我们要备份的。可以看到我的树莓派使用的总空间不到2.6GB。
创建一个空白镜像
命令
1 | sudo dd if=/dev/zero of=./DiskShare/raspberrypi.img bs=1M count=3000 |
dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
参数说明:
- if=文件名:输入文件名,默认为标准输入。即指定源文件。
- ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。 - bs=bytes:同时设置读入/输出的块大小为bytes个字节。
- count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
/dev/zero
随意,不存在都行。./DiskShare/raspberrypi.img
是你要创建的镜像的路径。
我创建的镜像大小为 3000 * 1MB,就是3GB,只要大小大于树莓派使用的总空间即可。
分割创建好的镜像文件
首先要看一下树莓派的磁盘结构
1 | sudo fdisk -l |
找到树莓派所在的磁盘,其实通过之前的df -h
命令可以看到boot分区在/dev/mmcblk0p1
分区里,只要没有什么特殊设置,树莓派所在磁盘肯定有/dev/mmcblk0p1
分区。
1 | Disk /dev/mmcblk0: 29.72 GiB, 31914983424 bytes, 62333952 sectors |
第一个分区为 boot 分区,采用 FAT32 格式,从第8192个扇区到第532479 个扇区;第二个分区采用 EXT4,由第532480个扇区到结尾。
1 | sudo parted DiskShare/raspberrypi.img --script -- mklabel msdos |
-1表示到文件末尾。
检查是否成功
1 | sudo parted DiskShare/raspberrypi.img |
输入print free
1 | Model: (file) |
输入quit
退出
挂载镜像并且格式化
1 | sudo losetup -f --show DiskShare/raspberrypi.img |
注意这里输出的loop0
,如果你输出的是其他,把下面步骤的loop0
都替换成你所输出的。
1 | sudo kpartx -va /dev/loop0 |
接着
1 | sudo kpartx -va /dev/loop0 |
此时 loop device 就设置好了,loop0p1
对应的是镜像文件分区上的 /boot
,loop0p2
对应的是 /
。
然后格式化镜像文件文件中的两个分区。
1 | sudo mkfs.vfat -n boot /dev/mapper/loop0p1 |
格式化成功,将两个分区挂载。
创建两个临时文件用于挂载
1 | mkdir DiskShare/backup_boot |
先挂载/boot
1 | sudo mount -t vfat -o uid=pi,gid=pi,umask=0000 /dev/mapper/loop0p1 DiskShare/backup_boot/ |
uid=pi,gid=pi,umask=0000 /dev/mapper/loop0p1 DiskShare/backup_boot/
根据自己的情况修改
再挂载/
1 | sudo mount -t ext4 /dev/mapper/loop0p2 DiskShare/backup_root/ |
df -h
查看是否成功
1 | Filesystem Size Used Avail Use% Mounted on |
可以看到已经成功挂载上去了。
开始备份
先备份
/boot
1
sudo cp -rfp /boot/* DiskShare/backup_boot/
大致会报错
1
cp: failed to preserve ownership for 'DiskShare/backup_boot/System Volume Information': Operation not permitted
不管他,只要文件复制过来就好。
查看一下文件大小是否对应
1
df -h DiskShare/backup_boot/
输出
1
2Filesystem Size Used Avail Use% Mounted on
/dev/mapper/loop0p1 256M 31M 226M 12% /home/pi/DiskShare/backup_boot和原来的
/boot
大小一致。备份根目录
先变更一下权限
1
2sudo chmod 777 DiskShare/backup_root
sudo chmod pi:pi DiskShare/backup_root开始备份
1
2cd DiskShare/backup_root
sudo dump -0uaf - / | sudo restore -rf -s报了一堆错,不过好在出现了
1
DUMP: DUMP IS DONE
就说明完成了
修改相应的 PARTUUID
此时备份已经完成,还需要修改下 Raspbian 启动对应分区的 PARTUUID。
首先查看两个分区的 PARTUUID
1
2
3
4sudo blkid
/dev/loop0: PTUUID="e2cf4a8e" PTTYPE="dos"
/dev/mapper/loop0p1: SEC_TYPE="msdos" LABEL_FATBOOT="boot" LABEL="boot" UUID="0B9E-4FAD" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="e2cf4a8e-01"
/dev/mapper/loop0p2: UUID="e41b54ae-ee95-42e5-b4df-df1a32a21859" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e2cf4a8e-02"/boot
对应e2cf4a8e-01
,/
对应e2cf4a8e-02
修改
cmdline.txt
1
sudo nano /home/pi/DiskShare/backup_boot/cmdline.txt
找到
root=PARTUUID=
把等号后面的值改为e2cf4a8e-02。(/
对应e2cf4a8e-02
)修改
fstab
1
sudo nano /home/pi/DiskShare/backup_root/e
输出
1
2
3
4
5
6
7proc /proc proc defaults 0 0
PARTUUID=ea382736-01 /boot vfat defaults 0 2
PARTUUID=ea382736-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
/dev/sda1 /home/pi/share ext4 defaults 1 1
/dev/sdb1 /home/pi/DiskShare ext4 defaults 1 1这里我挂载了两个外置硬盘,先删这两个。
1
2
3
4
5proc /proc proc defaults 0 0
PARTUUID=ea382736-01 /boot vfat defaults 0 2
PARTUUID=ea382736-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that把
PARTUUID=
后面的值改为对应的值1
2
3
4
5proc /proc proc defaults 0 0
PARTUUID=e2cf4a8e-01 /boot vfat defaults 0 2
PARTUUID=e2cf4a8e-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that收尾
卸载各挂载分区
1
2sudo umount /home/pi/DiskShare/backup_boot
sudo umount /home/pi/DiskShare/backup_root删除loop device
1
2sudo kpartx -d /dev/loop0
sudo losetup -d /dev/loop0删除挂载目录
1
2rmdir /home/pi/DiskShare/backup_boot
rmdir /home/pi/DiskShare/backup_root
使用OMV插件backup备份
Failed to execute command ‘export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin; export LANG=C.UTF-8; /usr/sbin/omv-backup 2>&1’: No backup volume set. Please choose a backup volume.
OMV\ExecException: Failed to execute command ‘export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin; export LANG=C.UTF-8; /usr/sbin/omv-backup 2>&1’: No backup volume set. Please choose a backup volume. in /usr/share/openmediavault/engined/rpc/backup.inc:72
Stack trace:
安装backup插件
openmediavault-backup 6.0
安装
创建用于备份的文件夹
存储器->共享文件夹->创建
开始备份
安装完插件后应该可以看到导航
系统->备份
选择备份文件夹,方式我选择dd
备份。
点击备份等待即可。