1.查看镜像大小
df -hl
查看文件系统所占磁盘空间大小
nanodlp大概1.4G左右,做成1.5G的镜像比较保守一点(最后结论是1.5G太小了最后dump不够空间写入会失败,做成2G大小才没问题)
sudo dd if=/dev/zero of=raspberrypi.img bs=4M count=384
改为执行以下
sudo dd if=/dev/zero of=raspberrypi.img bs=4M count=500
这句要在挂载U盘后再执行,在U盘生成一个空的1.5G的img文件。
4M*384=1.5G*1024=1536M
4M*500=2G*1024=2000M
2.确认要备份系统起始位置。
sudo fdisk -l /dev/mmcblk0
确认boot起始位置,root起始位置
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 532480s
sudo parted raspberrypi.img --script -- mkpart primary ext4 540672s -1
4.先安装挂载虚拟文件工具kpartx
sudo apt-get install dosfstools dump parted kpartx
以上安装kpartx挂载虚拟文件系统命令,下面的需要用到这个命令
5.
挂载U盘
插入U盘到树莓派usb口处。
sudo fdisk -l
查看插入u盘的名字。下图sda1为U盘的盘符名字
sudo mkdir /mnt/usb
(在mnt下生产一个usb文件夹用来挂载U盘)
sudo mount /dev/sda1 /mnt/usb
切换到/mnt/usb 进行操作
cd /mnt/usb
6.在U盘生成一个空的2G的img文件。
sudo dd if=/dev/zero of=raspberrypi.img bs=4M count=384
sudo dd if=/dev/zero of=raspberrypi.img bs=4M count=500
执行写入一个1.5G的文件时间比较长,想知道进度,可以另外多开一个putty登录进树莓派,运行一下命令查看 dd命令的进度。
watch -d -n 5 ls -lh /mnt/usb
看到如下命令提示后,才算完成写入一个空img,才可以继续输入以后的命令。
7.格式化与备份镜像
逐条输入一下命令
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 532480s
sudo parted raspberrypi.img --script -- mkpart primary ext4 540672s -1
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"
sudo mkfs.vfat $partBoot#给img Boot分区格式化
sudo mkfs.ext4 $partRoot#给img root分区格式化
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media
sudo chattr +d raspberrypi.img
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -h 0 -0uaf - / | sudo restore -rf -
注意里头2句要按照自己实际要备份的系统对应的位置数填写。
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 532480s
sudo parted raspberrypi.img --script -- mkpart primary ext4 540672s -1
运行dump语句后时间会比较长,这里是把原系统的1.3G的root分区备份到镜像里头来。 下图所示只进行52%,请耐心等候至100%完成。
8.修改etc/fstab对应分区的PARTUUID ’
先执行blkid命令,查看镜像对应的PARTUUID
sudo blkid
boot 对应的 PARTUUID 7d31a866-01
root 对应的 PARTUUID 7d31a866-02
sudo nano /media/etc/fstab
改为
boot 对应的 PARTUUID 7d31a866-01
root 对应的 PARTUUID 7d31a866-02
9.修改cmdline.txt 对应分区的root-PARTUUID
cd /mnt/usb
sudo umount /media
sudo mount -t vfat $partBoot /media
sudo nano
/media/cmdline.txt
改为
root 对应的 PARTUUID 7d31a866-02
保存后退出。
最后执行以下语句。
cd /mnt/usb
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice
cd ~
sudo umount /mnt/usb
U盘内即可备份img文件。
把img复制到电脑端,用Win32DiskImager写入镜像到sd卡,再插sd卡到树莓派测试能否成功启动nanodlp。
PS附注
1.单独修改镜像boot里头的cmdline.txt 操作代码如下:都是挂载了U盘后操作的
先回到cd /mnt/usb
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
sudo mount -t vfat $partBoot /media
sudo nano /media/cmdline.txt #修改cmdline.txt 对应分区的root-PARTUUID=
操作完成后,卸载media
sudo umount /media
要是修改boot 里头的 config.txt
sudo nano /media/config.txt
=> add this line :
dtoverlay=pi3-miniuart-bt
2.单独修改镜像root里头的etc/fstab 操作代码如下:都是挂载了U盘后操作的
先回到cd /mnt/usb
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partRoot="${device}p2"
sudo mount -t ext4 $partRoot /media/
sudo nano /media/etc/fstab
操作完成后,卸载media
sudo umount /media
镜像里头的root的nanodlp machine Setting 修改就要回到镜像root里进行操作,找到db文件夹下的machine.json
sudo nano /media/home/pi/printer/db/machine.json
镜像root里头,修改 wifi文件
sudo nano /media/etc/wpa_supplicant/wpa_supplicant.conf
ssid="wifi name"
psk="wifi-password"