[ 已解决 ]12.3 升级到 13.1 时遇到了 block 的问题 [Btrfs 相关 ]

求助帖,目前我从 12.3 升级到 13.1 时遇到了 block 的问题,各种 block,总之升级不能用就对了。
我升级的机器是 Dell-E5430。
我目前大体做过如下尝试:

  1. 首先是直接升级,根分区有 20G 的空间,直接 zypper dup,居然把空间写满了,汗了一把,
    然后随后我检查系统,根文件系统只占了顶多 5G 的样子,usr 是 4.7G,其它的 lib 占了 500M,其它的都很小,撑死也不会超过 10G,
    然后在根文件系统上发现了一个.snapshot 的目录,里面的文件深不见底,cp -rv 给它挪窝,居然填满了 100G 的分区,又 rm -rf,也不行,老是报“只读文件系统”,df -h 又没发现有这个挂上去了,mount -o rw,remount / 也不行
  2. 那就老办法,下载 13.1 的 dvd,硬盘安装,复制文件的过程倒是顺利了,但是重启之后 block,卡在自动配置的 44% 那个地方,又汗了一把,
    然后改手工配置,又卡在配置完网络后的“写入配置文件”的步骤
  3. 然后试图回滚到 12.3,点 update 的方式,原本期望简单更新文件回系统,但是居然在更新文件的时候也卡住了,卡在一个 32k 的很小的包上面
  4. 然后没办法,全新安装 12.3,安装顺利,根文件系统 20G 变 40G,再 zypper refresh; zypper up; zypper dup,升级过程顺利,升级之后系统也还算正常,能访问网络什么的,然后我手贱重启,就卡在登陆界面之前的地方,黑屏了,Ctrl+Alt+F1,控制台还能进,但是控制台里面随便执行个命令都有可能卡住,比如:
    ping,正常
    ifconfig,卡住
    cnf ifconfig,正常
    zypper search net-tools,卡住
    卡住的时候,没有打印堆栈,按 Ctrl+C 还能回显,按电源键系统还有反应
    重启以 3.7 内核引导,也是这样
    然后搜网上也没找到什么人反馈这类问题,但是搜到上面有条帖子说也是卡在登陆界面的地方,就摸过来也求助一下~

---------------update 分割线 -----------------------
这个问题虽然没找到根本原因,但是还是被我给成功绕过去了
经验几个还是有的,总结则个:

  1. release 版本还算有点靠谱的,虽然直接用 13.1 的 dvd 引导升级不了系统,但是不用在线源,直接用 13.1 的 dvd 为源 12.3 上用 13.1 的 dvd 更新总算起来了;
  2. 以前的磁盘分区方案现在看来有点需要 update,kernel+initrd 需要大约 50M,/boot 分 200M 只能放下 4 个版本,/var 分区起码得 10G,升级的时候全下载到这里,/ 分区 20G 也是个误区——btrfs 除外;
  3. zypper 管理软件包不是很靠谱,除了配置不靠谱之外,经常出现阻塞之外,下载不用系统代理之外,其管理的软件包数据也会丢失,比如这次,12.3 的软件源换掉成 13.1 之后,一刷新,原先 3.7 内核版本就查不到了,但文件却还在你的系统里面,只好手工删掉,没删掉的只能 find 了;
  4. block 之后断电重启是个不错的法子;
  5. KDE4 的配置文件还是有一堆问题,主要是因为 KDE 会试图保存关机的程序状态,看起来好像没有对配置文件加锁,所以经常出现重启之后配置不一致的情况,遇到这类情况又不知道怎么弄的时候,直接 rm -rf ~/.kde4,然后重新配置桌面。Orz…
  1. 你用了 Btrfs 文件系统,而且用了很长时间,而你在这么长的时间里居然没有去了解 Btrfs 究竟是什么个系统。Btrfs - openSUSE Wiki 这篇我还没有写完。你可以简单了解一下。

.snapshot 是 btrfs 的快照文件夹,因为你使用的时间很长,所以它也很大,而 btrfs 你用常规的「检查系统」是不会告诉你用了多少空间来放快照的,因为应用程序还都不支持检测 btrfs 这种使用空间的方式(包括命令行程序比如 fdisk -l/df -h)。所以你硬盘会满,但你觉得还剩很多。不信你现在用

su
btrfs filesystem show

这才是用了 btrfs 的用户的真实磁盘空间用量。

而 .snapshot 文件夹你用 cp -r 同样复制不走,因为前面文章已经说了,btrfs 是个「写入时备份」的文件系统,你这么做只会让你的磁盘用量更大而已。真正的清理它的方式是用我们 openSUSE 开发的 Btrfs 快照管理工具:snapper

zh.opensuse.org/openSUSE:Snapper_Tutorial

su
cd /.snapshot
ls

你会看到一堆数字。你可以用

sudo snapper delete /.snapshot/*

来清空这个文件夹。包括你未来升级系统在内,比如你升级 2GB,那它会备份你原来的 2GB,所以你真正使用的空间是双倍,但这么做你觉得升级不好你可以滚回去。

  1. 第一个 44% 还是因为你的文件系统问题(你可以去 /usr/share/YaST2/control/control.xml 自己看,44% 是升级分区)。你不是全新安装,你没空间了。第二个是因为你没有阅读 wiki 上的「openSUSE:13.1 常见问题」,openSUSE 的网卡名称改了,你那么做几乎不太会成功。

  2. 你不说那个包那我也不知道,可能你没有足够耐心吧,也可能你空间满了。

  3. 因为你第一次进桌面后运行升级,升级的内容有内核,而后你又没有重装显卡驱动,所以你黑屏了。而你说的卡住还是你的文件系统问题,你没发现你不卡的命令都是不用读硬盘的命令,而卡的命令都是需要读硬盘的命令吗?我敢说你终端 cp 个大文件,你也一定很卡。

所以对于你这种案例,我的建议的是格式化硬盘,全新安装,文件系统不要选「使用 Btrfs 的分区方案」,因为你根本不明白那是什么,也用不来(无贬义)。

1赞

来这里还真是找对地方了,赞一个~ 果然是久经沙场的老姜,佩服佩服~

现在这个问题我感觉被我绕过去了,一开始我换回 ext 文件系统之后也是起不来的,所以完全没辙了。

  1. btrfs 是半年前试用的,本来是想感受下文件系统性能,没想同步了一堆源码之后整把整个系统的性能都拖下来了,所以也没太关注 btrfs 了,没想这个节骨眼上凸出来。。。贻笑大方了哈~~
  2. 44% 那个地方的时候我已经重新格式化换了 ext4 了的,因为格式化过所以才觉得很困惑,不可能占 40G 的,我一直怀疑这里是网卡驱动给卡住了,所以后面专门手工配置去看,卡在了些配置文件的地方,就算现在我拿已经可以正常工作的分区方案用 dvd 重新升级,也还是卡在那个地方,这一点是可以复制出来的
  3. 更新文件系统的时候(这条我有反复试过),40G 的 ext4 根文件系统,13.1 上更新文件是会卡住的,并且卡住的地方跟磁盘没有关联,比如你第一次卡在 A 包上,重启可以继续,随后会卡在 B 包上,我只是没有反复折腾个十几遍而已啦,大约更新 1000 个包之后会反复出现此类现象。
    这一点我是怀疑 zypper 的问题,因为在 12.3 更新到 13.1 时 zypper dup 这个命令可以复制类似现象,升级大量包会被某个包阻塞,卡在“正在启动”阶段,卡住之后 ctrl+C,ctrl+C 中断,可以继续升级,卡住的时候等半个小时依然会卡住,并不是没耐性,升级的时候经常给你卡住半小时然后要手工去重启它的,13.1 上好像暂时还没遇到这个问题
  4. 升级之后它能显示桌面背景,通常显示流程是这样:桌面背景 → 黑屏 ->KDE4 工具箱 → 桌面 → 启动音乐,我说的黑屏是显示桌面背景之后的那个黑屏,这个时候内核会在桌面背景显示完毕之后加载显卡驱动才导致黑屏?
    至于卡住,因为我之前是怀疑网卡的问题,所以才想回滚 net-tools 到前一个版本看看,我想还是跟磁盘关系不大,虽然有 initrd 的存在,内核始终还是要读磁盘找 shell 的,然后是 ping,最新的 getaddrinfo 是会试图解析域名的,也就是 /etc/hosts 和 /etc/resolv.conf 这俩文件还是会读到,
    我最感到无解的是 cnf,它也不太可能说完全不读磁盘就能回答“ifconfig 属于哪个包”这个问题,但是 zypper 居然也卡就让我很不懂了。
    shell 里面 ctrl+C 无法停止程序这点也是让我非常诧异,ctrl+C 有回显说明 shell 捕获到了按键组合,但是程序没停说明没收到 SIGTERM,第一次见过这样的问题。

目前 13.1 系统暂时可以用了,还是折腾了一把,是这么干的:

  1. 参考这个 en.opensuse.org/Upgrade
  2. 替换了安装源那一步,不用在线源,用 dvd.iso,再 zypper dup
  3. 重启之后一人还是卡在显示完桌面背景之后的地方黑屏,但是再重启就好了
  4. 重启 ok 之后再换在线源,zypper up,能正常用
    因为我这次勾选了“内核开发”的选项,所以在 desktop 内核卡住之后换 default 内核居然就起来了,感觉完全是侥幸。Orz…

从上面信息可以看出,想使用 Btrfs 文件系统的打算只能再等等了 :heart_eyes: