蚊章汇 - MAGESH MARUTHAMUTHU
type: channel
link: https://linuxcn.bwsl.wang/author/428/
description: MAGESH MARUTHAMUTHU
items: Ansible 剧本快速入门指南
items: Ansible 点对点命令快速入门指南示例
items: Ansible 自动化工具安装、配置和快速入门指南
items: 如何在电池充满或低电量时获得电池状态通知
items: 如何在 Linux 终端查看图像
items: 如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘
items: 如何从 LVM 的卷组中删除物理卷？
items: 如何在 Linux 中减少/缩小 LVM 大小（逻辑卷调整）
items: 如何在 Linux 中扩展/增加 LVM 大小（逻辑卷调整）
items: 如何在 Linux 中创建/配置 LVM（逻辑卷管理）

Ansible 剧本快速入门指南
type: item
date: 2021-03-02T06:57:33+08:00
description: 我们已经写了两篇关于 Ansible 的文章，这是第三篇。如果你是 Ansible 新手，我建议你阅读下面这两篇文章，它会教你一些 Ansible 的基础以及它是什么。第一篇: Ansible 自动化工具安装、配置和快速入门指南第二篇: Ansible 点对点命令快速入门指南示例如果你已经阅读过了，那么在阅读本文时你才不会感到突兀。什么是 Ansible 剧本? 剧本 playbook 比点对点命令模式更强大，而且完全不同。它使用了 /usr/bin/ansible-playbook 二进制文件，并且提供丰富的特性使得复杂的任务变得更容易。如果你想经常运行一个任务，剧本是非常有用的。此外，如果你想在服务器组上执行多个任务，它也是非常有用的。剧本是由 YAML 语言编写。YAML 代表一种标记语言，它比其它常见的数据格式（如 XML 或 JSON）更容易读写。下面这张 Ansible 剧本流程图将告诉你它的详细结构。理解 Ansible 剧本的术语 控制节点 Control node ：Ansible 安装的机器，它负责管理客户端节点。 受控节点 Managed node ：控制节点管理的主机列表。 剧本 playbook ：一个剧本文件包含一组自动化任务。 主机清单 Inventory ：这个文件包含有关管理的服务器的信息。 任务 Task ：每个剧本都有大量的任务。任务在指定机器上依次执行（一个主机或多个主机）。 模块 Module ： 模块是一个代码单元，用于从客户端节点收集信息。 角色 Role ：角色是根据已知文件结构自动加载一些变量文件、任务和处理程序的方法。 动作 Play ：每个剧本含有大量的动作，一个动作从头到尾执行一个特定的自动化。 处理程序 Handler ： 它可以帮助你减少在剧本中的重启任务。处理程序任务列表实际上与常规任务没有什么不同，更改由通知程序通知。如果处理程序没有收到任何通知，它将不起作用。基本的剧本是怎样的？下面是一个剧本的模板：--- [YAML 文件应该以三个破折号开头] - name: [脚本描述] hosts: group [添加主机或主机组] become: true [如果你想以 root 身份运行任务，则标记它] tasks: [你想在任务下执行什么动作] - name: [输入模块选项] module: [输入要执行的模块] module_options-1: value [输入模块选项] module_options-2: value . module_options-N: value 如何理解 Ansible 的输出Ansible 剧本的输出有四种颜色，下面是具体含义：绿色：ok 代表成功，关联的任务数据已经存在，并且已经根据需要进行了配置。黄色：changed 指定的数据已经根据任务的需要更新或修改。红色：FAILED 如果在执行任务时出现任何问题，它将返回一个失败消息，它可能是任何东西，你需要相应地修复它。白色：表示有多个参数。为此，创建一个剧本目录，将它们都放在同一个地方。$ sudo mkdir /etc/ansible/playbooks 剧本-1：在 RHEL 系统上安装 Apache Web 服务器这个示例剧本允许你在指定的目标机器上安装 Apache Web 服务器：$ sudo nano /etc/ansible/playbooks/apache.yml --- - hosts: web become: yes name: "Install and Configure Apache Web server" tasks: - name: "Install Apache Web Server" yum: name: httpd state: latest - name: "Ensure Apache Web Server is Running" service: name: httpd state: started $ ansible-playbook apache1.yml 如何理解 Ansible 中剧本的执行使用以下命令来查看语法错误。如果没有发现错误，它只显示剧本文件名。如果它检测到任何错误，你将得到一个如下所示的错误，但内容可能根据你的输入文件而有所不同。$ ansible-playbook apache1.yml --syntax-check ERROR! Syntax Error while loading YAML. found a tab character that violate indentation The error appears to be in '/etc/ansible/playbooks/apache1.yml': li…

Ansible 点对点命令快速入门指南示例
type: item
date: 2021-03-01T06:16:00+08:00
description: 之前，我们写了一篇有关 Ansible 安装和配置 的文章。在那个教程中只包含了一些使用方法的示例。如果你是 Ansible 新手，建议你阅读上篇文章。一旦你熟悉了，就可以继续阅读本文了。默认情况下，Ansible 仅使用 5 个并行进程。如果要在多个主机上执行任务，需要通过添加 -f [进程数] 选项来手动设置进程数。什么是 点对点 ad-hoc 命令？点对点命令用于在一个或多个受控节点上自动执行任务。它非常简单，但是不可重用。它使用 /usr/bin/ansible 二进制文件执行所有操作。点对点命令最适合运行一次的任务。例如，如果要检查指定用户是否可用，你可以使用一行命令而无需编写剧本。为什么你要了解点对点命令？点对点命令证明了 Ansible 的简单性和强大功能。从 2.9 版本开始，它支持 3389 个模块，因此你需要了解和学习要定期使用的 Ansible 模块列表。如果你是一个 Ansible 新手，可以借助点对点命令轻松地练习这些模块及参数。你在这里学习到的概念将直接移植到剧本中。点对点命令的一般语法：ansible [模式] -m [模块] -a "[模块选项]" 点对点命令包含四个部分，详细信息如下：部分描述ansible命令模式输入清单或指定组模块运行指定的模块名称模块选项指定模块参数如何使用 Ansible 清单文件如果使用 Ansible 的默认清单文件 /etc/ansible/hosts，你可以直接调用它。否则你可以使用 -i 选项指定 Ansible 清单文件的路径。什么是模式以及如何使用它？Ansible 模式可以代指某个主机、IP 地址、清单组、一组主机或者清单中的所有主机。它允许你对它们运行命令和剧本。模式非常灵活，你可以根据需要使用它们。例如，你可以排除主机、使用通配符或正则表达式等等。下表描述了常见的模式以及用法。但是，如果它不能满足你的需求，你可以在 ansible-playbook 中使用带有 -e 参数的模式中的变量。描述模式目标所有主机all（或 *）对清单中的所有服务器运行 Ansible一台主机host1只针对给定主机运行 Ansible多台主机host1:host2（或 host1,host2）对上述多台主机运行 Ansible一组webservers在 webservers 群组中运行 Ansible多组webservers:dbserverswebservers 中的所有主机加上 dbservers 中的所有主机排除组webservers:!atlantawebservers 中除 atlanta 以外的所有主机组之间的交集webservers:&stagingwebservers 中也在 staging 的任何主机什么是 Ansible 模块，它干了什么？模块，也称为“任务插件”或“库插件”，它是一组代码单元，可以直接或通过剧本在远程主机上执行指定任务。Ansible 在远程目标节点上执行指定模块并收集其返回值。每个模块都支持多个参数，可以满足用户的需求。除少数模块外，几乎所有模块都采用 key=value 参数。你可以一次添加带有空格的多个参数，而 command 或 shell 模块会直接运行你输入的字符串。我们将添加一个包含最常用的“模块选项”参数的表。列出所有可用的模块，运行以下命令：$ ansible-doc -l 运行以下命令来阅读指定模块的文档：$ ansible-doc [模块] 1）如何在 Linux 上使用 Ansible 列出目录的内容可以使用 Ansible command 模块来完成这项操作，如下所示。我们列出了 node1.2g.lab 和 nod2.2g.lab* 远程服务器上 daygeek 用户主目录的内容。$ ansible web -m command -a "ls -lh /home/daygeek" node1.2g.lab | CHANGED | rc=0 >> total 12K drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Desktop drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Documents drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Downloads drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Music -rwxr-xr-x. 1 daygeek daygeek 159 Mar 4 2019 passwd-up.sh drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Pictures drwxr-…

Ansible 自动化工具安装、配置和快速入门指南
type: item
date: 2021-02-22T20:48:20+08:00
description: 市面上有很多自动化工具。我可以举几个例子，例如 Puppet、Chef、CFEngine、Foreman、Katello、Saltstock、Space Walk，它们被许多组织广泛使用。自动化工具可以做什么？自动化工具可以自动执行例行任务，无需人工干预，从而使 Linux 管理员的工作变得更加轻松。这些工具允许用户执行配置管理，应用程序部署和资源调配。为什么喜欢 Ansible？Ansible 是一种无代理的自动化工具，使用 SSH 执行所有任务，但其它工具需要在客户端节点上安装代理。什么是 Ansible？Ansible 是一个开源、易于使用的功能强大的 IT 自动化工具，通过 SSH 在客户端节点上执行任务。它是用 Python 构建的，这是当今世界上最流行、最强大的编程语言之一。两端都需要使用 Python 才能执行所有模块。它可以配置系统、部署软件和安排高级 IT 任务，例如连续部署或零停机滚动更新。你可以通过 Ansible 轻松执行任何类型的自动化任务，包括简单和复杂的任务。在开始之前，你需要了解一些 Ansible 术语，这些术语可以帮助你更好的创建任务。Ansible 如何工作？Ansible 通过在客户端节点上推送称为 ansible 模块的小程序来工作，这些模块临时存储在客户端节点中，通过 JSON 协议与 Ansible 服务器进行通信。Ansible 通过 SSH 运行这些模块，并在完成后将其删除。模块是用 Python 或 Perl 等编写的一些脚本。控制节点，用于控制剧本的全部功能，包括客户端节点（主机）。 控制节点 Control node ：使用 Ansible 在受控节点上执行任务的主机。你可以有多个控制节点，但不能使用 Windows 系统主机当作控制节点。 受控节点 Managed node ：控制节点配置的主机列表。 清单 Inventory ：控制节点管理的一个主机列表，这些节点在 /etc/ansible/hosts 文件中配置。它包含每个节点的信息，比如 IP 地址或其主机名，还可以根据需要对这些节点进行分组。 模块 Module ：每个模块用于执行特定任务，目前有 3387 个模块。 点对点 ad-hoc ：它允许你一次性运行一个任务，它使用 /usr/bin/ansible 二进制文件。 任务 Task ：每个 动作 Play 都有一个任务列表。任务按顺序执行，在受控节点中一次执行一个任务。 剧本 Playbook ：你可以使用剧本同时执行多个任务，而使用点对点只能执行一个任务。剧本使用 YAML 编写，易于阅读。将来，我们将会写一篇有关剧本的文章，你可以用它来执行复杂的任务。测试环境此环境包含一个控制节点（server.2g.lab）和三个受控节点（node1.2g.lab、node2.2g.lab、node3.2g.lab），它们均在虚拟环境中运行，操作系统分别为：System PurposeHostnameIP AddressOSAnsible Control Nodeserver.2g.lab192.168.1.7Manjaro 18Managed Node1node1.2g.lab192.168.1.6CentOS7Managed Node2node2.2g.lab192.168.1.5CentOS8Managed Node3node3.2g.lab192.168.1.9Ubuntu 18.04User: daygeek 前置条件在 Ansible 控制节点和受控节点之间启用无密码身份验证。控制节点必须是 Python 2（2.7 版本） 或 Python 3（3.5 或更高版本）。受控节点必须是 Python 2（2.6 或更高版本） 或 Python 3（3.5 或更高版本）。如果在远程节点上启用了 SELinux，则在 Ansible 中使用任何与复制、文件、模板相关的功能之前，还需要在它们上安装 libselinux-python。如何在控制节点上安装 Ansible对于 Fedora/RHEL 8/CentOS 8 系统，使用 DNF 命令 来安装 Ansible。注意：你需要在 RHEL/CentOS 系统上启用 EPEL 仓库，因为 Ansible 软件包在发行版官方仓库中不可用。$ sudo dnf install ansible 对于 Debian/Ubuntu 系统，使用 APT-GET 命令 或 APT 命令 来安装 Ansible。配置下面的 PPA 以便在 Ubuntu 上安装最新稳定版本的 Ansible。$ sudo apt update $ sudo apt install software-properties-common $ s…

如何在电池充满或低电量时获得电池状态通知
type: item
date: 2021-01-21T07:14:00+08:00
description: 对于类 Unix 用户来说，Linux 笔记本是不错的选择，但它经常会耗尽电池。我试过很多 Linux 操作系统，但没有像 Windows 那样电池寿命长。充电时间长了会对电池造成损害，所以在电池 100% 充满时要拔掉电源线。电池充电或放电时没有默认的应用程序来通知，需要安装第三方应用来通知你。为此，我通常会安装 Battery Monitor，但它已经被废弃，所以我创建了一个 shell 脚本来获取通知。笔记本电池充放电状态可以通过以下两个命令来识别。使用 acpi 命令。$ acpi -b Battery 0: Discharging, 71%, 00:58:39 remaining 使用 upower 命令。$ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -w 'state|percentage' | awk '{print $2}' discharging 64% 方法 1：当电池电量高于 95% 或低于 20% 时，用 Shell 脚本发送警报这个脚本在启动时在后台运行，每分钟检查一次电池状态，然后在电池电量超过 95% 或放电时电量低于 20% 时发送通知。警报会直到你的电池电量超过 20% 或低于 95% 时才会停止。$ sudo vi /opt/scripts/battery-status.sh #!/bin/bash while true do battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'` if [ $battery_level -ge 95 ]; then notify-send "Battery Full" "Level: ${battery_level}%" paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga elif [ $battery_level -le 20 ]; then notify-send --urgency=CRITICAL "Battery Low" "Level: ${battery_level}%" paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga fi sleep 60 done 脚本完成后，设置可执行权限：$ sudo chmod +x /opt/scripts/battery-status.sh 最后，将该脚本添加到用户配置文件的底部。对于全局范围来说，你需要在 /etc/profile 文件中添加该脚本。$ vi /home/magi/.profile /opt/scripts/battery-status.sh & 重启你的 Linux 系统来检查这点。$ sudo reboot 方法 2：当电池充电（高于 95%）或放电（低于 20%）时发送通知的 Shell 脚本这个脚本与上面的脚本类似，但它是由交流适配器负责。如果你插上了交流适配器，而且电池的电量超过 95%，它就会发出一个带有声音的通知，但是这个通知不会停止，直到你拔掉交流适配器。如果你拔掉交流适配器，你将永远不会再看到通知，直到你的电池电量下降到 20%。$ sudo vi /opt/scripts/battery-status-1.sh #!/bin/bash while true do export DISPLAY=:0.0 battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'` if on_ac_power; then if [ $battery_level -ge 95 ]; then notify-send "Battery Full" "Level: ${battery_level}% " paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga fi else if [ $battery_level -le 20 ]; then notify-send --urgency=CRITICAL "Battery Low" "Level: ${battery_level}%" paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga fi fi sleep 60 done 脚本完成后，设置执行权限：$ sudo chmod +x /opt/scripts/battery-status-1.sh 最后将脚本添加到用户配置文件的底部。对于全局范围来说，…

如何在 Linux 终端查看图像
type: item
date: 2020-12-24T07:36:26+08:00
description: Linux 有很多用于查看图像的 GUI 应用。但我从来没有尝试过用任何命令行应用来查看它。幸运的是，在使用 ImageMagick 工具时，我得到了一个从终端查看图像的命令。命令名是 “display，它是 ImageMagick 工具的一部分。这是一个很好的工具，允许类 UNIX 用户从终端查看图像。此外，我还为此用途得到了另一个很好的工具，叫做 FIM。我们将向你展示如何安装并使用它从 Linux 终端查看图像。这些命令使用系统的 帧缓冲 framebuffer 直接从命令行显示图像。如何使用 display 命令从终端查看图像ImageMagick 是一个自由开源、功能丰富、基于命令行的图像处理工具。它用于创建、编辑、合成或转换位图图像。它可以读取和写入各种格式（超过 200 种）的图像，包括 PNG、JPEG、GIF、PDF、SVG 等。它可以调整图像的大小、镜像、旋转、转换图像、调整图像颜色、应用各种特殊效果等。它支持批处理，允许你一次处理所有图像。如何安装 ImageMagick？ImageMagick 软件包包含在大多数 Linux 发行版的官方仓库中。使用发行版软件包管理器来安装它。**需要注意的是：**确保你的 Linux 系统上已经安装了 “Development Tools” 包，这是安装的前提条件。对于 RHEL/CentOS 6/7 系统，请使用 yum 命令 安装 ImageMagick：$ sudo yum install -y ImageMagick ImageMagick-devel 在 RHEL/CentOS 8 和 Fedora 系统，使用 dnf 命令 安装 ImageMagick：$ sudo dnf install -y ImageMagick ImageMagick-devel 对于 Debian/Ubuntu 系统，使用 apt 命令 或 apt-get 命令 安装 ImageMagick：$ sudo apt-get update $ sudo apt-get install imagemagick 对于 openSUSE 系统，使用 zypper 命令 安装 ImageMagick：$ sudo zypper install -y ImageMagick 要查看任何图像文件，请运行 display 命令，如下所示。你可以按下 Esc/q 按钮关闭图像：$ display bird.jpg 如果你想用指定的窗口大小打开图像，请使用 -geometry 标志：$ display -geometry 1000x600 ~/Downloads/bird.jpg 你也可以通过 display 命令输入图像的位置信息。下面的命令可以从桌面的距顶部 800 像素和据左上角 800 像素处打开图像：$ display -geometry 1000x600+800+800 ~/Downloads/bird.jpg 如果你想用 display 命令调整图像的大小，请使用以下格式：$ display -resize 600x400 ~/Downloads/bird.jp 另外，你也可以使用百分比来调整图片的大小：$ display -resize 50% ~/Downloads/bird.jpg 如何使用 fim 命令从终端查看图像FIM 是一个专门为 Linux 设计的轻量级全局图像查看器。但它并不局限于 Linux，它也可配置在其他操作系统上运行，如 MS-Windows。对于熟悉 VIM 文本编辑器等软件的用户来说，它是高度可定制和可脚本化的图像查看器。它可以全屏显示图像，并且可以使用键盘快捷键轻松控制。它是一款非常轻量级的工具，因为它只依赖于某些库。它可以打开许多文件格式，它可以在以下视频模式下显示图像：使用 Linux 帧缓冲设备图形化。在 X/Xorg 下，使用 SDL 库图形化在 X/Xorg 下，使用 Imlib2 库图形化。使用 AAlib 库，在任意文本控制台中以 ASCII 艺术形式呈现。运行时自动检测或选择正确的视频模式，如果需要，可以在构建前配置时选择加入或去除。FIM 是 “Fbi IMproved” 的缩写，是 Fbi Image Viewer 的复刻版本。FIM 可以很容易地安装在基于 Debian/Ubuntu 的系统上，因为该软件包在发行版的官方仓库中是可用的。对于其他发行版，你可能需要从源码编译它：$ sudo apt install fim 安装完毕后，你可以使用以下命令显示图像：$ fim bird.jpg 你可以使用 -a 选项自动缩放图像：$ fim -a bird.jpg 如果你要打开当前目录中的多个图像文件，请使用通配符将它们全部打开。使用 Pa…

如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘
type: item
date: 2020-11-14T08:16:21+08:00
description: 当 Linux 系统连接到 SAN（存储区域网络）后，你需要重新扫描 iSCSI 服务以发现新的 LUN。要做到这一点，你必须向存储团队提供 Linux 主机的 WWN 号和所需的 LUN 大小。这篇文章将帮助你查找 Linux 主机的 WWN 号。当存储团队将 LUN 与给定的 Linux 主机进行了映射，他们将为你提供新的 LUN 详细信息。LUN 在存储术语中被称为 LUN 的串行十六进制。你需要扫描 SCSI 主机来寻找存储团队分配的新 LUN。这可以通过两种方式进行，扫描每个 scsi 主机设备或运行 rescan-scsi-bus.sh 脚本来检测新磁盘。扫描后可以在 /dev/disk/by-id 目录下找到它们。# ll /dev/disk/by-id total 0 lrwxrwxrwx 1 root root 10 Jul 9 17:52 scsi-60a98000486e542d4f5a2f47694d684b -> ../../sdah lrwxrwxrwx 1 root root 9 Jul 9 17:52 scsi-60a98000486e542d4f5a2f47694d684c -> ../../sdw . . lrwxrwxrwx 1 root root 10 Jul 9 17:52 scsi-60a98000486e542d4f5a2f47694d684d -> ../../sdjk lrwxrwxrwx 1 root root 10 Jul 9 17:52 scsi-60a98000486e542d4f5a2f47694d684e -> ../../sdaa lrwxrwxrwx 1 root root 9 Jul 9 17:52 scsi-60a98000486e542d4f5a2f47694d684f -> ../../sdh 另外，如果你已经用 multipath 配置了它们，那么可以用 multipath 命令找到。`multipath 主要是配置到 Oracle 数据库服务器中，以提高性能。# multipath -ll 60a98000486e542d4f5a2f47694d684b dm-37 NETAPP,LUN C-Mode size=512G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='round-robin 0' prio=50 status=active | |- 1:0:4:18 sdoe 128:416 active ready running | |- 0:0:4:18 sdpq 131:256 active ready running | |- 0:0:5:18 sdsr 135:496 active ready running | `- 1:0:5:18 sdsq 135:480 active ready running `-+- policy='round-robin 0' prio=10 status=enabled |- 1:0:1:18 sdfw 131:32 active ready running |- 1:0:0:18 sdci 69:96 active ready running |- 0:0:1:18 sdbz 68:208 active ready running |- 0:0:0:18 sds 65:32 active ready running |- 1:0:3:18 sdmd 69:336 active ready running |- 1:0:2:18 sdjj 8:464 active ready running |- 0:0:3:34 sdjt 65:368 active ready running `- 0:0:2:34 sdgi 131:224 active ready running 这个过程适用于基于 Red Hat 6.x、7.x 和 8.x（RHEL - Red Hat Enterprise Linux）的系统，如 CentOS 和 Oracle Linux。方法 1：如何使用 /sys 类文件在 Linux 上扫描新的 LUN 和 SCSI 磁盘sysfs 文件系统是一个伪文件系统，它为内核数据结构提供了一个接口。sysfs 下的文件提供了关于设备、内核模块、文件系统和其他内核组件的信息。sysfs 文件系统通常被挂载在 /sys。通常，它是由系统自动挂载的。你可以使用 echo 命令来扫描每个 SCSI 主机设备，如下所示：# echo "- - -" > /sys/class/sc…

如何从 LVM 的卷组中删除物理卷？
type: item
date: 2020-10-25T18:16:26+08:00
description: 如果你的 LVM 不再需要使用某个设备，你可以使用 vgreduce 命令从卷组中删除物理卷。vgreduce 命令可以通过删除物理卷来缩小卷组的容量。但要确保该物理卷没有被任何逻辑卷使用，请使用 pvdisplay 命令查看。如果物理卷仍在使用，你必须使用 pvmove 命令将数据转移到另一个物理卷。数据转移后，它就可以从卷组中删除。最后使用 pvremove 命令删除空物理卷上的 LVM 标签和 LVM 元数据。第一部分：如何在 Linux 中创建/配置 LVM（逻辑卷管理）第二部分：如何在 Linux 中扩展/增加 LVM 大小（逻辑卷调整）第三部分：如何在 Linux 中减少/缩小 LVM 大小（逻辑卷调整）将扩展块移动到现有物理卷上使用 pvs 命令检查是否使用了所需的物理卷（我们计划删除 LVM 中的 /dev/sdc 磁盘）。# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/sda myvg lvm2 a- 75.00G 14.00G 61.00G /dev/sdb myvg lvm2 a- 50.00G 45.00G 5.00G /dev/sdc myvg lvm2 a- 17.15G 12.15G 5.00G 如果使用了，请检查卷组中的其他物理卷是否有足够的空闲 扩展块 extent 。如果有的话，你可以在需要删除的设备上运行 pvmove 命令。扩展块将被分配到其他设备上。# pvmove /dev/sdc /dev/sdc: Moved: 2.0% … /dev/sdc: Moved: 79.2% … /dev/sdc: Moved: 100.0% 当 pvmove 命令完成后。再次使用 pvs 命令检查物理卷是否有空闲。# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/sda myvg lvm2 a- 75.00G 1.85G 73.15G /dev/sdb myvg lvm2 a- 50.00G 45.00G 5.00G /dev/sdc myvg lvm2 a- 17.15G 17.15G 0 如果它是空闲的，使用 vgreduce 命令从卷组中删除物理卷 /dev/sdc。# vgreduce myvg /dev/sdc Removed "/dev/sdc" from volume group "vg01" 最后，运行 pvremove 命令从 LVM 配置中删除磁盘。现在，磁盘已经完全从 LVM 中移除，可以用于其他用途。# pvremove /dev/sdc Labels on physical volume "/dev/sdc" successfully wiped. 移动扩展块到新磁盘如果你在卷组中的其他物理卷上没有足够的可用扩展。使用以下步骤添加新的物理卷。向存储组申请新的 LUN。分配完毕后，运行以下命令来在 Linux 中发现新添加的 LUN 或磁盘。# ls /sys/class/scsi_host host0 # echo "- - -" > /sys/class/scsi_host/host0/scan # fdisk -l 操作系统中检测到磁盘后，使用 pvcreate 命令创建物理卷。# pvcreate /dev/sdd Physical volume "/dev/sdd" successfully created 使用以下命令将新的物理卷 /dev/sdd 添加到现有卷组 vg01 中。# vgextend vg01 /dev/sdd Volume group "vg01" successfully extended 现在，使用 pvs 命令查看你添加的新磁盘 /dev/sdd。# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/sda myvg lvm2 a- 75.00G 14.00G 61.00G /dev/sdb myvg lvm2 a- 50.00G 45.00G 5.00G /dev/sdc myvg lvm2 a- 17.15G 12.15G 5.00G /dev/sdd myvg lvm2 a- 60.00G 60.00G 0 使用 pvmove 命令将数据从 /dev/sdc 移动到 /dev/sdd。# pvmove /dev/sdc /dev/sdd /dev/sdc: Moved: 10.0% … /dev/sdc: Moved: 79.7% … /dev/sdc: Moved: 100.0% 数据移动到新磁盘后。再次使用 pvs 命令检查物理卷是否空闲。# pvs -o+pv…

如何在 Linux 中减少/缩小 LVM 大小（逻辑卷调整）
type: item
date: 2020-10-22T05:07:00+08:00
description: 减少/缩小逻辑卷是数据损坏的最高风险。所以，如果可能的话，尽量避免这种情况，但如果没有其他选择的话，那就继续。缩减 LVM 之前，建议先做一个备份。当你在 LVM 中的磁盘空间耗尽时，你可以通过缩小现有的没有使用全部空间的 LVM，而不是增加一个新的物理磁盘，在卷组上腾出一些空闲空间。需要注意的是： 在 GFS2 或者 XFS 文件系统上不支持缩小。如果你是逻辑卷管理 （LVM） 的新手，我建议你从我们之前的文章开始学习。第一部分：如何在 Linux 中创建/配置 LVM（逻辑卷管理）第二部分：如何在 Linux 中扩展/增加 LVM（逻辑卷调整）减少逻辑卷涉及以下步骤：卸载文件系统检查文件系统是否有任何错误缩小文件系统的大小缩小逻辑卷的大小重新检查文件系统是否存在错误（可选）挂载文件系统检查减少后的文件系统大小比如： 你有一个 100GB 的没有使用全部空间的 LVM，你想把它减少到 80GB，这样 20GB 可以用于其他用途。# df -h /testlvm1 Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg01-lv002 100G 15G 85G 12% /testlvm1 卸载文件系统使用 umount 命令卸载文件系统：# umount /testlvm1 检查文件系统是否有任何错误使用 e2fsck 命令检查文件系统是否有错误：# e2fsck -f /dev/mapper/vg01-lv002 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/vg01-lv002: 13/6553600 files (0.0% non-contiguous), 12231854/26212352 blocks 缩小文件系统下面的命令将把 testlvm1 文件系统从 100GB 缩小到 80GB。文件系统大小调整的常用语法（resize2fs）：resize2fs [现有逻辑卷名] [新的文件系统大小] 实际命令如下：# resize2fs /dev/mapper/vg01-lv002 80G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/mapper/vg01-lv002 to 28321400 (4k) blocks. The filesystem on /dev/mapper/vg01-lv002 is now 28321400 blocks long. 减少逻辑卷 （LVM） 容量现在使用 lvreduce 命令缩小逻辑卷（LVM） 的大小。通过下面的命令， /dev/mapper/vg01-lv002 将把逻辑卷 （LVM） 从 100GB 缩小到 80GB。LVM 缩减 （lvreduce） 的常用语法：lvreduce [新的 LVM 大小] [现有逻辑卷名称] 实际命令如下：# lvreduce -L 80G /dev/mapper/vg01-lv002 WARNING: Reducing active logical volume to 80.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv002? [y/n]: y Reducing logical volume lv002 to 80.00 GiB Logical volume lv002 successfully resized 可选：检查文件系统是否有错误缩减 LVM 后再次检查文件系统是否有错误：# e2fsck -f /dev/mapper/vg01-lv002 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summ…

如何在 Linux 中扩展/增加 LVM 大小（逻辑卷调整）
type: item
date: 2020-10-02T07:41:59+08:00
description: 扩展逻辑卷非常简单，只需要很少的步骤，而且不需要卸载某个逻辑卷就可以在线完成。LVM 的主要目的是灵活的磁盘管理，当你需要的时候，可以很方便地调整、扩展和缩小逻辑卷的大小。如果你是逻辑卷管理（LVM） 新手，我建议你从我们之前的文章开始学习。第一部分：如何在 Linux 中创建/配置 LVM（逻辑卷管理）扩展逻辑卷涉及到以下步骤：检查逻辑卷（LV）所在的卷组中是否有足够的未分配磁盘空间如果有，你可以使用这些空间来扩展逻辑卷如果没有，请向系统中添加新的磁盘或 LUN将物理磁盘转换为物理卷（PV）扩展卷组增加逻辑卷大小扩大文件系统检查扩展的文件系统大小如何创建 LVM 物理卷？使用 pvcreate 命令创建 LVM 物理卷。当在操作系统中检测到磁盘，使用 pvcreate 命令初始化 LVM 物理卷：# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created 请注意：上面的命令将删除磁盘 /dev/sdc 上的所有数据。物理磁盘可以直接添加到 LVM 物理卷中，而不是磁盘分区。使用 pvdisplay 命令来显示你所创建的物理卷：# pvdisplay /dev/sdc "/dev/sdc" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 69d9dd18-36be-4631-9ebb-78f05fe3217f 如何扩展卷组使用以下命令在现有的卷组（VG）中添加一个新的物理卷：# vgextend vg01 /dev/sdc Volume group "vg01" successfully extended 使用 vgdisplay 命令来显示你所创建的物理卷：# vgdisplay vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 14.99 GiB PE Size 4.00 MiB Total PE 3840 Alloc PE / Size 1280 / 4.99 Free PE / Size 2560 / 9.99 GiB VG UUID d17e3c31-e2c9-4f11-809c-94a549bc43b7 如何扩展逻辑卷？使用以下命令增加现有逻辑卷大小。逻辑卷扩展（lvextend）的常用语法：lvextend [要增加的额外空间] [现有逻辑卷名称] 使用下面的命令将现有的逻辑卷增加 10GB：# lvextend -L +10G /dev/mapper/vg01-lv002 Rounding size to boundary between physical extents: 5.90 GiB Size of logical volume vg01/lv002 changed from 5.00 GiB (1280 extents) to 15.00 GiB (3840 extents). Logical volume var successfully resized 使用 PE 大小来扩展逻辑卷：# lvextend -l +2560 /dev/mapper/vg01-lv002 要使用百分比（%）扩展逻辑卷，请使用以下命令：# lvextend -l +40%FREE /dev/mapper/vg01-lv002 现在，逻辑卷已经扩展，你需要调整文件系统的大小以扩展逻辑卷内的空间：对于基于 ext3 和 ext4 的文件系统，运行以下命令：# resize2fs /dev/mapper/vg01-lv002 对于 xfs 文件系统，使用以下命令：# xfs_growfs /dev/mapper/vg01-lv002 使用 df 命令查看文件系统大小：# df -h /lvmtest1 Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg01-lv002 15360M 34M 15326M 4% /lvmtest1 …

如何在 Linux 中创建/配置 LVM（逻辑卷管理）
type: item
date: 2020-10-01T19:12:00+08:00
description: 逻辑卷管理 Logical Volume Management （LVM）在 Linux 系统中扮演着重要的角色，它可以提高可用性、磁盘 I/O、性能和磁盘管理的能力。LVM 是一种被广泛使用的技术，对于磁盘管理来说，它是非常灵活的。它在物理磁盘和文件系统之间增加了一个额外的层，允许你创建一个逻辑卷而不是物理磁盘。LVM 允许你在需要的时候轻松地调整、扩展和减少逻辑卷的大小。如何创建 LVM 物理卷？你可以使用任何磁盘、RAID 阵列、SAN 磁盘或分区作为 LVM 物理卷 Physical Volume （PV）。让我们想象一下，你已经添加了三个磁盘，它们是 /dev/sdb、/dev/sdc 和 /dev/sdd。运行以下命令来发现 Linux 中新添加的 LUN 或磁盘：# ls /sys/class/scsi_host host0 # echo "- - -" > /sys/class/scsi_host/host0/scan # fdisk -l 创建物理卷 （pvcreate） 的一般语法：pvcreate [物理卷名] 当在系统中检测到磁盘，使用 pvcreate 命令初始化 LVM PV：# pvcreate /dev/sdb /dev/sdc /dev/sdd Physical volume "/dev/sdb" successfully created Physical volume "/dev/sdc" successfully created Physical volume "/dev/sdd" successfully created 请注意：上面的命令将删除给定磁盘 /dev/sdb、/dev/sdc 和 /dev/sdd 上的所有数据。物理磁盘可以直接添加到 LVM PV 中，而不必是磁盘分区。使用 pvdisplay 和 pvs 命令来显示你创建的 PV。pvs 命令显示的是摘要输出，pvdisplay 显示的是 PV 的详细输出：# pvs PV VG Fmt Attr PSize PFree /dev/sdb lvm2 a-- 15.00g 15.00g /dev/sdc lvm2 a-- 15.00g 15.00g /dev/sdd lvm2 a-- 15.00g 15.00g # pvdisplay "/dev/sdb" is a new physical volume of "15.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 15.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 69d9dd18-36be-4631-9ebb-78f05fe3217f "/dev/sdc" is a new physical volume of "15.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc VG Name PV Size 15.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID a2092b92-af29-4760-8e68-7a201922573b "/dev/sdd" is a new physical volume of "15.00 GiB" --- NEW Physical volume --- PV Name /dev/sdd VG Name PV Size 15.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID d92fa769-e00f-4fd7-b6ed-ecf7224af7faS 如何创建一个卷组 卷组 Volume Group （VG）是 LVM 结构中的另一层。基本上，卷组由你创建的 LVM 物理卷组成，你可以将物理卷添加到现有的卷组中，或者根据需要为物理卷创建新的卷组。创建卷组 （vgcreate） 的一般语法：vgcreate [卷组名] [物理卷名] 使用以下命令将一个新的物理卷添加到新的卷组中：# vgcreate vg01 /dev/sdb /dev/sdc /dev/sdd Volume group "vg01" successfully created 请注意：默认情况下，它使用 4MB 的 物理范围 Physical Extent （PE），但你可以根据你的需要改变它。使用 vgs 和 vgdisplay…