树莓派扩大boot分区,真的是boot不是root

最近用树莓派在做一套天文操作系统,其中有一块需求是需要把拍摄的天文数据放在FAT32分区中,方便Windows系统读取。起初的做法是把在主分区后面扩出一块FAT分区,这种方法用了一段时间都很正常,直到遇见了Win7操作系统。
在Win7操作系统中,如果一张SD卡分了N个区,如果前面有一块是Ext或其他格式的分区,那后面的所有FAT分区都无法识别。这就尴尬了……

所以想到了能否通过扩展boot分区的方式解决问题,因为boot分区在第一个位置,而且把SD卡插入Win7后也能识别出boot(但没办法识别后面的主分区)。
在网上搜了很多帖子,基本上都是boot和root分不清,清一色的都是扩展根分区的,到目前为止(2019年9月16日),没有一个帖子是解决扩展boot分区问题的,所以如果你近期看到了这个帖子,应该就是网上唯一一个扩展boot分区的帖子。

思路:
1. 把原来的根分区挪到SD卡最后嘛
2. 把boot引导指向修改到移动的位置
3. 扩展中间一段为boot分区

为了保证镜像文件足够小,我们的操作系统是在4GSD卡中做的,但最终使用的时候要放到32G或更大的SD卡中,系统会自动扩展空间,这是前提。如果你已经把系统烧到目标SD卡中,raspbian在第一次启动的时候会自动把剩余空间扩展到主分区中,也就是/mmcblk0p2,所以想扩展boot首先要缩减/mmcblk0p2的大小,这种操作度娘有很多,这里不讲了。


以我4G做的系统烧到128G为例,系统启动后发现主分区(/mmcblk0p2)大小是3.4G,后面还有100多G没有用。
所以我们具体计划如下:
1. 备份boot分区
    1. 修改/etc/fstab分区绑定
    2. 修改/boot/cmdline.txt主分区指向
    3. 将boot分区备份到主分区的一个文件中
2. 复制mmcblk0p2分区
    1. 在SD卡末尾创建一个mmcblk0p3分区,大小和mmcblk0p2相同
    2. 把mmcblk0p2分区内容复制到mmcblk0p3
3. 扩展boot分区
    1. 删除原来mmcblk0p1和mmcblk0p2分区
    2. 从mmcblk0p1起始位置(8192)创建分区,大小为剩余空间大小
    3. 设置mmcblk0p1分区类型为c
    4. 格式化mmcblk0p1分区
    5. 把备份的boot分区内容复制回mmcblk0p1中
4. 收尾

1. 备份boot分区
树莓派BootLoader启动后会到第一个分区(8192起始位置)寻找启动文件对linux进行启动,所以boot分区的起始位置不能变,但里面的内容存放位置无所谓,只要保证有那些文件就行了,其中有两个文件比较重要,/etc/fstab和/boot/cmdline.txt,这两个文件现在修改和事后修改都一样,只要保证内容就行了。

/etc/fstab,好像是分区加载表一类的东西,里面需要修改PARTUUID=d95d41c7-02为PARTUUID=d95d41c7-03,因为我们要把mmcblk0p2的内容移到mmcblk0p3中,中间mmcblk0p2就没有了(有强迫症的自行在解决),如果不修改这行,会导致重启的时候报两个失败:
1. Failed to start dphys-swapfile mnt/unmount,and delete a swapfile. See'systemctl status dphys-swapfile. service' for details.
2. Failed to start Hostname Service.See ' systemctl status systemd-hostnamed.service' for details.

这两个失败会导致主分区的内容无法修改,具体原因没有深究,各位有精力的大神可以科普一下。
d95d41c7-03这个编号不知道是不是每张SD卡都不一样,总之就是吧后面的02改成03吧。

/boot/cmdline.txt,这是启动完boot后用于加载主分区的,同样吧PARTUUID=d95d41c7-02为PARTUUID=d95d41c7-03,不修改的话启动失败,找不到主分区。

修改完这两个文件后开始对boot进行备份,因为内容与位置无关,所以我们直接用cp命令把boot内容备份到一个文件就行了
# sudo cp /boot ~/boot -Rf

2. 复制mmcblk0p2分区
首先我们用fdisk命令查看一下现在的分区
# sudo fdisk /dev/mmcblk0

进入后输入p<回车>,记住两个数,上面红框中是SD卡的总大小,下面红框是主分区现在的大小,因为我们要在SD卡最后面创建一个同样的小的分区mmcblk0p3,所以用128043712512-7203840=242881536‬,这个得数就是我们要创建的mmcblk0p3的大小。按一下命令操作
n<回车>
p<回车>
3<回车>
242881536<回车>
<回车>

这时候在用p<回车>命令查看,就可以看到在末尾有个同样大小的分区了,记得输入w<回车>保存分区表,q<回车>退出命令即可

接下来就是复制分区,我们用dd命令操作
# sudo dd if=/dev/mmcblk0p2 of=/dev/mmcblk0p3
这个命令时间较长,我三星128G的卡大概持续了七分半,有可能更慢,耐心等待。
这里需要重启一次,重启前保证第一部中两个文件已经修改完毕了。

3. 扩展boot分区
重启后再次进入分区管理
# sudo umount /boot
首先卸载boot分区
# sudo fdisk /dev/mmcblk0
把第一和第二分区都删除了
d<回车>
1<回车>
d<回车>
2<回车>

然后重新创建第一分区:
n<回车>
p<回车>
1<回车>
8192<回车>
<回车>

创建完毕后用p命令查看,已经把第一分区扩大出来了,大小为115.8G

这里需要注意一下,8192这个数字应该是raspbian默认的位置,具体还需要在删除mmcblk0p1之前查看Start位置指向的是什么,跟这个一致就可以了。
输入t<回车>选择第一分区,将第一分区类型设置为c,这时候再看分区类型已经转换为FAT32格式

输入w<回车>保存分区并退出
# sudo mkfs.vfat /dev/mmcblk0p1
# sudo mount /dev/mmcblk0p1 /boot
# sudo cp ~/boot/* /boot

4.收尾
把~/boot删了,屁股擦干净

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值