Dns

執行“systemd-resolve –status”時“無法獲取全域數據:沒有可用的緩衝區空間”

  • May 23, 2022

我在 Mint 20.3(基於 Ubuntu 20.04)上,我一直遇到這個奇怪的問題,我的網路一切正常,然後突然,顯然出乎意料,它停止工作,我無法訪問任何網站。這不是我的瀏覽器,因為使用curl.

我找到了一個執行緒,提到使用systemd-resolve --status來獲取 DNS 的目前狀態。當網路正常時,該命令執行良好,我保存了一份副本以與網路播放時的輸出進行比較。

但是,現在網路再次啟動,我再次執行命令並輸出錯誤:Failed to get global data: No buffer space available. 我一直在尋找解決方案,但似乎沒有提及systemd-resolve,所以我不知道發生了什麼。

這個答案給了我一些希望,但是我將緩衝區大小增加到提到的兩倍,但沒有任何效果。

請問有人有什麼想法嗎?

它來自這部分原始碼: 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。也許它以某種方式停止、崩潰或卡住了。

引用自:https://unix.stackexchange.com/questions/703524