noobs安装debian系统的优点是简单,容易上手,但也发现了一个缺点,分区有点复杂,系统镜像备份是个问题。直接采用dd备份,因为是全卡数据备份,所以极其费时,例如,昨天用gz压缩镜像还原TF卡(16G),用了4710秒。事实上,实际系统不需要那么多数据,时间应该可以更短,因为解压拷贝noobs,安装系统也不需要那么久。

因此,我们尝试了解清楚noobs安装的系统的分区情况,采用按分区备份的方法,以下以16G TF卡SanDisk Ultra 60410RAV2244为例分析:

用winhex打开TF卡(RM1:Generic-SD/MMC 14.8GB, USB )

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

TF卡0扇区:

FA B8 ....(可能引导代码)

...................  按MBR模板解读:3个分区项,第1个分区类型0E(FAT16),之前8192扇区,共1677355扇区,第2个分区类型85(Linux Extended),之前1687552扇区,共29363200扇区,第3个分区类型83(Linux),之前31050752扇区,共65536扇区

...............55 AA

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

TF卡8192扇区(8198扇区为备份):

EB 00 90 4D 53 ..............(可见 MSWIN4.1、RECOVERY、FAT32等字样)

..............................................55 AA

尽管分区表分区类型标记为FAT16,但该分区实际文件系统应该是FAT32,用Boot Sector FAT32(BPB)模板解读:每扇区512字节,每磁道63扇区,磁头数255,每簇16扇区,保留扇区数90个,FAT表2个,隐藏扇区数8192,扇区总数1677355,每个FAT表819扇区,根目录第1簇簇号2,卷标RECOVERY,文件系统FAT32

这个分区在windows下可以被直接识别,共800+M,剩余空间很少,包含的目录有defaults、os,文件有bootcode.bin、BUILD-DATA、INSTRUCTIONS-README.txt、recovery7.img、recovery.cmdline、recovery.elf、RECOVERY_FILES_DO_NOT_EDIT、recovery.img、recovery.rfs、riscos-boot.bin

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

TF卡1687552扇区:

00 00 ................

........................  按MBR模板解读(因为这应该是Linux扩展分区起始):2个分区项,第1个分区类型0C(win95 FAT32),之前8192扇区,共122880扇区,第2个分区类型0F(win95 Extended),之前131072扇区,共29224960扇区

.....................55 AA

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

定位到TF卡1687552+8192=1695744扇区:

EB 3C 90 ...(可见mkfs.fat、boot、FAT16等字样)

............................................55 AA

尽管扩展分区表标记为FAT32,但该分区实际文件系统应该是FAT16,用Boot Sector FAT模板解读:每扇区512字节,每磁道16扇区,磁头数4,每簇4扇区,保留扇区1个,FAT表2个,每个FAT表120扇区,隐藏扇区数1695744,扇区总数122880,根入口数512,卷标boot,文件系统FAT16

这个分区在windows下不能被识别,因为它是Linux扩展分区中的逻辑盘,这个分区只有60M,应该只起引导和启动系统内核的作用。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

定位到TF卡1687552+131072=1818624扇区:

00 00 ...............................

..................................按MBR模板解读(因为这是Linux扩展内的win95扩展分区起始):1个分区项,第1个分区类型83(Linux),之前8192扇区,共29222912扇区

...............................................55 AA

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

定位到TF卡1818624+8192=1826816扇区,前2个扇区为空扇区,后面是超级块开始,所以这是root分区,容量13+G,放了绝大部分数据

定位到TF卡31050752扇区,同样前2个扇区为空扇区,后面是超级块开始,所以这是SETTINGS分区,容量32M,似乎只是文件系统日志记录和坏块列表

整个分区情况图示如下:

armbian 保存当前磁盘镜像 armbian备份ddbr镜像_文件系统


如果不使用noobs,直接使用img镜像,我们分析该镜像的分区特点:(以下以2016-05-27-raspbian-jessie-lite.img为例)

为img镜像创建loop设备:sudo losetup --find --show 2016-05-27-raspbian-jessie-lite.img,我们生成了/dev/loop1(如果之前没有创建过其它loop device,应该是/dev/loop0)

查看分区情况:sudo fdisk  -l,我们看到

Disk /dev/loop1: 1.3 GiB, 1387266048 bytes, 2709504 sectors
 Units: sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disklabel type: dos
 Disk identifier: 0x6fcf21f3


 Device       Boot  Start     End Sectors  Size Id Type
 /dev/loop1p1        8192  137215  129024   63M  c W95 FAT32 (LBA)
 /dev/loop1p2      137216 2709503 2572288  1.2G 83 Linux

我们可以发现,镜像内就2个分区:8192扇区~137215扇区为FAT32类型的分区,137216扇区~2709503扇区为Linux类型的分区(应该是Ext4)

经过测试,发现2016-05-27-raspbian-jessie.img镜像和lite版的分区情况是一样的,并且使用如下方法把16G上的系统还原到8G上:

1、刷写系统dd  if=.....img  of=/dev/sdb  bs=4M 到16G卡上

注意参考:https://www.raspberrypi.org/documentation/installation/installing-images/linux.md

要点: df   -h 查看sd卡挂载情况(我的是/media/x201/.....)和所属块设备(我的是/dev/sdb),用命令umount 或者 文件管理器中将已挂载的sd卡的分区卸载,同时确保sudo fdisk  -l 能看到分区情况(如果之前有镜像,是/dev/sdb1 和 /dev/sdb2),然后用 sudo  dd  bs=4M  if=....img  of=/dev/sdb 将镜像写入sd卡(USB2.0需要耗费600s左右),sudo  sync 确保将可能缓存的数据写入 ,之后就可以试验该镜像是否可以使用了

2、保存开始的8192个扇区  dd  if=/dev/sdb  of=sector8192.bin  bs=512  count=8192

3、sudo cp  -rfp  /media/x201/boot/(对应boot分区)   ./boot/

4、sudo apt-get  install  dump  (默认deepin没有dump,装了dump,包含了restore)

sudo dump  -0uaf  rootpart.bak   /media/x201/对应root分区

5、插上8G TF卡, sudo  dd  if=sector8192.bin  of=/dev/sdb  bs=512  count=8192  ,但这样分区表是错误的,因为卡大小不一样

6、用gparted打开,发现出错,忽略错误(后面也一样忽略错误),很可能因为分区表信息错误,我们删除root分区(boot分区没有问题,root分区会放不下数据),重新建立ext4分区并格式化,格式化可以用

sudo mkfs.vfat -n BOOT /dev/sdb1
sudo mkfs.ext4 -L root /dev/sdb2

也可以直接在gparted软件中进行

7、sudo cp  -rfp  ./bootpart/*   /media/x201/boot对应分区

8、cd 到  /media/x201/root对应分区

sudo restore  -rf   ~/下载/rootpart.bak

实际上机加电试验,会出现错误  

9、参考资料,插回卡修复root分区文件系统  sudo  fsck.ext4  -v   /dev/sdb2,仍提示有错??

但加电试验后已经可以启动系统了