同时修改用户组名和家目录,UCloud内核热补丁技

零代价修复服务器内核缺陷 UCloud内核热补丁技术揭秘

7月18日,由InfoQ主办的ArchSummit全球架构师峰会在深圳拉开帷幕,此次会议重点选择了6个当前最受关注的领域,包括:游戏、电商、移动互联网等等。UCloud作为国内专注服务上述垂直领域的云服务商,受邀参加了本次大会。会上,UCloud资深工程师邱模炯还以《UCloud云平台的内核实践》为主题,给大家揭开了UCloud云平台内核技术的神秘面纱。其中,“UCloud内核热补丁技术”更是引发了全场架构师们的极大关注。

如何零代价修复海量服务器的Linux内核缺陷?

对于一个拥有成千上万台服务器的公司,Linux内核缺陷导致的死机屡见不鲜。让工程师们纠结的是,到底要不要通过给服务器升级内核来修复缺陷?升级意味者服务器重启、业务中断以及繁重的准备工作;不升级则担心服务器死机,同样造成业务中断和繁重的善后工作。

而在今天的云计算时代,一台宿主机往往运行多个云主机,每一次重启不管是主动升级还是被动死机,都意味着中断其上运行的所有云主机。因此,宿主机内核缺陷的修复更加棘手。

而作为一个支撑着上万家企业用户IT基础架构的云服务商,UCloud云平台上的海量宿主机又是如何修复内核缺陷的呢?

邱模炯透露,如果按照传统的重启方式来修复,那么无论是对于UCloud或是用户,都意味着繁重的运维和业务中断。但是,UCloud通过“内核热补丁技术”——即给运行中的内核打上二进制补丁,UCloud已经做到了零代价免重启修复海量服务器的内核缺陷!目前为止,UCloud对所发现的上游内核10 个缺陷全以热补丁方式修复,累计数万台次,无一例失败且无任何副作用;理论上避免了相应次数的宿主机重启及所隐含的云主机业务中断。这项技术在UCloud已经成熟。

UCloud 内核热补丁技术揭秘

UCloud的热补丁技术基于多年前的开源ksplice加以定制优化而来,通过加载一个特殊准备的热补丁模块来修复内核。其过程如下图所示:

图片 1

热补丁模块由ksplice程序编译生成,包含有缺陷的二进制指令和修复后的二进制指令(这些二进制按函数级别组织);模块加载后,自动定位到内核的缺陷处并以修复指令动态替换缺陷指令。

除了免重启修复,热补丁还用于内核开发过程的性能分析和故障定位。比如,加上性能统计代码生成热补丁,就可以在线分析感兴趣的性能问题;加入额外调试代码捕捉运行中内核的异常。这些非常有用,更是海量服务器里捕捉不可重现内核异常的不二法宝。由于热补丁不需要重启服务器,既可打入也可撤销,所以不会有副作用。

UCloud对开源Ksplice的优化主要在以下三个方面:

支持高版本内核

热补丁技术与内核紧密耦合。不同版本的内核在指令结构体,符合表结构体和一些特性上(比如早期内核没有ftrace)有所不同,直接影响热补丁成败。UCloud研究了各版本内核的区别,使得同一份ksplice支持各个版本的Linux内核。值得一提的是,解决了ftrace与ksplice不兼容的问题。

允许热修复频繁调用的函数

不管什么样的热补丁技术,两种类型的内核函数难以热补丁:频繁使用的内核函数如schedule, hrtimer;经常处于线程栈内核部分顶部的函数,如sys_poll, sys_read。UCloud更改了ksplice相关内核代码和用户态工具,成功解除了这些限制,比如UCloud现网服务器已打入了三个hrtimer热补丁。

减少业务中断时间

ksplice是在stop_machine后替换二进制指令的。虽然单次stop_machine对业务造成的中断在一毫秒左右,但有些频繁使用的内核函数需要大量重试才能碰到合适的热补丁时机,于是会造成最长达上百毫秒的中断。UCloud在此做过一点优化,使得业务中断时间控制在十毫秒级别。

