![将操作系统映像的启动分区安装为环回设备时忽略标签](https://linux22.com/image/1207441/%E5%B0%86%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E6%98%A0%E5%83%8F%E7%9A%84%E5%90%AF%E5%8A%A8%E5%88%86%E5%8C%BA%E5%AE%89%E8%A3%85%E4%B8%BA%E7%8E%AF%E5%9B%9E%E8%AE%BE%E5%A4%87%E6%97%B6%E5%BF%BD%E7%95%A5%E6%A0%87%E7%AD%BE.png)
我想安装启动分区从ubuntu-21.10-preinstalled-server-arm64+raspi.img.xz
Raspberry PI 网站下载。
使用以下命令解压映像文件并挂载启动分区
mount -o loop,offset=1048576,sizelimit=268435456 ubuntu-21.10-preinstalled-server-arm64+raspi.img /var/nfs/ubuntu-21.10-boot
... 运行正常。您可以看到已安装的映像和/dev/mmcblk0p1
设备:
mount | grep boot
/dev/mmcblk0p1 on /boot/firmware type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img on /var/nfs/ubuntu-21.10-boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
但是,当我将相同的挂载添加/etc/fstab
到已经存在的挂载时/boot/firmware
:
LABEL=system-boot /boot/firmware vfat defaults 0 1
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img /var/nfs/ubuntu-21.10-boot ext4 loop,offset=1048576,sizelimit=268435456 0 0
... 并重新启动系统(或运行mount -a
),映像的启动分区将按/var/nfs/ubuntu-21.10-boot
预期安装在 ,同时也安装在/boot/firmware
,从而替换 处的真实固件/dev/mmcblk0p1
:
mount | grep boot
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img on /var/nfs/ubuntu-21.10-boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img on /boot/firmware type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
这显然是因为映像的启动分区的标记与以相同方式标记的标记system-boot
相冲突。/dev/mmcblk0p1
(挂载手册页指定了fstab
当指定设备和挂载点时将被忽略,这解释了为什么手动挂载可以按预期工作。)
我可以想到以下解决方法来避免固件安装被覆盖:
- 避免在 rc 脚本中手动使用 fstab 和 mount
- 重新标记映像文件的启动分区
- 替换
LABEL=system-boot
为保存固件的实际设备(如下面@Tilman 的回答中所建议的)
... 但
有没有办法阻止 fstab 条目通过标签自动挂载?
答案1
该条款LABEL=system-boot
要求mount
安装任何文件系统在该挂载点上具有卷标system-boot
。如果您不想要,则不要使用该子句。将其替换为/dev/mmcblk0p1
which 指示mount
准确挂载该设备,而忽略标签。