登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-19 19:33:28 237浏览 收藏

使用 mkfs 命令格式化块设备时,如果设备已格式化,mkfs 会要求确认,这可能会导致数据丢失。如果在没有终端的情况下运行 mkfs,则不会出现确认提示,但会删除设备上的所有数据。目前没有办法在不丢失数据的情况下强制 mkfs 中止确认检查。

问题内容

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

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

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

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

我无法向上下文添加超时,因为除了此确认之外,格式化可能还需要一段时间。

我找不到 mkfs 标志,如果块设备已格式化,它会返回错误而不是确认检查。

我不想依赖于解析 mkfs 命令的输出来查看它是否要求确认检查,因为如果 mkfs 输出发生更改,这会使其中断。

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


解决方案


事实证明,如果我们在没有终端 (tty) 的情况下运行命令,则假定使用 -F 选项,并且无论目标设备是否已有文件系统,设备都会被格式化。

这种情况发生在 mkfs.ext2mkfs.ext3mkfs.ext4

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

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

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

好了,本文到此结束,带大家了解了《退出 mkfs 命令如果块设备已经格式化》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>