海量服务器环境下热补丁技术可用来零代价且无副作用地修复内核缺陷,而且内核开发也因热补丁能走得更远更好。以前因为缺乏辅助分析手段和惧怕内核BUG,即使适合在内核实现的特性也被告诫移到用户态实现,然而有了热补丁,相关观念也可以适当调整,内核开发也可以更加大胆和跳脱。

UCloud内核热补丁技术揭秘 7月18日,由InfoQ主办的ArchSummit全球架构师峰会在深圳拉开帷幕,此次会议重点选择了...

Cheat : 一个实用 Linux 命令示例集合 | Linux 中国,cheatlinux

我们中的许多人经常查看 man 页面 来了解命令开关(选项),它会显示有关命令语法、说明、细节和可用的选项,但它没有任何实际的例子。因此,在组合成一个我们需要的完整命令时会遇到一些麻烦。-- Magesh Maruthamuthu

本文导航◈ Cheat 是什么10%◈ 如何安装 Cheat16%◈ 如何使用 Cheat62%编译自 |  
 作者 | Magesh Maruthamuthu
 译者 | geekpi

我们中的许多人经常查看 man 页面[1] 来了解命令开关(选项),它会显示有关命令语法、说明、细节和可用的选项,但它没有任何实际的例子。因此,在组合成一个我们需要的完整命令时会遇到一些麻烦。

你确实遇到这个麻烦而想要一个更好的解决方案吗?我会建议你试一下 cheat

Cheat 是什么

cheat[2] 允许你在命令行中创建和查看交互式的速查表cheatsheet。它旨在帮助提醒 *nix 系统管理员他们经常使用但还没频繁到会记住的命令的选项。

如何安装 Cheat

cheat 是使用 python 开发的,所以可以用 pip 来在你的系统上安装 cheat

pip 是一个与 setuptools 捆绑在一起的 Python 模块,它是在 Linux 中安装 Python 包推荐的工具之一。

对于 Debian/Ubuntu 用户,请使用 apt-get 命令[3]或apt 命令[4]来安装 pip

  1. [对于 Python2]

  2. $ sudo apt install python-pip python-setuptools

  3. [对于 Python3]

  4. $ sudo apt install python3-pip

RHEL/CentOS 官方仓库中没有 pip,因此使用 EPEL 仓库[5],并使用 YUM 命令[6]安装 pip

  1. $ sudo yum install python-pip python-devel python-setuptools

对于 Fedora 系统,使用 dnf 命令[7]来安装 pip

  1. [对于 Python2]

  2. $ sudo dnf install python-pip

  3. [对于 Python3]

  4. $ sudo dnf install python3

对于基于 Arch Linux 的系统,请使用 Pacman 命令[8] 来安装 pip

  1. [对于 Python2]

  2. $ sudo pacman -S python2-pip python-setuptools

  3. [对于 Python3]

  4. $ sudo pacman -S python-pip python3-setuptools

对于 openSUSE 系统,使用 Zypper 命令[9]来安装 pip

  1. [对于 Python2]

  2. $ sudo pacman -S python-pip

  3. [对于 Python3]

  4. $ sudo pacman -S python3-pip

用 pip 来在你的系统上安装 cheat

  1. $ sudo pip install cheat

如何使用 Cheat

