【问题标题】:golang: how to check if a write fails due to insufficient disk spacegolang:如何检查是否由于磁盘空间不足而导致写入失败
【发布时间】:2021-11-16 00:19:38
【问题描述】:

如果 go 程序返回错误 Write(),它会返回如下内容:

write failed(*fs.PathError): write mnt/test.dat: no space left on device

除了“设备上没有剩余空间”的字符串匹配之外,还有其他方法可以知道 PathError 是由于磁盘空间不足引起的吗?

注意:我使用的是 Linux,关心它在 Windows 上的工作方式。

【问题讨论】:

标签: go filesystems


【解决方案1】:

是的,它可能对您编译的操作系统很敏感,但您可以检查错误是否包含syscall.ENOSPC

_, err := file.Write(stuff)
if err != nil {
    if errors.Is(err, syscall.ENOSPC) {
        // There was no space left on the device
        return "get more space"
    }
    // something else is wrong
}

【讨论】:

    【解决方案2】:

    除了“设备上没有剩余空间”的字符串匹配之外,还有其他方法可以知道 PathError 是由于磁盘空间不足引起的吗?

    没有。

    【讨论】:

    • 接受的答案适用于 linux!
    • @xrfang 包系统调用不在 Go 兼容性承诺中。如果这种类型的 hack 现在和将来对您来说都足够好,那就没问题了。
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2018-01-17
    相关资源
    最近更新 更多