[分享] 被 Ubuntu 坑了

2017-02-20 14:06:07 +08:00
 msg7086

前情摘要

我司入了台洋辣鸡做 NAS ,装上 Ubuntu 16.04 跑 ZFS 。

前戏

今天正好想起来,登上服务器把玩一番,一不小心就发现了奇怪的情况。

Ubuntu 趁人不备,在后台给我静默安装了 15 个不同版本的内核。

高潮

默默 dpkg 列出了所有的内核和脑袋,去掉当前的和最新的,剩下的统统拿去 purge 了。

Purge 花了不少时间,毕竟要处理各种 dkms 和 grub 呢。

全跑完一看……

ZFS 内核模块编译不通过……

仔细读了 Log 发现, 4.4.0-21 是能编译过的, 4.4.0-62 是一定会炸的。

回去跑了 dkms install zfs -v 0.6.5.6 -k 4.4.0-62-generic 看了眼,发现编译错误指向了一个系统 API :

/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c: In function ‘__zpl_xattr_acl_set_access ’:
/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:1284:28: warning: passing argument 1 of ‘ posix_acl_valid ’ from incompatible pointer type [-Wincompatible-pointer-types]
    error = posix_acl_valid(acl);
                            ^
In file included from /var/lib/dkms/zfs/0.6.5.6/build/include/linux/vfs_compat.h:204:0,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zpl.h:37,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zfs_vnops.h:34,
                 from /var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:81:
include/linux/posix_acl.h:84:12: note: expected ‘ struct user_namespace *’ but argument is of type ‘ struct posix_acl *’
 extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
            ^
/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:1284:12: error: too few arguments to function ‘ posix_acl_valid ’
    error = posix_acl_valid(acl);
            ^
In file included from /var/lib/dkms/zfs/0.6.5.6/build/include/linux/vfs_compat.h:204:0,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zpl.h:37,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zfs_vnops.h:34,
                 from /var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:81:
include/linux/posix_acl.h:84:12: note: declared here
 extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
            ^
/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c: In function ‘__zpl_xattr_acl_set_default ’:
/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:1323:28: warning: passing argument 1 of ‘ posix_acl_valid ’ from incompatible pointer type [-Wincompatible-pointer-types]
    error = posix_acl_valid(acl);
                            ^
In file included from /var/lib/dkms/zfs/0.6.5.6/build/include/linux/vfs_compat.h:204:0,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zpl.h:37,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zfs_vnops.h:34,
                 from /var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:81:
include/linux/posix_acl.h:84:12: note: expected ‘ struct user_namespace *’ but argument is of type ‘ struct posix_acl *’
 extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
            ^
/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:1323:12: error: too few arguments to function ‘ posix_acl_valid ’
    error = posix_acl_valid(acl);
            ^
In file included from /var/lib/dkms/zfs/0.6.5.6/build/include/linux/vfs_compat.h:204:0,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zpl.h:37,
                 from /var/lib/dkms/zfs/0.6.5.6/build/include/sys/zfs_vnops.h:34,
                 from /var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.c:81:
include/linux/posix_acl.h:84:12: note: declared here
 extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
            ^
scripts/Makefile.build:258: recipe for target '/var/lib/dkms/zfs/0.6.5.6/build/module/zfs/zpl_xattr.o' failed

默默翻出之前卸掉的那些脑袋包看了眼……

# grep posix_acl_valid /usr/src/linux-headers-4.4.0-??/include/linux/posix_acl.h
/usr/src/linux-headers-4.4.0-21/include/linux/posix_acl.h:extern int posix_acl_valid(const struct posix_acl *);
/usr/src/linux-headers-4.4.0-47/include/linux/posix_acl.h:extern int posix_acl_valid(const struct posix_acl *);
/usr/src/linux-headers-4.4.0-57/include/linux/posix_acl.h:extern int posix_acl_valid(const struct posix_acl *);
/usr/src/linux-headers-4.4.0-59/include/linux/posix_acl.h:extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);
/usr/src/linux-headers-4.4.0-62/include/linux/posix_acl.h:extern int posix_acl_valid(struct user_namespace *, const struct posix_acl *);

解决方案

没什么好说的,滚回之前的版本就好了……

