我们有基于 Beaglbone 黑色的定制板,配有 256MB RAM 和 4GB eMMC。
我们在板上有用于刷新软件的脚本。
脚本使用以下命令擦除 gpt 分区表
#Delete primary gpt (first 17KiB)
dd if=/dev/zero of=/dev/mmcblk0 bs=1024 count=17
#Delete secondary gpt (last 17KiB)
dd if=/dev/zero of=/dev/mmcblk0 seek=3735535 bs=1024 count=17
分区被删除,但脚本会在相同数量的分区中再次对 eMMC 进行重新分区。
之后,它尝试使用 mkfs.ext4
(e2fsprogs 版本 1.42.13)格式化每个分区。
现在,在格式化分区时mkfs.ext4
,抱怨分区上有文件系统,并且它是在过去的特定日期安装的,并询问是否应该继续?
/dev/mmcblk0p15 contains a ext4 file system labelled 'rootfs'
last mounted on /mnt/rfs_src on Fri Feb 16 13:52:18 2018
Proceed anyway? (y,n)
在过去的 ie 中,e2fsprog 版本中没有发生这种情况,1.42.8
相同的脚本也可以工作。
从发行说明中e2fsprog-1.42.13
我看到它 last mounted
被添加到某些结构中。
现在的问题是我们如何last mounted
从分区中删除这些信息?
我尝试过wipfs -a
,但它具有相同的行为。 eMMC 归零的一种方法,但这需要很多时间。
有什么建议/指示吗?
答案1
从mkfs.ext4的手册页:
-F Force mke2fs to create a filesystem, even if the specified device is not a partition on a block special device, or if other parameters do not make sense. In order to force mke2fs to create a filesystem even if the filesystem appears to be in use or is mounted (a truly dangerous thing to do), this option must be specified twice.
您只需在脚本中添加-F
选项即可绕过问题并使其在无人值守的情况下继续运行。mkfs.ext4
从描述中并不清楚这是“或者如果其他参数没有意义”的情况。我仔细检查了一下,只需要一个-F
,因此仍然可以防止意外格式化已安装的文件系统。
我认为最后安装的目录与此无关。它只是增加了更多的故障保护功能。同样,一些较新版本的交互式 fdisk 或 gdisk 会执行相反的操作:当它们在创建新分区时检测到存在先前的文件系统时,它们会提供擦除签名。
答案2
感谢@frostschutz,他的建议奏效了。
只是为了完整起见,我将其添加为答案,
使用以下命令对我来说很有效。
wipefs -a /dev/mmcblk0p[0-9]*
wipefs -a /dev/mmcblk0
第一条命令从每个分区中删除了文件系统信息。
第二条命令删除了分区表。