這怎麼發生的? (之前的長答案)

這怎麼發生的? (之前的長答案)

在 Oracle VirtualBox 4.3.24 上執行 Ubuntu 14.04,並完全卡在安裝來賓新增項目上。我花了很長時間在網路上尋找解決方案,但沒有任何幫助...

在此輸入影像描述

如下所示,我嘗試手動安裝並從網路下載 ISO(與 VirtualBox 相符的版本)。同樣的錯誤:

在此輸入影像描述

編輯:

現在一些資料夾變成了“只讀”,這會造成很大的麻煩。

答案1

我能夠透過重新安裝 linux 映像來解決安裝問題:

sudo apt-get install --reinstall linux-image-$(uname -r)

順便說一句,這一切都是從升級 VirtualBox 開始的。雙向剪貼簿停止工作,因此我嘗試重新插入 Guest Additions ISO。這就造成了上面的事。現在,來賓添加已安裝回來,但剪貼簿仍然不起作用...

答案2

長話短說 這可以透過重新啟動來快速修復不要使用 apt-get。請參閱底部“只需重新啟動即可!”。


這怎麼發生的? (之前的長答案)

如果您執行以下操作,就會出現此類問題:

  • 升級核心(例如從 .66 到 .67)
  • 運行apt-get autoremove並以某種方式刪除正在運行的內核,或手動刪除“舊”內核,從而從 /lib/modules/kernel.66 中刪除所有模組
  • 不要重新啟動,從而保持“舊”.66 核心運行。載入的模組保留在記憶體中並且一切正常,但是無法載入新模組自 .66 模組以來已被刪除。
  • 嘗試做任何需要加載尚未加載的模組的事情

安裝 VirtualBox ISO 可能需要載入 ISO9660 支援模組。

現在無法再自動載入請求的模組,因為正在執行的核心(.66)在 /lib/modules/kernel.66 中找不到任何內容。該模組存在,但它位於 /lib/modules/kernel.67 中,目前的 .66 核心對此一無所知(並且不建議載入不匹配的模組)。

重新安裝未命名的核心當然會重新安裝正在運行的核心模組,從而使 ../.66/.../isofs.ko 再次可用並且無需重新啟動。這是已安裝核心的降級,更新問題仍然存在(見下文)。

也就是說,當您執行 Additions CD 時,它將安裝跑步.66內核,不是更新的 .67 核心(仍然沒有運行)。

如果您遇到這樣的情況,您也可以當然透過重新啟動來修復它(新的 .67 運行核心將找到它的模組),並且大概透過載入屬於新核心的模組(isofs非常穩定),除非您經歷了重要的核心升級,否則它仍然是相容的(這個還是不推薦!):

# mount /dev/cdrom /mnt
mount: unknown filesystem type 'iso9660'

上面是您遇到的根本錯誤(“未知的檔案系統類型”)。

# uname -a
Linux virtual 3.13.0-66-generic ...

因此我們檢查安裝了哪個版本的模組。應該是 0.66:

# ls /lib/modules
3.13.0-67-generic

……但只有一個目錄,並且是 .67(.66 目錄可能存在,但為空;在這種情況下,du -sh /lib/modules/*將顯示各個目錄佔用了多少空間,從而可以區分空目錄和已滿目錄)。

重新安裝舊的核心映像而不重新安裝 grub 並不能解決真正的問題

您重新安裝正在執行的核心及其模組和標頭。現在您擁有兩個內核,並grub設定為載入較新的內核。

可以安裝 ISO CD-ROM(因為模組現在已存在)並且 VBox 模組將進行編譯(因為標頭已安裝)。

它將為正在運行的 .66 內核編譯模組,並且它們將工作......一段時間。

第一次重新啟動時,您會發現自己使用的是 .67 內核,根本沒有添加任何 VirtualBox。

重新安裝核心也不能解決真正的問題

apt-get install --reinstall linux-image-$(uname -r)

如上所述,在第一次重新啟動時,您會發現自己的核心已降級(或更好的“未升級”)。很快,Ubuntu 將嘗試升級它......並且您將回到開始的地方(請參見下文:「降級核心」),並且需要重新啟動並再次安裝 Virtualbox Additions。

在 ISO 模組中打補丁也無法解決真正的問題

我們有可能仍然可以強制載入 ISO9660 模組,因為核心 66 和 67 之間沒有完成任何工作,並且二進位檔案本質上沒有改變,所以我們嘗試:

# insmod /lib/modules/3.13.0-67-generic/kernel/fs/isofs/isofs.ko

沒有錯誤。有效。核心 .66 從核心 .67 載入模組。讓我們再嘗試掛載 CD-ROM:

# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only

嘿!有效!

是的,但這仍然沒有任何實際幫助,因為正在安裝的 CD 是 VirtualBox Additions,它需要跑步要安裝的核心頭檔。如果正在運行的內核模組已不存在,內核頭檔很可能也不會。因此,CD-ROM 可能已安裝,但安裝程式在啟動時會失敗。

另外,即使它以某種方式找到了標頭並且編譯沒有失敗,新編譯的 Virtualbox 模組也將無處可去,因為 .66 模組目錄已被清理(這就是isofs在第一個模組中找不到該模組的原因)地方!

但是假設您透過恢復先前核心的模組和頭目錄來修復所有這些問題:您現在基本上已經完成了昂貴的(且部分)內核降級,並且添加的內容將是遺失的下次重新啟動時,新安裝的 .67 核心將與 .66 核心的其餘部分一起生效。因為從帶有 .66 標頭的 .66 核心啟動的 Virtualbox Additions CD 盡職盡責地安裝了 .66 核心模組,而不是 .67 核心模組。

降級核心會起作用......一段時間

要是我們消除.67 核心並重新安裝 .66 核心並用模組代替,事情會暫時好起來。無需重新啟動,如上面的“強制 ISO 模組”解決方案中所示。

並且重新啟動不會丟失任何內容,因為沒有安裝受添加挑戰的核心。

但這樣核心仍然會在「待升級」清單中,而同樣的問題遲早會出現(通常是後一天,或下週,取決於自動更新的頻率)。

的確,現在你可以讓它在你選擇的更合適的時刻出現,這可能值很多錢。在對一個遲到的專案進行編碼馬拉鬆的過程中強制升級是一件很糟糕的事情。

所以:只需重新啟動即可! (並重新運行 Additions CD)。

重新啟動後,已安裝的最新 .67 核心將被激活,其所有模組和標頭都在那裡;其中,isofs用於讀取ISO9660 CD檔案系統的模組。

 sudo reboot

重新啟動後,CD-ROM 將工作並且可以安裝 Guest Additions。

在 VirtualBox 上透過新增更新核心的「最佳」順序是:

 apt-get update
 apt-get upgrade              (or apt-get dist-upgrade)
 reboot                       
 (re)install VirtualBox Additions on the new kernel that is now running
 apt-get autoremove

(出於安全原因,可能不會自動刪除下一個最新的舊內核,以允許您「返回」)。

答案3

根據其他人的回答,這通常可以透過重新啟動來解決。

不知何故,“iso9660”模組未載入。depmod掃描所有模組並建立模組依賴關係。

sudo depmod -a
sudo mount /dev/sr0 /mnt
ls -l /mnt

這將解決這個問題。

答案4

我透過升級軟體包並重新啟動解決了這個問題(在 Ubuntu 16.04 上):

sudo apt-get update
sudo apt-get upgrade
sudo reboot

相關內容