头一次信 Ubuntu ,就给我看这个……

9437 次点击
所在节点    Linux
41 条回复
mephisto
2017-02-20 14:12:37 +08:00
今年地球引力是弱了点
sighforever
2017-02-20 14:13:32 +08:00
这不是内核的锅么?为什么 ubuntu 要背?
fyyz
2017-02-20 14:15:04 +08:00
别重启就不会换内核
DesignerSkyline
2017-02-20 14:17:48 +08:00
把 unattended upgrade 关掉就能解决了吧
neoblackcap
2017-02-20 14:18:28 +08:00
其实我是不明白,你们是有 15 个内核同时在跑?没有的话那么那也只是占一下系统空间而已,没必要删啊。
msg7086
2017-02-20 14:19:15 +08:00
@sighforever 发行版要保证内核模块包与内核包之间的兼容性。
像 ZFS 这样重要的内核模块,竟然会在内核小版本更新的时候出现编译错误,你说这锅为什么不能让 Ubuntu 背……

官方仓库包诶又不是 PPA 第三方。
loading
2017-02-20 14:20:53 +08:00
nas 我会选择 ext4 做文件系统
msg7086
2017-02-20 14:23:52 +08:00
@fyyz 然而万一机房断电了,下一次启动的时候……

@DesignerSkyline 学习了,回头去看一下怎么搞。

@neoblackcap 吃了我 4G 多的硬盘。(当然这并不重要,我不在意。
但是更新内核模块的时候要编译 15 次你想过要多少时间吗……

@loading 如果能让我选的话,我会选 XFS 。
但是要用 ZFS RAID Z3 ,我没的选啊。
jarlyyn
2017-02-20 14:29:06 +08:00
ubuntu+zfs

艺高人胆大,必须赞
zlhdd108
2017-02-20 14:29:52 +08:00
zfs 应该是 Freebsd 的支持最好,作 nas ,配置够,直接用 Freenas 吧,基于 Freebsd ,只支付 zfs
msg7086
2017-02-20 14:33:34 +08:00
@zlhdd108 我们以前的 NAS 就是 FreeNAS 上面跑的 UFS ,被我拆下来扔了……
BSD 不会玩,还是 Linux 熟悉一点,包管理,设备,应用层的环境什么的……
之前用 Ubuntu 跑 ZFS 也是因为 Ubuntu 官家放话说要好好支持……
zlhdd108
2017-02-20 14:37:10 +08:00
@msg7086 实际上还是 bsd 支持好…
dynaguy
2017-02-20 14:37:19 +08:00
貌似 LZ 用的是 Ubuntu 的 desktop 版本~

Server 版一般是不會自動給你升級的。
msg7086
2017-02-20 14:39:19 +08:00
@zlhdd108 我知道的,还不是看中 Linux 的生态嘛……

@dynaguy 我一定是用了假的 Ubuntu→_→
-rwxrw-rw- 1 nobody nogroup 655M Apr 21 2016 ubuntu-16.04-server-amd64.iso*
gwind
2017-02-20 14:42:32 +08:00
Ubuntu ZFS 应该问题不大吧?我是 CentOS7 + ZFS 的,用了1年的备份服务器。
squid157
2017-02-20 14:55:52 +08:00
我想了半天 决定 Ubuntu+ext4
zfs 还是 FreeBSD 吧
btrfs 有 bug
trlsmax
2017-02-20 14:57:44 +08:00
Linux 的 nas 系统好像有个叫 open media vault 的,不过貌似不支持 zfs
msg7086
2017-02-20 15:03:57 +08:00
@trlsmax OMV 那个是面向普通人群的,「 without deeper knowledge 」。
对于我们做开发的公司来说适得其反。

@squid157 其实还有一种奇葩的结构,就是在 ESXi 上装 BSD / Solaris ,带着直通上来的硬盘构建出 ZFS 以后,做成 iSCSI target 装载进 ESXi ,然后再把 Ubuntu 安装在这上面。
很蛋疼。
Showfom
2017-02-20 15:24:14 +08:00
所以用 Debian 啊哈哈
Tairy
2017-02-20 15:29:38 +08:00
刚删了一堆自动不知道啥时候更新的内核,硬盘瞬间多了好几个 G !

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX