2020年12月

华为去年发布的新的 Linux 发行版 openEuler 在过去的一年里发生了巨大的变化,而明天,openEuler 的年度社区盛会 —— openEuler Summit 将会盛大召开。

作为国内著名开源社区、Linux 爱好者聚集地Linux 中国也受邀前往参与本次的 openEuler 大会。不仅如此,我们特别向大会组委会申请,希望可以采访到 openEuler 团队的开发者,和 openEuler 的开发者们一起聊聊开源,讨论讨论 Linux 发行版。

经过组委会协调,我们将会和 openEuler 的技术委员会主席,来自华为中央软件院的胡欣蔚一起坐下来,畅聊开源、Linux 和 OpenEuler

如果你对于 openEuler 有什么问题,欢迎你在下方留言,我们将选出其中的好问题,带到现场,和胡欣蔚一起聊一聊。

如果你希望来到现场,参与到 openEuler 大会,体验 openEuler 的新奇特性,可以长按识别下方二维码,报名参加本次活动!

这款编辑器打包了 Java 的功能,并提供了大量的插件来简化你的工作流程。

Java 是一门强大的语言。也许因为它经常被看作是一种“工业级”的工具,你可能不会想到它会成为文本编辑器的基础。毕竟,对于如此能力,文本编辑几乎是太容易了。事实上,在大多数现代编程工具包中,接受文本输入的组件是一个预编程的小部件。使用 Java 工具箱,一个简单的文本编辑器可以用 100 行左右的代码编写出来。那么 jEdit 能提供什么来证明它的存在价值呢?

嗯,实际上,它有很多功能!jEdit 应用是一个令人耳目一新的提醒,提醒人们 Java 对于日常桌面应用是多么的实用和有用。它巧妙地展示了它的基础技术的活力,并且永远忠于 Java 的永恒承诺,在所有的平台上都能运作。

安装 jEdit

jEdit 是用 Java 编写的,所以它适用于任何平台。下载通用安装程序或为所选的操作系统下载自定义安装程序。下载完成后(它很小,因此不会花费很长时间),请运行安装程序。

如果你没有安装 Java,请学习如何在 LinuxMac 或 Windows 上安装 Java。

使用 jEdit

在 jEdit 中编辑文本的方式和在任何桌面文本编辑器中编辑文本的方式是一样的。如果你使用过编辑器,那么你基本上已经会使用 jEdit 了。所有常用的键盘快捷键和惯例都适用。也有一些通常针对开发者的功能,如行号、折叠(该部分文本被隐藏,这样你就可以把注意力放在其他部分)和语法高亮。

但是,想象一下,从 简单的 Vim复杂的 Emacs的各种文本编辑器中,你会发现 jEdit 与 Emacs 类似。虽然编辑组件和任何典型桌面编辑应用一样,但 jEdit 的附加功能包括插件、可以在编辑会话中实时录制的宏、特定于某些编辑模式的功能、缓冲区选项等。这是一个积极鼓励你把它变成你自己的编辑器。

你可以在三个地方对 jEdit 进行自定义:缓冲区选项、全局选项和插件管理器。

缓冲区选项(在 “Utilities” 菜单中)使你可以调整与当前文档关联的设置。通常,jEdit 会自动检测用于你正在执行的操作的适当模式。例如,编写 XML 会触发 jEdit 的 XML 高亮显示。但是,有时你想覆盖 jEdit 已检测到或未能检测到的内容。你还可以打开“显式折叠”模式,该模式允许你手动定义希望 jEdit 视为可折叠部分的文本。

全局选项(在 “Utilities” 菜单中)提供了数十种首选项,这些首选项被视为 jEdit 的默认值。这包括从外观到自定义快捷方式的所有内容。

插件可以扩展出来 jEdit 的开发者从未想过的功能。插件提供的工作方式对 jEdit 而言并非“常规”,但可能会将繁琐的任务转变为简单甚至有趣的事情。它以其出色的 XML 解析、可停靠的 Sidekick 面板中的 Outline 插件和 XSLT 集成,实际上改变了 XML 工作流程。如果我不是已经使用了 Netbeans 来编写 Java 代码,我想我可以使用 jEdit 来代替。

面向程序员的 jEdit

选择哪种文本编辑器取决于你打算在编辑器中做的事。它称自己为“程序员的文本编辑器”,并且我认为它是严肃的 Java 和 XML 开发的有力竞争者。但是,在编辑 Lua 代码和 Bash 脚本时,它的功能不就没有这么强了。例如,与 Emacs 之类相比,jEdit 的代码折叠不那么灵活(我无法在没有附加标记的情况下折叠 Lua 函数)。尽管确实有丰富的插件选择,但我找不到用于 AsciiDoc 和其他非代码格式工作的特别有说服力的东西。

对我来说,jEdit 最吸引人的特点是它是以 Java 为基础。因为它在 JVM 中运行,所以你可以确信能够使用它,而无论你使用的平台是什么,也可以不管你是否有权限在自己的主目录之外安装应用。Java 是一种流行且活跃的语言,因此 jEdit 的功能和插件维护得很好。

如果你是一致性的忠实拥护者、Java 开发人员,或者只是 XML 极客而拼命试图摆脱 oXygen,那么你应该试试 jEdit。它很容易上手,并且探索起来很有趣。


via: https://opensource.com/article/20/12/jedit

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

“微服务架构风格是一种将 单个应用程序 开发为一套 小型服务 的方法,每个服务都在 自己的进程中运行,并使用轻量级的通信机制(通常是 HTTP 类型的 API)进行通信。这些服务是围绕 业务能力 构建的,并且可以通过 全自动化的部署机制 进行 独立部署。目前对这些服务几乎没有集中的管理,这些服务可以用 不同的编程语言 编写,也能使用 不同的数据存储技术。”

—— James Lewis 和 Martin Fowler (2014) [1]

介绍

预计在 2020 年,全球云端的微服务市场将以 22.5% 的速度增长,其中美国市场预计将保持 27.4% 的增长率 [2] 。目前的趋势是,开发人员将从本地托管的应用程序转移到云端。这将有助于企业最大限度地减少停机时间、优化资源并降低基础设施成本。同时专家们还预测,到了 2022 年,90% 的应用程序将会使用微服务架构进行开发 [2:1] 。本文将帮助你了解什么是微服务,以及目前的公司如何使用它的。

什么是微服务?

微服务已经在全球范围内被广泛使用。但是,微服务到底是什么?微服务是一种基于许多小型、互联服务的体系结构模式。它们基于 单一责任原则。根据 Robert C. Martin 的说法,“将因相同原因而变化的事物聚集起来,将因不同原因而变化的事物分离开来”。 [3] 微服务架构也被扩展到了 松耦合服务 中,可以 独立地开发、部署和维护 [3:1]

远离单体架构

微服务通常和传统的单体软件架构做对比。在单体架构中,软件是被设计为自足的,也就是说,这个程序中的各个组件都是互相连通和互相依赖的,而不是松散耦合的。在一个紧耦合的架构中( 单体 monolithic ),每个组件和它相关联的组件必须按照指定的顺序组合起来,才能被执行或编译 [4] 。当其中有一个组件需要更新时,整个应用都要被重写。

而这个现象在使用微服务架构的应用中就不会出现。因为每一个模块都是独立的,每个模块都可以更新修改而不影响程序的其他部分。因此,降低了对更改一个组件会对其他组件造成影响的风险。

如果公司的架构很难升级,或者维护过于复杂和昂贵,那么他们可能会遇到麻烦,不能扩展单体架构的应用 [5] 。把一个复杂的任务分解成小组件,彼此独立工作,就是解决这个问题的方法。

单一体系架构 vs. 微服务架构 (图片来自 [6]

开发者如何构建属于自己的微服务

微服务以提高可扩展性性能而闻名。然而,这些是世界各地的开发者开发属于他们自己的微服务的主要原因吗?《微服务 2020 研究现状》 [7] 披露了全球开发者如何构建他们的微服务,以及他们对微服务的看法。这份报告是在来自欧洲、北美、中南美洲、中东、东南亚、澳大利亚和新西兰的 660 名微服务专家的帮助下完成的。下表列出了微服务成熟度相关问题的平均评分 [7:1]

分类平均得分(满分为5分)
创建新项目3.8
维护与调试3.4
工作效率3.9
解决可扩展性问题4.3
解决性能问题3.9
团队合作3.9

从上表可知,大部分专家都对使用微服务来解决可扩展性问题感到满意。与之相反的是,维护与调试对他们来说似乎是一个挑战。

从他们所使用的架构技术来说,大部分专家使用 Javascript/Typescript (大约 ⅔ 的微服务是使用这些语言构建的),其次使用的是 Java。

尽管有很多部署微服务的选择,但大多数专家使用 AWS(49%),其次是他们自己的服务器。另外,有 62% 的人更喜欢用 AWS Lambda 作为无服务器解决方案。

这些人所使用的大多数微服务都使用 HTTP 进行通信,其次是 events 和 gRPC。此外,大多数专家将 RabbitMQ 用于消息代理,其次是 Kafka 和 Redis。

而且,大多数人使用微服务持续集成(CI)。在报告中,87% 的受访者使用诸如 GitLab CI、Jenkins 或 GitHub Actions 等 CI 解决方案。

在 86% 的受访者中,最受欢迎的调试解决方案是日志,其中 27% 的受访者使用日志。

最后,大多数人认为微服务架构将成为更复杂的系统或后端开发的标准。

微服务的成功案例

许多公司已经从单体架构转向微服务架构。

亚马逊

在 2001 年,开发延迟、编码挑战和服务相互依赖性使得 亚马逊 Amazon 无法满足其不断增长的用户群的可扩展性需求。由于需要从头开始重构他们的单体架构,亚马逊将其单体架构应用程序拆分为小型的、独立的、针对服务的应用程序 [6:1] [8]

2001 年,在微服务这个词开始流行之前的几年,亚马逊决定改用微服务。这一变化使得亚马逊开发了好几种支持微服务架构的解决方案,比如亚马逊 AWS。随着对微服务的快速增长和适应,亚马逊成为全球市值最高的公司,截至 2020 年 7 月 1 日,亚马逊市值为 1.433 万亿美元 [9]

奈飞

奈飞 Netflix 于 2007 年开始提供电影流媒体服务,到了 2008 年,它也面临着规模扩张的挑战。期间,他们经历了一次严重的数据库损坏,在三天之内,他们不能将 DVD 发送给他们的会员 [10] 。这一事故使他们意识到需要将单点故障(如关系数据库)转向云中更可伸缩和更可靠的分布式系统。于是 2009 年,奈飞开始将其单体架构的应用重构为微服务。他们首先将其非面向客户的电影编码平台迁移到云端作为独立的微服务运行 [11] 。在改用微服务之后,使奈飞能够解决扩展性挑战和服务中断的问题。并且它还允许他们按照每个流数据而不是数据中心的成本来降低成本 [10:1] 。今天,奈飞每天向 190 个国家的 1.39 亿订户发送约 2.5 亿小时的内容 [11:1]

Uber

在推出 Uber 服务之后,他们在开发和发布新功能、修复 bug,以及迅速整合新的变化方面遇到了困难。因此,他们决定改用微服务,并将应用程序结构拆分为基于云的微服务。换句话说,Uber 为每个功能创建了一个微服务,比如乘客管理和出行管理。转向微服务给 Uber 带来了很多好处,比如对每项服务的所有权都有一个清晰的概念。这提高了服务访问的速度和质量,通过允许团队只关注他们需要扩展的服务,在更新虚拟服务的同时而不中断其他服务,实现了更可靠的容错,从而促进了快速扩展 [11:2]

这就是可扩展性!

关于如何提供可伸缩性的一个很好的例子是看看中国。中国人口众多,必须通过创造和试验新的解决方案来适应规模化的新挑战。统计数据显示,中国目前为大约 9 亿互联网用户提供服务 [12] 。2019 年“双十一”期间(相当于国外的黑色星期五),阿里巴巴旗下各购物平台的交易峰值为每秒 544000 笔交易。阿里云处理的数据总量约为 970 PB [13] 。那么,这些数量的用户在技术上意味着什么呢?

为了解决可伸缩性问题,许多技术应运而生。例如,Tars 由腾讯于 2008 年创建,2018 年贡献给 Linux 基金会。它也在被大规模使用,并在 10 年内得到了很大的提升 [14] 。TARS 是开源的,许多组织都在大力贡献和扩展框架的特性和价值 [14:1] 。TARS 支持多种编程语言,包括 C++、Golang、java、node.js、PHP 和 Python;它可以快速构建系统并自动生成代码,使开发人员能够专注于业务逻辑,从而有效地提高操作效率。TARS 已广泛应用于腾讯的 QQ、微信社交网络、金融服务、边缘计算、汽车、视频、网络游戏、地图、应用市场、安全等诸多核心业务。在 2020 三月,TARS 项目转变为 TARS 基金会,这是一个开源微服务基金会,在建立开放式微服务平台的社区方面中,致力于提升社区贡献和成员的快速增长 [14:2]

一定要看看 Linux 基金会新的免费培训课程:《用 TARS 构建微服务平台

关于作者:

Isabella Ferreira 是 Linux 基金会旗下的开源微服务基金会 TARS 基金会的布道师

Mark Shan(单致豪)是腾讯开源联盟的主席,也是 TARS 基金会的董事会主席。

本篇 Linux 基金会白金赞助商内容由腾讯贡献。

  1. https://martinfowler.com/articles/microservices.html#footnote-etymology ↩︎
  2. https://www.charterglobal.com/five-microservices-trends-in-2020/ ↩︎ ↩︎
  3. https://medium.com/hashmapinc/the-what-why-and-how-of-a-microservices-architecture-4179579423a9 ↩︎ ↩︎
  4. https://whatis.techtarget.com/definition/monolithic-architecture ↩︎
  5. https://www.leanix.net/en/blog/a-brief-history-of-microservices ↩︎
  6. https://www.plutora.com/blog/understanding-microservices ↩︎ ↩︎
  7. https://tsh.io/state-of-microservices/#ebook ↩︎ ↩︎
  8. https://thenewstack.io/led-amazon-microservices-architecture/ ↩︎
  9. https://ycharts.com/companies/AMZN/market_cap ↩︎
  10. https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration ↩︎ ↩︎
  11. https://blog.dreamfactory.com/microservices-examples/ ↩︎ ↩︎ ↩︎
  12. https://www.statista.com/statistics/265140/number-of-internet-users-in-china/ ↩︎
  13. https://interconnected.blog/china-scale-technology-sandbox/ ↩︎
  14. https://www.linuxfoundation.org/blog/2020/03/the-tars-foundation-the-formation-of-a-microservices-ecosystem/ ↩︎ ↩︎ ↩︎

via: https://www.linux.com/news/the-state-of-the-art-of-microservices-in-2020/

作者:Linux.com 选题:lujun9972 译者:zhangxiangping 校对:wxy

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

你是如何在 Linux 上使用 C 编写你的程序的?它确实是非常简单的,由三个简单的步骤组成。

步骤 1: 编写你的 C 程序,并使用一个 .c 的扩展名进行保存。例如,my_program.c

步骤 2: 在一个终端中使用 gcc 编译器来编译程序并生成目标文件,像这样:

gcc -o my_program my_program.c

步骤 3: 在 Linux 中,你可以以运行生成的对象文件的方式来运行你的 C 程序:

./my_program

这只是如何在 Linux 中编译和运行 C 程序的简要总结。假设你是 C 语言或 Linux 系统的新手,我将仔细演示这些步骤,以便你能在 Linux 环境中舒服地编写 C 程序。

事实上,我将讨论如何在 Linux 终端中以及在代码编辑器中运行 C 程序的两种方式。

方法 1: 在 Linux 终端中运行 C 程序

为了在 Linux 中运行一个 C 程序,你需要在你的系统上有一个 C 编译器。最流行的编译器是 gcc GNU 编译器套件 GNU Compiler Collection )。

你可以使用你发行版的软件包管理器来安装 gcc 。在基于 Debian 和 Ubuntu 的 Linux 发行版中,使用 apt 命令:

sudo apt install gcc

切换到保存你的 C 程序的目录(或者提供路径),然后通过编译程序生成对象文件:

gcc -o my_program my_program.c

记住,提供输出对象文件(-o my_program)是可选的。如果你不提供,那么将自动生成一个名称为 a.out 的对象文件。但是这样并不好,因为编译每个 C 程序都会覆盖它,而且你也不知道这个 a.out 对象文件究竟属于哪个程序。

在你的对象文件生成后,运行它来运行 C 程序。它已经能够执行了。像这样简单地使用它:

./my_program

接下来,如果你的程序是正确的,它将显示出你所期望的输出。正如你所看到的,这和 在 Linux 中运行 C++ 程序 没什么不同。

每更改一次你的程序,你都必须先重新编译它,然后再次运行生成的对象文件来运行这个新的 C 程序。

方法 2: 如何在 Linux 中使用一个诸如 VSCode 之类的代码编辑器来运行 C 程序

并不是每一个人都能适应命令行和终端,我完全理解这一点。

你可以使用一个诸如 Eclipse 或 Code Blocks 之类的真正的 C/C++ IDE ,但是它们是很重量级的程序,通常更适合于大型的项目。

我建议使用一个开源的代码编辑器,像 VSCode 或 Atom 。它们基本上是文本编辑器,但是你可以通过安装附加组件来直接在图形化的代码编辑器中编译和运行程序。

在这个示例中,我使用 VSCode 编辑器。它是一个来自微软的 非常流行的开源的代码编辑器

首先,在 Ubuntu 的 软件中心中安装 VSCode 。对于其它发行版来说,请检查你的 Linux 发行版的软件包管理器或软件中心。你可以参看它的官方网站来查看更多的信息。

启动 VSCode ,打开或创建一个工程,在这里创建你的 C 程序。我使用一个简单的 Hello World 程序作为示例。

你必须确保你已经在你的 Linux 系统上安装了 gcc 编译器。

sudo apt install gcc

接下来你要做的事是使用一个允许你运行 C 代码的扩展。微软可能会提示你安装它的 C/C++ 程序扩展,但它的设置很复杂,因此我不推荐。

相反,我建议你使用 Code Runner 扩展。它是一个简单直接的扩展,你可以在不使用额外配置的情况下轻松地运行 C 和 C++ 代码。

转到扩展标签页,在其中搜索和安装 “Code Runner” 。

安装 Code Runner 扩展来运行 C/C++ 程序

重新启动 VSCode 。现在,你能够使用下面方法中的其中一个来运行 C 代码:

  • 使用快捷键 Ctrl+Alt+N
  • 按下 F1 ,接下来选择或输入 “Run Code” 。
  • 在文本编辑器中右键单击,从上下文菜单中单击 “Run code” 。

右键单击程序文件,然后选择 Run Code

当你运行这个 C 程序时,它将会被自动编译和运行。你可以在编辑器底部打开的终端中看到输出。还有比这更好的事情吗?

程序输出显示在编辑器的底部

你更喜欢哪一种方法?

在 Linux 命令行中运行一些 C 程序是没有问题的,但是使用一个代码编辑器会更容易一些,而且会节省时间。你不觉得吗?

你可以自己决定想使用哪一种方法。


via: https://itsfoss.com/run-c-program-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:robsean 校对:wxy

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

这款经典的文本编辑器提供了所有的基本功能和一些让你自定义你的体验的令人兴奋的功能。

有了 XEDIT、jEdit、NEdit、gedit,最后还有 medit

在我开始搜索我还没有尝试过的编辑器之前,我还没有听说过 medit,但我很高兴发现了它。如果你正在寻找经典的 gedit 体验(大约是 Gnome 2 上),那么 medit 可能无意间提供了一种出色且现代的近似体验。它也有许多额外的功能,比如可以使用 Python、Lua 或 C 语言编写插件,以及甚至可以将 shell 脚本集成到菜单系统。所有其他常用的功能也都在这里:标签式界面、一个即时的 shell、缩进管理、语法高亮等等。

安装 medit

你可以从 mooedit.sourceforge.net 下载 medit。它确认可以在 Linux 和 Windows 上工作。如果你使用的是 Linux,你也可以在你的仓库中找到它。在 Slackware 上,我从 slackbuilds.org 安装了它。

 title=

使用 medit

medit 宣称自己是一个“为编程和围绕编程”打造的编辑器,事实上,它的诞生是作为一个名为 GAP( 群组、算法、编程 Groups、Algorithms、Programming )的更大项目的一部分。它的大部分功能都是针对典型的开发者的期望而开发。例如,在 Edit 菜单中,有增加和减少缩进的选项,这对于任何试图以可视方式指示范围的程序员来说都是一个常见的任务(对于 Python 程序员来说也是一个明文要求),还有注释或取消注释文本块的选项。

有些功能对普通用户也很有用。medit 有一个易于使用的标签式界面(既在窗口顶部,也在侧面的弹出式列表中),一个用于快速浏览文件系统的侧面板,在文件中添加书签的功能等等。它还具有针对两种编程语言以及标记语言和 Markdown 的语法高亮显示功能,因此它是可以用于编辑代码和普通文本的编辑器。

颜色方案

当编辑没有语法关联的纯文本或像 Asciidoc 这样的格式时,medit 没有预设的高亮方案,编辑器会采用你的系统默认值。我使用的是深色主题,所以 medit 在深灰色背景上显示白色文本。

不过对于语法高亮,文本会根据每个单词在其结构化语言中扮演的角色而变成彩色。一开始,我对 medit 的一些选择有些沮丧,很多颜色在我的深色背景下太暗,无法辨认,而且我觉得所有重要的元素都不够显眼。如果你不喜欢 medit 选择的方案,这个问题的答案在 Preferences 中,你可以更改颜色主题。我把我的颜色改成了 Tango,它呈现出一个日光照射的颜色阵列,在我的深色编辑器背景下非常出色,甚至给在 medit 主题下保持白色的元素添加了颜色。

 title=

弹出式 Python 控制台

在 medit 窗口的底部,有一个弹出的终端,用于快速访问 shell。这是一个很好的功能,但坦率地说,在你体验过 Emacs 和 Kate之后,这感觉很普通。medit 让我惊讶的是它的弹出式 Python 控制台,它从 Tools 菜单中启动,并预先导入了 moogtk 模块。换句话说,当你启动 medit 的 Python shell 时,你可以查看 medit 构建自身部分的 Python 和 GTK 模块。这是一个很好的功能,也许会给你写插件的灵感(这个弹出终端的是一个用 Python 编写的插件,所以你也可以通过它的代码来了解一个插件是如何编写的)。

经典编辑

medit 是一款出色的基于 GTK 的编辑器,它具有所有重要的基本功能和一些诱人的额外功能,可以帮助你扩展应用并使其成为你自己的。因为它接受 C、Python、Lua 和 Bash,所以你可以将它用于这几种用途。如果你正在为你的写作寻找一个有用的编辑器,无论是代码还是 Markdown 或介于两者之间的东西,给 medit 一个机会。


via: https://opensource.com/article/20/12/medit

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

有时需要在系统中添加另一块磁盘。这就是 逻辑卷管理 Logical Volume Management (LVM)的用武之地。LVM 的好处之处在于它相当灵活。有几种方法可以添加一块磁盘。这篇文章介绍了一种方法。

注意!

这篇文章并不包括将新的磁盘物理地安装到系统中的过程。请查阅你的系统和磁盘文档,了解如何正确地进行安装。

重要: 一定要确保你已经备份重要数据。如果新磁盘已有数据,那么本文中描述的步骤将破坏数据。

最好了解

本文并没有深入介绍 LVM 的每一个功能,重点是添加磁盘。但基本上你要了解,LVM 有 卷组 volume group (VG),它由一个或多个分区和/或磁盘组成。你把这些分区或磁盘以 物理卷 physical volume (PV)的方式添加到卷组。一个卷组可以分成许多 逻辑卷 logical volume (LV)。逻辑卷可以作为文件系统、ramdisk 等其他存储使用。更多信息可以在这里)中找到。

可以看作是,把物理卷形成一个存储池(一个卷组),然后从这个存储池中划分出逻辑卷,供你的系统直接使用。

准备

确保你能看到你要添加的磁盘。在添加磁盘之前使用 lsblk 查看哪些存储空间已经可用或正在使用。

$ lsblk
NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
zram0                  251:0    0  989M  0 disk [SWAP]
vda                    252:0    0   20G  0 disk
├─vda1                 252:1    0    1G  0 part /boot
└─vda2                 252:2    0   19G  0 part
└─fedora_fedora-root   253:0    0   19G  0 lvm  /

本文使用的是带有虚拟存储的虚拟机,因此设备名称以 vda 开头代表第一个磁盘,vdb 代表第二个磁盘,以此类推。你的设备名称可能不同。许多系统会将 sda 作为第一个物理磁盘,sdb 代表第二个磁盘,以此类推。

当已连接新磁盘,并且你的系统已备份且正在运行,再次使用 lsblk 来查看新的块设备。

$ lsblk
NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
zram0                  251:0    0  989M  0 disk [SWAP]
vda                    252:0    0   20G  0 disk
├─vda1                 252:1    0    1G  0 part /boot
└─vda2                 252:2    0   19G  0 part
└─fedora_fedora-root 253:0    0   19G  0 lvm  /
vdb                    252:16   0   10G  0 disk

现在有一个名为 vdb 的新设备。该设备的位置是 /dev/vdb

$ ls -l /dev/vdb
brw-rw----. 1 root disk 252, 16 Nov 24 12:56 /dev/vdb

我们可以看到磁盘,但我们还不能用 LVM 来使用它。如果你运行 blkid,你应该不会看到它被列出。对于这个和之后的命令,你需要确保你的系统已配置好,这样你可以使用 sudo

$ sudo blkid
/dev/vda1: UUID="4847cb4d-6666-47e3-9e3b-12d83b2d2448" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="830679b8-01"
/dev/vda2: UUID="k5eWpP-6MXw-foh5-Vbgg-JMZ1-VEf9-ARaGNd" TYPE="LVM2_member" PARTUUID="830679b8-02"
/dev/mapper/fedora_fedora-root: UUID="f8ab802f-8c5f-4766-af33-90e78573f3cc" BLOCK_SIZE="4096" TYPE="ext4"
/dev/zram0: UUID="fc6d7a48-2bd5-4066-9bcf-f062b61f6a60" TYPE="swap"

将磁盘添加到 LVM 中

使用 pvcreate 初始化磁盘。你需要传递设备的完整路径。在这个例子中,它是 /dev/vdb。在你的系统中,它可能是 /dev/sdb 或其他设备名。

$ sudo pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.

当你运行 blkid 时,你应该看到磁盘已经被初始化为一个 LVM2_member

$ sudo blkid
/dev/vda1: UUID="4847cb4d-6666-47e3-9e3b-12d83b2d2448" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="830679b8-01"
/dev/vda2: UUID="k5eWpP-6MXw-foh5-Vbgg-JMZ1-VEf9-ARaGNd" TYPE="LVM2_member" PARTUUID="830679b8-02"
/dev/mapper/fedora_fedora-root: UUID="f8ab802f-8c5f-4766-af33-90e78573f3cc" BLOCK_SIZE="4096" TYPE="ext4"
/dev/zram0: UUID="fc6d7a48-2bd5-4066-9bcf-f062b61f6a60" TYPE="swap"
/dev/vdb: UUID="4uUUuI-lMQY-WyS5-lo0W-lqjW-Qvqw-RqeroE" TYPE="LVM2_member"

你可以使用 pvs 列出当前所有可用的物理卷:

$ sudo pvs
PV         VG            Fmt  Attr PSize   PFree
/dev/vda2  fedora_fedora lvm2 a--  <19.00g     0
/dev/vdb                 lvm2 ---   10.00g 10.00g

/dev/vdb 被列为一个 PV (物理卷),但还没有分配到一个 VG (卷组)。

将物理卷添加到一个卷组

你可以使用 vgs 找到可用的卷组列表:

$ sudo vgs
VG            #PV #LV #SN Attr   VSize   VFree
fedora_fedora   1   1   0 wz--n- 19.00g    0

在本例中,只有一个卷组可用。接下来,将物理卷添加到 fedora_fedora

$ sudo vgextend fedora_fedora /dev/vdb
Volume group "fedora_fedora" successfully extended

你现在应该看到物理卷已被添加到卷组中:

$ sudo pvs 
PV        VG            Fmt  Attr PSize   PFree
/dev/vda2 fedora_fedora lvm2 a–   <19.00g 0
/dev/vdb  fedora_fedora lvm2 a–   <10.00g <10.00g

看一下卷组:

$ sudo vgs
VG            #PV #LV #SN Attr  VSize  VFree
fedora_fedora 2   1   0   wz–n- 28.99g <10.00g

你也可以获得具体卷组和物理卷的详细列表:

$ sudo vgdisplay fedora_fedora
--- Volume group ---
VG Name               fedora_fedora
System ID
Format                lvm2
Metadata Areas        2
Metadata Sequence No  3
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                2
Act PV                2
VG Size               28.99 GiB
PE Size               4.00 MiB
Total PE              7422
Alloc PE / Size       4863 / 19.00 GiB
Free  PE / Size       2559 / 10.00 GiB
VG UUID               C5dL2s-dirA-SQ15-TfQU-T3yt-l83E-oI6pkp

看下物理卷:

$ sudo pvdisplay /dev/vdb
--- Physical volume ---
PV Name               /dev/vdb
VG Name               fedora_fedora
PV Size               10.00 GiB / not usable 4.00 MiB
Allocatable           yes
PE Size               4.00 MiB
Total PE              2559
Free PE               2559
Allocated PE          0
PV UUID               4uUUuI-lMQY-WyS5-lo0W-lqjW-Qvqw-RqeroE 

现在我们已经添加了磁盘,我们可以为逻辑卷 (LV) 分配空间:

$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root fedora_fedora -wi-ao---- 19.00g

看一下逻辑卷。下面是详细的逻辑卷信息:

$ sudo lvdisplay fedora_fedora/root
--- Logical volume ---
LV Path                /dev/fedora_fedora/root
LV Name                root
VG Name                fedora_fedora
LV UUID                yqc9cw-AvOw-G1Ni-bCT3-3HAa-qnw3-qUSHGM
LV Write Access        read/write
LV Creation host, time fedora, 2020-11-24 11:44:36 -0500
LV Status              available
LV Size                19.00 GiB
Current LE             4863
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0

查看根文件系统(/)的大小,并将它与逻辑卷大小进行比较。

$ df -h /
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/fedora_fedora-root   19G  1.4G   17G   8% /

逻辑卷和文件系统大小都为 19G。让我们给根逻辑卷(root)增加 5G。

$ sudo lvresize -L +5G fedora_fedora/root
Size of logical volume fedora_fedora/root changed from 19.00 GiB (4863 extents) to 24.00 GiB (6143 extents).
Logical volume fedora_fedora/root successfully resized.

我们现在有 24G 的逻辑卷可用。看看根文件系统(/)。

$ df -h /
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/fedora_fedora-root   19G  1.4G   17G   8% /

我们仍然显示只有 19G 的空闲空间,这是因为逻辑卷与文件系统不一样。要使用增加到逻辑卷的新空间,请调整文件系统的大小。

$ sudo resize2fs /dev/fedora_fedora/root
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/fedora_fedora/root is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 3
The filesystem on /dev/fedora_fedora/root is now 6290432 (4k) blocks long.

看看文件系统的大小。

$ df -h /
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/fedora_fedora-root   24G  1.4G   21G   7% /

正如你所看到的,根文件系统(/)已经占用了逻辑卷上的所有可用空间,而且不需要重新启动。

现在你已经将一个磁盘初始化为物理卷,并使用新的物理卷扩展了卷组。之后,你增加了逻辑卷的大小,并调整了文件系统的大小,以使用逻辑卷的新空间。


via: https://fedoramagazine.org/add-storage-to-your-fedora-system-with-lvm/

作者:Tim Bosse 选题:lujun9972 译者:geekpi 校对:wxy

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