我在 Ubuntu 上安装 Windows 后尝试修复 GRUB。但我无法修复它,问了这个问题。在与psusi讨论时,我们注意到了一些事情。我安装的系统是 64 位的,但我的一些库文件是 32 位的(例如:)libdevmapper.so.1.02.1
。
(您可以查看步骤 13 以了解我的问题。并查看其他步骤以了解我遵循了哪些步骤。)
- 我的旧 Ubuntu 安装在 上
/dev/sda3
。我将其安装到/mnt/ubusda3
root@ubuntu:/home/ubuntu# file /mnt/ubusda3/sbin/init /mnt/ubusda3/sbin/init: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
root@ubuntu:/home/ubuntu# file /mnt/ubusda3/lib/libdevmapper.so.1.02.1 /mnt/ubusda3/lib/libdevmapper.so.1.02.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
sudo dpkg --root=/mnt/ubusda3 -i /mnt/ubusda3/var/cache/apt/archives/libbz2-1.0_1.0.5-6ubuntu1.11.10.1_amd64.deb
chroot /mnt/ubusda3
apt-get install --reinstall libdevmapper1.02.1
- 然后我再次尝试,但
update-grub
出现了mapdevfs: error while loading shared libraries: libdebian-installer.so.4: cannot open shared object file: No such file or directory
错误。 - 我重新启动了系统但什么也没有改变。
- 我发现 mapdevfs 已
/bin/mapdevfs
通过which mapdevfs
命令打开。 sudo rm /bin/mapdevfs
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt/ubusda3$i"; done
grub-install /dev/sda
- 我终于解决了 GRUB 问题。现在启动时会出现 GRUB 菜单。 以前的 Linux 版本屏幕(和灰尘)
但是当我选择时Ubuntu 3.0.0.17-generic
,它会在加载屏幕上冻结,并且出现此错误:(滚动锁定和数字键盘(的第一个键闪烁。
当我选择其他内核版本时以前的 Ubuntu 版本屏幕-,我两个都遇到了这个错误。
注释 1(针对无理智的约翰)
ubuntu@ubuntu:~$ sudo su
root@ubuntu:/home/ubuntu# mkdir /mnt/ubusda3
root@ubuntu:/home/ubuntu# mount /dev/sda3 /mnt/ubusda3
root@ubuntu:/home/ubuntu# for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt/ubusda3$i"; done
root@ubuntu:/home/ubuntu# chroot /mnt/ubusda3/
root@ubuntu:/# apt-get -V --reinstall install libnih
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libnih
然后我注意到它libnih1
不是linbih
(http://packages.ubuntu.com/search?keywords=libnih&searchon=names&suite=oneiric§ion=all)
root@ubuntu:/# apt-get -V --reinstall install libnih1
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
winbind (3.5.11~dfsg-1ubuntu2.2)
The following packages will be upgraded:
winbind (3.5.11~dfsg-1ubuntu2.1 => 3.5.11~dfsg-1ubuntu2.2)
1 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
6 not fully installed or removed.
Need to get 54.7 kB/5,693 kB of archives.
After this operation, 32.8 kB disk space will be freed.
Do you want to continue [Y/n]? y
WARNING: The following packages cannot be authenticated!
libnih1
Install these packages without verification [y/N]? y
Get:1 http://tr.archive.ubuntu.com/ubuntu/ oneiric/main libnih1 amd64 1.0.3-4ubuntu2 [54.7 kB]
Fetched 54.7 kB in 0s (57.1 kB/s)
Can not write log, openpty() failed (/dev/pts not mounted?)
(Reading database ... 196784 files and directories currently installed.)
Preparing to replace winbind 2:3.5.11~dfsg-1ubuntu2.1 (using .../winbind_2%3a3.5.11~dfsg-1ubuntu2.2_amd64.deb) ...
/sbin/runlevel: error while loading shared libraries: libnih.so.1: wrong ELF class: ELFCLASS32
* Stopping the Winbind daemon winbind
...done.
Unpacking replacement winbind ...
Preparing to replace libnih1 1.0.3-4ubuntu2 (using .../libnih1_1.0.3-4ubuntu2_amd64.deb) ...
Unpacking replacement libnih1 ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Can not write log, openpty() failed (/dev/pts not mounted?)
Setting up libwbclient0 (2:3.5.11~dfsg-1ubuntu2.2) ...
Setting up samba-common (2:3.5.11~dfsg-1ubuntu2.2) ...
Setting up winbind (2:3.5.11~dfsg-1ubuntu2.2) ...
* Starting the Winbind daemon winbind
/usr/sbin/winbindd: error while loading shared libraries: libcap.so.2: wrong ELF class: ELFCLASS32
...fail!
invoke-rc.d: initscript winbind, action "start" failed.
dpkg: error processing winbind (--configure):
subprocess installed post-installation script returned error exit status 127
Setting up libsmbclient (2:3.5.11~dfsg-1ubuntu2.2) ...
Setting up samba-common-bin (2:3.5.11~dfsg-1ubuntu2.2) ...
Setting up smbclient (2:3.5.11~dfsg-1ubuntu2.2) ...
Setting up libnih1 (1.0.3-4ubuntu2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Errors were encountered while processing:
winbind
E: Sub-process /usr/bin/dpkg returned an error code (1)
这次我得到了相同的libnih-dbus.so....
文件启动错误。
另外,为了查找其他 32 位文件,我执行了你的命令,我看到了所有文件/mnt/ubusda3/lib/modules/3.0.0-12-generic/
和/mnt/ubusda3/bin
32 位。
是否可以重新安装整个内核文件?
答案1
好吧,我尝试了所有答案,所有答案。但我无法解决我的问题。最后,我重新安装了 Ubuntu。
答案2
您是否可以使用以下方式启动当前安装任何您的系统上安装了哪些内核?
看着你的与 psusi 聊天有一个带有链接的消息到靴子修复膏 938724。它显示您已创建包含以下内容的 GRUB 菜单:
'Ubuntu, with Linux 3.0.0-17-generic'
'Ubuntu, with Linux 3.0.0-17-generic (recovery mode)'
'Ubuntu, with Linux 3.0.0-16-generic'
'Ubuntu, with Linux 3.0.0-16-generic (recovery mode)'
'Ubuntu, with Linux 3.0.0-12-generic'
'Ubuntu, with Linux 3.0.0-12-generic (recovery mode)'
您是否尝试过所有这些方法,但它们都以同样的方式失败了?我只是想知道,如果其中一种方法允许您成功启动,那么也许您可以通过清除/卸载失败的内核然后重新安装它来恢复。
4 月 24 日
根据靴子修复膏 938724,在探测时update-grub
在您的文件夹中找到了这些条目/boot
。至少这是 boot-pair 在 中找到的sda3/boot/grub/grub.cfg
。
启动时,您在 GRUB 菜单中看到什么?它是否类似于以下内容?
Ubuntu, with Linux 3.0.0-17-generic
Ubuntu, with Linux 3.0.0-17-generic (recovery mode)
Previous Linux versions
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Windows 7 (loader) (on /dev/sda4)
(如果您在启动时没有看到 GRUB 菜单,请尝试shift在启动过程开始时按下/按住该键以取消隐藏菜单。)
如果您看到带有条目的 GRUB 菜单Previous Linux versions
,请尝试选择该条目并按enter。您应该看到另一个菜单,其中包含3.0.0-16
和3.0.0-12
内核的条目。看看启动它们时会发生什么。
4 月 26 日
越来越好奇。好的,所以ELFCLASS32
再次改为 64。不知道还能做什么,我建议你按照你之前的步骤去做与 psusi 聊天。
- 为 64 位(AMD64)Ubuntu 11.10 启动 Live CD/USB。
- 将 挂载
chroot
到损坏的 Ubuntu 安装中/dev/sda3
。然后运行apt-get
重新安装正确的 64 位版本libnih.so.1
。
# 将 /dev/sda3 挂载为 /mnt/ubu2fix mkdir /mnt/ubu2fix sudo mount /dev/sda3 /mnt/ubu2fix # chroot 以便 '/mnt/ubu2fix' 变为 '/' 以进行命令处理 对于 /sys /proc /run /dev 中的 i;执行 sudo mount --bind "$i" "/mnt/ubu2fix/$i";完成 sudo chroot/mnt/ubu2fix # 重新安装包含 libnih1.so.1.0.0(又名 libnih1.so.1)的软件包 apt-get -V --reinstall 安装 libnih1
然而,前你这样做chroot
,你可能首先想尝试找出到底有多少其他 ELFCLASS32
文件可能存在并且(可能)需要修复。我认为以下命令可以做到这一点。
以下命令针对Ubuntu 安装中file
的 目录/bin
、/sbin
、/lib
和中的每个文件运行该命令。将输出限制为 32 位可执行文件。 /lib64
/dev/sda3
grep
如果一切正确,那么这些命令应该产生**NO输出。** 运行这些命令时列出的所有文件都是 32 位的,但它们应该是 64 位的。它们(可能)需要重新安装才能使系统正常工作。
sudo find /mnt/ubu2fix/bin -type f -exec file '{}' \; | grep 32-bit
sudo find /mnt/ubu2fix/sbin -type f -exec file '{}' \; | grep 32-bit
sudo find /mnt/ubu2fix/lib -type f -exec file '{}' \; | grep 32-bit
sudo find /mnt/ubu2fix/lib64 -type f -exec file '{}' \; | grep 32-bit
运行上述命令后安装/dev/sda3
为/mnt/ubu2fix
,但前你执行chroot
。 (或者在 之外的不同终端中运行它们chroot
。)
4 月 29 日
我看了看你的注 1。
抱歉,之前没注意到你的评论
“中的所有文件 /mnt/ubusda3/lib/modules/3.0.0-12-generic/
都是/mnt/ubusda3/bin
32 位的。“
我当然没有想到会是这样。 ”
“是否可以重新安装整个内核文件?“
我不确定你在问什么。(但即使我知道,我也不确定我是否知道该怎么做。抱歉。)
5 月 1 日 - 考虑从 11.10 升级到 11.10
之前,当我读到@Alvar 的评论时,他建议进行安装以恢复系统,我以为这意味着破坏您当前的设置,所以我忽略了它。现在我不太确定了。
事实证明,在像你这样将 Ubuntu 和 Windows 安装在同一硬盘的不同分区中的情况下,Ubuntu 安装程序会询问你想要执行哪种类型的安装,如下图所示。
我试过升级安装在 VirtualBox VM 中将 11.10 升级到 11.10,以更好地了解它的功能。它似乎像它声称的那样工作。我确实有一些警告,已在下面列出。
我无法就您是否应该重新安装提供任何建议。我不知道您的情况,也不知道您手头有哪些资源或没有哪些资源。
一些注意事项:
- 您必须小心输入当前用户身份当安装程序提示输入时,输入新的用户 ID。如果您输入不同的用户 ID,旧的用户 ID 将被删除。您将无法使用该用户 ID 登录。此问题对此进行了更详细的描述:如何使用旧的主文件夹恢复已删除的用户名?
- 如果您选择
Download updates while installing
,则安装显然相当于apt-get dist-upgrade
。升级安装之前,我有 8 个待处理的升级。完成后,有 0 个待处理的更新,并且已安装新内核 3.0.0-19-generic。 - Firefox 似乎没问题。我的密码、历史记录和书签似乎都保留了下来。我的 Google Chrome 浏览器的应用程序部分被删除了,但其中的用户数据没有被删除。因此,在我重新安装 Chrome 后,我的设置、书签等在 Chrome 中也能正常工作。
- 虽然一切似乎运行良好,但最安全的做法是,一如既往,在开始安装之前备份 Ubuntu 分区中的数据。你是唯一知道你的数据对你有多重要或多不重要的人。因此,你是唯一知道你愿意承担或不愿意承担哪些风险的人。
答案3
你需要尝试发行版“Ubuntu 救援混音”并从 cd/usb 实时启动,可以使用应用程序修复 Grub 或检测另一个操作系统。
It is very easy to use, I working great for me.
可以在此处获取救援 iso:
答案4
当我更改BIOS
设置时,我遇到了这个问题。如果您更改了 BIOS 设置,或者即使没有更改,也只需重置BIOS
为默认值并恢复结果。