今天更新了系统,内核升级到了 3-18.2.2,然后重启进不去了,出现如下图所示的错误。
查了下,似乎是 initramfs-linux.img 错误,chroot 后用 mkinitcpio -p linux 重新生成后,还是无法进入。
请问这该如何处理?
最近编辑记录 jouyouyun (2015-01-18 17:11:07)
离线
这是我见过提问最清晰的截图了
再截图一张grub引导参数的图片,
你是不是升级的时候把init程序搞坏了(/usr/lib/systemd/systemd),chroot后 ldd /sbin/init 看下
离线
ldd /sbin/init or /usr/lib/systemd/systemd
#ldd /sbin/init
不是动态可执行文件
#ldd /usr/lib/systemd/systemd
不是动态可执行文件
grub引导参数
menuentry 'Arch (on /dev/sda4)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-d48ef2af-4b2f-40d6-a662-edb4751095e4' {
insmod part_msdos
insmod ext2
set root='hd0,msdos4'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos4 --hint-efi=hd0,msdos4 --hint-baremetal=ahci0,msdos4 d48ef2af-4b2f-40d6-a662-edb4751095e4
else
search --no-floppy --fs-uuid --set=root d48ef2af-4b2f-40d6-a662-edb4751095e4
fi
linux /boot/vmlinuz-linux root=UUID=d48ef2af-4b2f-40d6-a662-edb4751095e4 rw quiet
initrd /boot/initramfs-linux.img
}
离线
果然你把 init 搞坏了。file /usr/lib/systemd/systemd 看看?然后重装 systemd 试试。
离线
你安装的是哪个版本的systemd?
systemd官方包的版本应该是这样的
atmouse@ArchCC ~ % file /lib/systemd/systemd
/lib/systemd/systemd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1fae1fe19d54505c6a1e98abe695518f734a6020, stripped
绝对是动态链接
离线
Yun# file /usr/lib/systemd/systemd
/usr/lib/systemd/systemd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1fae1fe19d54505c6a1e98abe695518f734a6020, stripped
Yun# pacman -Qi systemd
名称 : systemd
版本 : 218-1
描述 : system and service manager
架构 : x86_64
URL地址 : http://www.freedesktop.org/wiki/Software/systemd
软件许可 : GPL2 LGPL2.1 MIT
软件组 : 无
提供 : nss-myhostname systemd-tools=218 udev=218
依赖于 : acl bash dbus glib2 kbd kmod hwids libcap libgcrypt
libsystemd libidn lz4 pam libseccomp util-linux xz
可选依赖 : python: systemd library bindings[已安装]
cryptsetup: required for encrypted block devices[已安装]
libmicrohttpd: remote journald capabilities
quota-tools: kernel-level quota management
systemd-sysvcompat: symlink package to provide sysvinit
binaries[已安装]
polkit: allow administration as unprivileged user[已安装]
要求被 : colord device-mapper libgusb libmbim libpulse libusb lvm2
media-player-info mesa mkinitcpio modemmanager netctl
pcmciautils polkit procps-ng qt5-base qtwebkit rtkit
systemd-sysvcompat udisks2 upower xf86-input-evdev
被可选依赖: 无
冲突与 : nss-myhostname systemd-tools udev
取代 : nss-myhostname systemd-tools udev
安装后大小: 23.60 MiB
打包者 : Dave Reisner <dreisner@archlinux.org>
编译日期 : 2014年12月11日 星期四 10时13分36秒
安装日期 : 2015年01月18日 星期日 11时21分59秒
安装原因 : 作为其他软件包的依赖关系安装
安装脚本 : 是
验证者 : 数字签名
离线
咦好奇怪。你把你的 /boot/initramfs-linux.img 上传到某个地方我们看看?
离线
initramfs-linux.img: http://pan.baidu.com/s/1bnwCmWf
离线
里边缺少库文件,所以各种程序跑不了。看来是你的 ldd 而不是 init 程序有问题……
which -a ldd
file /usr/bin/ldd
file -L /lib64/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux.so.2
离线
Yun# which -a ldd
/usr/sbin/ldd
/usr/bin/ldd
/sbin/ldd
/bin/ldd
Yun# file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script, ASCII text executable
Yun# file -L /lib64/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux.so.2
/lib64/ld-linux-x86-64.so.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c50de0e139140a77a886d53046b76869279c7f71, not stripped
/usr/lib64/ld-linux-x86-64.so.2: cannot open `/usr/lib64/ld-linux-x86-64.so.2' (No such file or directory)
/usr/lib/ld-linux.so.2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=bd8081d5f3b7185243443004f3eae5a13aa3645e, not stripped
Yun# file -L /usr/lib/ld-linux-x86-64.so.2
/usr/lib/ld-linux-x86-64.so.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c50de0e139140a77a886d53046b76869279c7f71, not stripped
没有 /usr/lib64 这个目录,只有 /usr/lib 和 /usr/lib32
离线
重装下 filesystem
离线
重装下 filesystem
还是进不了...
离线
还有,不急
Only in in/usr/lib: ld-linux-x86-64.so.2
Only in in/usr/lib: libacl.so.1
Only in in/usr/lib: libattr.so.1
Only in in/usr/lib: libblkid.so.1
Only in in/usr/lib: libc.so.6
Only in in/usr/lib: libcap.so.2
Only in in/usr/lib: libkmod.so.2
Only in in/usr/lib: liblzma.so.5
Only in in/usr/lib: libmount.so.1
Only in in/usr/lib: libpthread.so.0
Only in in/usr/lib: librt.so.1
Only in in/usr/lib: libuuid.so.1
Only in in/usr/lib: libz.so.1
包含这些文件的包也要重装
最近编辑记录 atmouse (2015-01-18 16:54:55)
离线
cd /usr && sudo ln -s lib lib64
sudo mkinitcpio -p linux
按说重新 filesystem 之后 /usr/lib64 就会有的呀。然后重新生成一下 initcpio 文件就可以了。
最近编辑记录 依云 (2015-01-18 16:57:43)
离线
可以看出,你需要在chroot下把所有 base包重装下,
至少这几个你已经坏了 "filesystem glibc acl attr libutil-linux libcap kmod xz"
/usr/lib/
/lib/
/lib64/
/usr/lib64/
都没有那几个库文件
重装好后 再mkinitcpio
注意下mkinitcpio 是不是有提示错误, 如果文件坏了的话,有可能就压不到img里面了
最近编辑记录 atmouse (2015-01-18 17:07:57)
离线