运行 cheat,然后按相应的命令来查看速查表,作为例子,我们要来看下 tar 命令的例子。

  1. $ cheat tar

  2. # To extract an uncompressed archive:

  3. tar -xvf /path/to/foo.tar

  4. ``

  5. # To create an uncompressed archive:

  6. tar -cvf /path/to/foo.tar /path/to/foo/

  7. ``

  8. # To extract a .gz archive:

  9. tar -xzvf /path/to/foo.tgz

  10. ``

  11. # To create a .gz archive:

  12. tar -czvf /path/to/foo.tgz /path/to/foo/

  13. ``

  14. # To list the content of an .gz archive:

  15. tar -ztvf /path/to/foo.tgz

  16. ``

  17. # To extract a .bz2 archive:

  18. tar -xjvf /path/to/foo.tgz

  19. ``

  20. # To create a .bz2 archive:

  21. tar -cjvf /path/to/foo.tgz /path/to/foo/

  22. ``

  23. # To extract a .tar in specified Directory:

  24. tar -xvf /path/to/foo.tar -C /path/to/destination/

  25. ``

  26. # To list the content of an .bz2 archive:

  27. tar -jtvf /path/to/foo.tgz

  28. ``

  29. # To create a .gz archive and exclude all jpg,gif,... from the tgz

  30. tar czvf /path/to/foo.tgz --exclude=*.{jpg,gif,png,wmv,flv,tar.gz,zip} /path/to/foo/

  31. ``

  32. # To use parallel (multi-threaded) implementation of compression algorithms:

  33. tar -z ... -> tar -Ipigz ...

  34. tar -j ... -> tar -Ipbzip2 ...

  35. tar -J ... -> tar -Ipixz ...

  36. ``

运行下面的命令查看可用的速查表。

  1. $ cheat -l

进入帮助页面获取更多详细信息。

  1. $ cheat -h

via: 

作者:Magesh Maruthamuthu[11] 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者geekpi ? ?共计翻译:623 篇贡献时间:1530 天

推荐文章

< 左右滑动查看相关文章 >

点击图片、输入文章 ID 或识别二维码直达

原文链接请访问“原文链接”获得可点击的文内链接、全尺寸原图和相关文章。

Linux 下如何修改用户名(同时修改用户组名和家目录) | Linux 中国,linux用户组

有时候,由于某些原因,我们可能会需要重命名用户名。我们可以很容易地修改用户名以及对应的家目录和 UID。-- Shusain

本文导航◈ 修改用户名12%◈ 修改家目录43%◈ 更改用户 UID52%◈ 修改用户组名60%编译自 |  
 作者 | Shusain
 译者 | lujun9972

有时候,由于某些原因,我们可能会需要重命名用户名。我们可以很容易地修改用户名以及对应的家目录和 UID。

本教程将会讨论这些东西。让我们先从修改用户名开始。

修改用户名

我们使用 usermod 来修改用户名。其语法为,

  1. $ usermod -l new_username old_username

举个例子,假设我们有一个名叫 dan 的用户想要重命名为 susan,那么在终端下执行下面命令:

  1. $ sudo usermod -l susan dan

这只会更改用户名,而其他的东西,比如用户组,家目录,UID 等都保持不变。

注意:- 你需要从要改名的帐号中登出并杀掉该用户的所有进程,要杀掉该用户的所有进程可以执行下面命令,

  1. $ sudo pkill -u dan

  2. $ sudo pkill -9 -u dan

修改家目录

要同时更改家目录,我们需要在执行 usermod 命令的同时加上 -d 选项,

  1. $ sudo usermod -d /home/susan -m susan

更改用户 UID

执行下面命令修改用户 UID,

  1. $ sudo usermod -u 2000 susan

这里 2000 就是用户的新 UID。

修改用户组名

要把用户组名从 dan 修改为 susan,我们需要使用 groupmod 命令。使用下面命令来修改用户组名,

  1. $ groupmod -n susan dan

做完修改后,可以使用 id 命令来检查,

  1. $ id susan

这篇教导如何修改用户名的指南就此结束了。有任何疑问或建议,欢迎给我们留言。


via: 

作者:Shusain[2] 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者lujun9972 ? ? ? ?共计翻译:44 篇贡献时间:35 天

推荐文章

< 左右滑动查看相关文章 >

点击图片、输入文章 ID 或识别二维码直达

原文链接请访问“原文链接”获得可点击的文内链接、全尺寸原图和相关文章。

本文由ca88手机版登录发布于亚洲城官网,转载请注明出处:同时修改用户组名和家目录,UCloud内核热补丁技

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。