TL; DR này có thể được khắc phục nhanh chóng bằng cách khởi động lại . Sau đó, CD-ROM sẽ hoạt động và Bổ sung khách sẽ có thể cài đặt:
sudo reboot
Trình tự "tốt nhất" để cập nhật kernel trên VirtualBox với Bổ sung là:
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
(Hạt nhân cũ tiếp theo mới nhất có thể không được tự động xóa vì lý do bảo mật, để cho phép bạn "quay lại").
Làm sao chuyện này lại xảy ra? (câu trả lời dài trước đó)
Chính xác thì loại vấn đề này sẽ phát sinh nếu bạn:
- nâng cấp kernel (giả sử từ 0,66 lên 0,67)
- chạy
apt-get autoremove
và bằng cách nào đó loại bỏ kernel đang chạy hoặc xóa thủ công kernel "cũ", do đó xóa tất cả các mô-đun khỏi /lib/modules/kernel.66
- không khởi động lại, do đó giữ cho hạt nhân .66 "cũ" chạy. Các mô-đun được tải vẫn còn trong bộ nhớ và mọi thứ đều hoạt động, nhưng không có mô-đun mới nào có thể được tải do .66 mô-đun đã bị xóa.
- cố gắng làm bất cứ điều gì yêu cầu tải một mô-đun chưa được tải
Và việc cài đặt VirtualBox ISO có thể yêu cầu chính xác điều đó - tải mô-đun hỗ trợ ISO9660.
Mô-đun được yêu cầu bây giờ không còn có thể được tự động tải nữa, vì kernel đang chạy (.66) không tìm thấy gì trong /lib/modules/kernel.66. Mô-đun tồn tại , nhưng nó nằm trong /lib/modules/kernel.67, trong đó hạt nhân .66 hiện tại không biết gì về (và không nên tải mô-đun không khớp).
Tất nhiên, cài đặt lại kernel uname'd sẽ cài đặt lại các mô-đun kernel đang chạy, do đó làm cho ../.66/.../isofs.ko có sẵn một lần nữa và làm cho việc khởi động lại không cần thiết. Đây là một hạ cấp của kernel đã cài đặt và vấn đề cập nhật sẽ vẫn còn (xem bên dưới).
Đó là, khi bạn chạy CD bổ sung, nó sẽ cài đặt cho kernel .66 đang chạy chứ không phải kernel .67 được cập nhật (vẫn không chạy).
Nếu bạn ở trong tình huống như vậy, bạn chắc chắn cũng có thể khắc phục bằng cách khởi động lại (kernel mới chạy .67 sẽ tìm thấy các mô-đun của nó) và có thể bằng cách tải mô-đun thuộc về kernel mới ( isofs
khá ổn định), trừ khi bạn trải qua một nâng cấp kernel quan trọng vẫn sẽ tương thích ( điều này vẫn không được khuyến khích! ):
# mount /dev/cdrom /mnt
mount: unknown filesystem type 'iso9660'
Đây là lỗi gốc mà bạn gặp phải ("loại hệ thống tập tin không xác định").
# uname -a
Linux virtual 3.13.0-66-generic ...
Vì vậy, chúng tôi kiểm tra phiên bản nào của các mô-đun được cài đặt. Nó phải là .66:
# ls /lib/modules
3.13.0-67-generic
... nhưng chỉ có một thư mục và nó .67 (thư mục .66 có thể ở đó, nhưng trống rỗng, trong trường hợp du -sh /lib/modules/*
này sẽ cho biết các thư mục khác nhau chiếm bao nhiêu dung lượng, cho phép phân biệt giữa các thư mục trống và đầy đủ).
Cài đặt lại hình ảnh kernel cũ mà không có grub sẽ không khắc phục được vấn đề thực sự
Bạn cài đặt lại kernel .66 với các mô-đun và tiêu đề của nó. Bây giờ bạn có cả hai nhân, với grub
thiết lập để tải .67 mới hơn.
Có thể gắn ISO CD-ROM (vì hiện tại đã có mô-đun) và các mô-đun VBox sẽ biên dịch (vì các tiêu đề đã được cài đặt).
Nó sẽ biên dịch các mô-đun cho kernel .66 đang chạy và chúng sẽ hoạt động ... trong một thời gian.
Trong lần khởi động lại đầu tiên, bạn sẽ thấy mình có kernel .67 không có bổ sung VirtualBox nào cả.
Cài đặt lại hình ảnh kernel cũ bằng reubub và khởi động lại cũng sẽ không khắc phục được vấn đề thực sự
Như trên, bạn khởi động lại và tìm thấy chính mình với một kernel bị hạ cấp. Rất sớm thôi, Ubuntu sẽ cố gắng nâng cấp nó và bạn sẽ quay lại nơi bạn đã bắt đầu (xem bên dưới: "hạ cấp kernel").
Vá trong mô-đun ISO cũng sẽ không khắc phục được sự cố thực sự
Có thể chúng ta có thể buộc tải mô-đun ISO9660 như nhau, vì không có công việc nào được thực hiện giữa các hạt 66 và 67 và về cơ bản nhị phân không thay đổi, vì vậy chúng tôi thử:
# insmod /lib/modules/3.13.0-67-generic/kernel/fs/isofs/isofs.ko
Không có lỗi. Nó đã làm việc. Mô-đun được nạp kernel .66 từ kernel .67. Hãy thử lại để gắn CD-ROM:
# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
Điều này vẫn không có ích, vì CD đang được cài đặt là VirtualBox Additions, yêu cầu các tiêu đề kernel đang chạy phải được cài đặt. Nếu các mô-đun hạt nhân đang chạy không còn ở đó, rất có thể các tiêu đề hạt nhân cũng không.
Ngoài ra, các mô-đun Virtualbox mới được biên dịch sẽ không có nơi nào để đi, vì thư mục mô-đun .66 đã được xóa.
Nhưng giả sử bạn đã khắc phục tất cả những điều đó: về cơ bản bạn đã thực hiện hạ cấp kernel (và một phần) đắt tiền và các bổ sung sẽ bị mất ở lần nâng cấp tiếp theo cùng với phần còn lại của kernel .66, chính xác như trong trường hợp trên.
Việc hạ cấp kernel sẽ hoạt động ... trong một thời gian
Nếu chúng ta loại bỏ kernel .67 và cài đặt lại kernel .66 với các mô-đun thay thế, mọi thứ sẽ trở nên tồi tệ trong một thời gian. Không cần khởi động lại, như trong giải pháp "bắt buộc mô-đun ISO" ở trên.
Và khởi động lại sẽ không mất bất cứ thứ gì, vì không có kernel bị thách thức bổ sung nào được cài đặt.
Nhưng theo cách này, kernel vẫn sẽ nằm trong danh sách "được nâng cấp" và vấn đề tương tự này chắc chắn sẽ phát sinh sớm hay muộn.
Cấp, bây giờ bạn có thể có nó phát sinh trong một số thời điểm thích hợp hơn của sự lựa chọn của bạn, có thể có giá trị khá nhiều.
Chỉ cần khởi động lại!
Khởi động lại, kernel .67 gần đây sẽ được kích hoạt và tất cả các mô-đun và tiêu đề của nó đều ở đó.
Vì vậy, sau khi khởi động lại, Guest Additions sẽ hoạt động và bản nâng cấp sẽ "lấy".