如果块设备已经格式化,则退出mkfs命令

时间:2019-06-10 11:20:54

标签: linux file go filesystems

我正在编写一个实用程序,该程序需要运行mkfs来格式化块设备。

我使用go的exec包为每种文件系统类型运行正确的mkfs命令,例如ext2:

err := exec.CommandContext(ctx, "mkfs.ext2", "-F", path).Run()

不幸的是,如果块设备已被格式化mkfs,则会要求确认(并挂起)。这意味着我不得不通过危险的-F标志来跳过此检查,如果设备已经格式化,则会丢失数据。

我无法在上下文中添加超时,因为除此确认外,格式化可能会花费一些时间。

我找不到mkfs标志,该标志使它返回错误,而不是确认是否已格式化块设备。

我宁愿不依靠解析mkfs命令的输出来查看它是否要求确认检查,因为如果mkfs输出更改,它将使它中断。

如果已格式化块设备而不是挂在此确认检查上,是否可以通过正确的错误消息中止命令?

1 个答案:

答案 0 :(得分:0)

事实证明,如果我们在不带终端(tty)的情况下运行命令,那么将假定-F选项,并且将格式化设备,而不考虑目标设备是否已经具有文件系统。

这与mkfs.ext2mkfs.ext3mkfs.ext4一起发生

这实际上是遗留行为,如here

所示

mkfs.xfsmkfs.btrfs的行为正确,并且如果块设备是 已经格式化。

我将其发布为答案,因为我认为这意味着没有实际的解决方案……如果设备上已有数据,则在终端外部运行mkfs.ext2总是会删除数据。