引導期間連接的 Lenovo USB-C“混合”塢站:引導掛起且 zpool 未載入
我正在嘗試使Lenovo Thinkpad P52在 Linux Mint 20.3 Una aka Ubuntu 20.04上與Lenovo USB-C Hybrid Dock(40AF,請參閱要避免的塢站…)一起使用。多麼……旅程……
筆記型電腦的
/home
文件夾位於 ZFS 文件系統 (zpool) 上。作業系統本身執行在btrfs
. 顯卡在 BIOS 中切換到專用(即 Nvidia),並由 Nvidia 的專有驅動程序驅動。筆記型電腦的 BIOS已預先更新到最新版本,以避免在這種設置中導致主機板變磚(真正令人印象深刻的 BIOS 錯誤)。Thunderbold 安全性也已在 BIOS 中關閉。有趣的是,擴展塢在執行時沒有出現boltctl list
——儘管我不得不禁用 Thunderbold 安全性。我想這就是“混合”的用武之地。DisplayLink 驅動程序已從此處安裝。我應該準備好了。當我在擴展塢斷開連接的情況下啟動筆記型電腦時,一切正常。一旦電腦啟動並且擴展塢上的網路和 USB 正常工作,我就可以插入擴展塢。(我還沒有深入到兔子洞,無法對顯示連接進行故障排除。)
當我在將擴展塢插入筆記型電腦的情況下啟動時,啟動會在登錄螢幕出現之前掛起大約兩分鐘。它通常顯示一行控制台輸出,通常是一些錯誤,但每次都不同(例如
ucsi_acpi USBC000:00 con1 failed to register alternate modes
或bluetooth hci0 setting interface failed (71)
)。我認為這些錯誤在沒有擴展塢的情況下也會發生 - 我猜是因為我可以看到它們的掛起。當我等待一些超時過去時,我會看到通常的圖形登錄螢幕,儘管登錄嘗試失敗。這是當我發現我的 zpool 不見了(每次我在連接擴展塢的情況下啟動時),因此沒有使用者文件夾可以讓使用者登錄。我切換到命令行 (Ctrl+F1
) 並檢查zpool status
- 沒有。一本手冊zpool import data
,內容/home
再次出現,返回登錄螢幕 (Ctrl+F7
),一切正常。超時和我的 zpool 消失的事實表明在核心模組載入或初始化期間出現了某種錯誤,可能是事情發生的順序 - 儘管我不確定如何調試這個或發生了什麼。沒有底座,一切都按預期工作。
我正在為視障人士對這個系統進行故障排除。擴展塢的全部意義在於連接/斷開筆記型電腦的電纜更少。插入和拔出電纜的一般困難創造了我的場景。因此,即使只有這一根電纜,我也很難說“每次開機前都拔掉電纜,即使你不隨身攜帶它”。
ZFS 池在引導期間通過
zfs-import-cache.service
服務導入。在我的情況下,這個失敗了result dependency
。通過依賴關係,我發現
systemd-udev-settle.service
事先失敗了,報告Main process exited, code=exited, status=1/FAILURE
和Failed with result 'exit-code'.
因為這只發生在 Dock 連接時,我最終查看了 DisplayLink 和相關的錯誤。我找到了這顆寶石。事實證明,
/opt/displaylink/udev.sh
由 udev 服務呼叫並超時,這是一個已知問題 - 與 ZFS 沒有任何關係,只是一個不幸的事件鏈。這個問題已經知道了兩年多,並且在 DisplayLink 驅動程序中仍未解決,儘管各種打包程序已經解決了這個問題。我應用了這個技巧,即
displaylink-driver
從內部啟動服務,/opt/displaylink/udev.sh
如下所示:systemctl start --no-block displaylink-driver
我實際上只添加了
--no-block
參數。這解決了我的問題,連接到擴展塢的外部顯示器實際上也可以按預期工作。