运行“systemd-resolve --status”时出现“无法获取全局数据:没有可用的缓冲区空间”

运行“systemd-resolve --status”时出现“无法获取全局数据:没有可用的缓冲区空间”

我使用的是 Mint 20.3(基于 Ubuntu 20.04),我一直遇到这个奇怪的问题,我的网络一切正常,然后突然之间,显然出乎意料的是,它停止工作,我无法访问任何网站。这不是我的浏览器,因为使用时也会发生同样的情况curl

我发现一个线程提到使用systemd-resolve --status来获取 DNS 的当前状态。当网络正常时,该命令运行良好,我保存了一个副本以与网络运行时的输出进行比较。

但是,现在网络再次运行,我再次运行该命令,输出是一个错误:Failed to get global data: No buffer space available。我已经寻找了解决方案,但似乎没有提到任何内容systemd-resolve,所以我对发生的事情感到茫然。

这个答案给了我一些希望,但我将缓冲区大小增加到所提到的两倍,但没有效果。

请问有人有什么想法吗?

答案1

它来自这部分源代码: resolve/resolvectl.c

  1843  
  1844          r = bus_map_all_properties(bus,
  1845                                     "org.freedesktop.resolve1",
  1846                                     "/org/freedesktop/resolve1",
  1847                                     property_map,
  1848                                     BUS_MAP_BOOLEAN_AS_BOOL,
  1849                                     &error,
  1850                                     &m,
  1851                                     &global_info);
  1852          if (r < 0)
  1853                  return log_error_errno(r, "Failed to get global data: %s", bus_error_message(&error, r));
  1854  

我检查了在什么情况下 systemd 会报告 ENOBUFS,并且当您填满 DBUS 的挂起发送或接收缓冲区时,您似乎只会收到此错误。

底层错误 ( ENOBUFS) 发生在 DBUS 内部库请求中。

它是一个内部缓冲区,您无法增加其大小,但这无疑表明 DBUS(或底层库)已停止响应请求,直到内部缓冲区已填满并且放弃向其中添加更多数据,ENOBUFS而是返回。

我会考虑检查您的 systemd DBUS。也许它停止了、崩溃了或者以某种方式卡住了。

相关内容