filesystem喜闻乐见中招解救
发表于 : 2013-06-06 0:35
昨天晚上yaourt -Syua,出现了
filesystem: /bin exists in filesystem
filesystem: /sbin exists in filesystem
filesystem: /usr/sbin exists in filesystem
上网胡搜一通(非官网),据说加了--force可以解决问题(坑爹)
然后运行了
yaourt -Su bash --force
....
略微感觉不妥,不能开新bash了,再yaourt -Syua还是无法更新,于是想着重启应该能够解决(<----教训,重启要慎重啊),结果重启后连系统都进不了,emergency mode键盘无反应。。。。
想起来看官网:https://www.archlinux.org/news/binaries ... ervention/
原来将/bin, /sbin, /usr/sbin里的文件都统一到/usr/bin了。估计是强制更新了bash以后,bash默认安装进/usr/bin,而系统其他软件没有更新,因此启动时在/bin下找不到bash,导致启动失败。
那么解决办法很简单了。
1,用arch启动盘登陆(没有启动盘的悲剧了。。我用的arch安装盘,要支持你的文件系统的)
挂载本地根目录到mnt(sda1换成你本地系统根目录所在分区)
mount /dev/sda1 /mnt
创建bash的软连接
ln -s /mnt/usr/bin/bash /mnt/bin/bash
(因为我的系统默认使用zsh,所以再创建zsh的软连接,没有的忽略此步)
ln -s /mnt/usr/bin/zsh /mnt/bin/zsh
2,现在可以chroot入本地系统了
chroot /mnt
3,清理 /bin /sbin /usr/sbin
非官方源的包查询:
pacman -Qqo /bin /sbin /usr/sbin | pacman -Qm
把这些包记下来,统统卸载掉,一会再装上。
paclist <repo> | awk ' { print $1 } ' | pacman -Ql - | grep ' /s\?bin/\| /usr/sbin/'
这个也是,查询好记下来然后卸载掉。<repo>换成非官方源,没有的忽略此步。
确保/etc/pacman.conf的IgnorePkg或IgnoreGroup里的包没有文件在/bin, /sbin, or /usr/sbin,有的话记下来然后处理好。
确保/bin /sbin /usr/sbin里没有任何遗漏的文件(除了了自己建立的/bin/bash,/bin/zsh之外):
find /bin /sbin /usr/sbin -exec pacman -Qo -- {} + >/dev/null
4,由于是chroot进入系统,所以更新时会提示mtab文件错误。
执行如下命令:
mv /etc/mtab /etc/mmmtab
cp /etc/fstab /etc/mtab
更新完毕后再
mv mmmtab mtab
即可。
5,更新时会提示签名错误。
编辑/etc/pacman.conf,在每个源下都加入SigLevel = Never。过后可以删除。
6,
pacman -Su --ignore filesystem,bash
pacman -S bash
pacman -Su
7,删除bin目录,然后建立软链接
rm -rf /bin
ln -s /usr/bin /bin
8,reboot~
之后重新yaourt -Syua一次,结束。
========================
后记,赶紧用btrfs的snapshot去。。。
filesystem: /bin exists in filesystem
filesystem: /sbin exists in filesystem
filesystem: /usr/sbin exists in filesystem
上网胡搜一通(非官网),据说加了--force可以解决问题(坑爹)
然后运行了
yaourt -Su bash --force
....
略微感觉不妥,不能开新bash了,再yaourt -Syua还是无法更新,于是想着重启应该能够解决(<----教训,重启要慎重啊),结果重启后连系统都进不了,emergency mode键盘无反应。。。。
想起来看官网:https://www.archlinux.org/news/binaries ... ervention/
原来将/bin, /sbin, /usr/sbin里的文件都统一到/usr/bin了。估计是强制更新了bash以后,bash默认安装进/usr/bin,而系统其他软件没有更新,因此启动时在/bin下找不到bash,导致启动失败。
那么解决办法很简单了。
1,用arch启动盘登陆(没有启动盘的悲剧了。。我用的arch安装盘,要支持你的文件系统的)
挂载本地根目录到mnt(sda1换成你本地系统根目录所在分区)
mount /dev/sda1 /mnt
创建bash的软连接
ln -s /mnt/usr/bin/bash /mnt/bin/bash
(因为我的系统默认使用zsh,所以再创建zsh的软连接,没有的忽略此步)
ln -s /mnt/usr/bin/zsh /mnt/bin/zsh
2,现在可以chroot入本地系统了
chroot /mnt
3,清理 /bin /sbin /usr/sbin
非官方源的包查询:
pacman -Qqo /bin /sbin /usr/sbin | pacman -Qm
把这些包记下来,统统卸载掉,一会再装上。
paclist <repo> | awk ' { print $1 } ' | pacman -Ql - | grep ' /s\?bin/\| /usr/sbin/'
这个也是,查询好记下来然后卸载掉。<repo>换成非官方源,没有的忽略此步。
确保/etc/pacman.conf的IgnorePkg或IgnoreGroup里的包没有文件在/bin, /sbin, or /usr/sbin,有的话记下来然后处理好。
确保/bin /sbin /usr/sbin里没有任何遗漏的文件(除了了自己建立的/bin/bash,/bin/zsh之外):
find /bin /sbin /usr/sbin -exec pacman -Qo -- {} + >/dev/null
4,由于是chroot进入系统,所以更新时会提示mtab文件错误。
执行如下命令:
mv /etc/mtab /etc/mmmtab
cp /etc/fstab /etc/mtab
更新完毕后再
mv mmmtab mtab
即可。
5,更新时会提示签名错误。
编辑/etc/pacman.conf,在每个源下都加入SigLevel = Never。过后可以删除。
6,
pacman -Su --ignore filesystem,bash
pacman -S bash
pacman -Su
7,删除bin目录,然后建立软链接
rm -rf /bin
ln -s /usr/bin /bin
8,reboot~
之后重新yaourt -Syua一次,结束。
========================
后记,赶紧用btrfs的snapshot去。。。