<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>磁盘管理 on 寻 Mi 处</title>
        <link>https://blog.mibase.top/tags/%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86/</link>
        <description>Recent content in 磁盘管理 on 寻 Mi 处</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Sun, 12 Jan 2025 07:26:00 +0800</lastBuildDate><atom:link href="https://blog.mibase.top/tags/%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>根分区用到 92% 那天，我把 LVM 扩容的流程走了一遍</title>
            <link>https://blog.mibase.top/p/%E6%A0%B9%E5%88%86%E5%8C%BA%E7%94%A8%E5%88%B0-92-%E9%82%A3%E5%A4%A9%E6%88%91%E6%8A%8A-lvm-%E6%89%A9%E5%AE%B9%E7%9A%84%E6%B5%81%E7%A8%8B%E8%B5%B0%E4%BA%86%E4%B8%80%E9%81%8D/</link>
            <pubDate>Sun, 12 Jan 2025 07:26:00 +0800</pubDate>
            <guid>https://blog.mibase.top/p/%E6%A0%B9%E5%88%86%E5%8C%BA%E7%94%A8%E5%88%B0-92-%E9%82%A3%E5%A4%A9%E6%88%91%E6%8A%8A-lvm-%E6%89%A9%E5%AE%B9%E7%9A%84%E6%B5%81%E7%A8%8B%E8%B5%B0%E4%BA%86%E4%B8%80%E9%81%8D/</guid>
            <description>&lt;img src=&#34;https://blog.mibase.top/p/%E6%A0%B9%E5%88%86%E5%8C%BA%E7%94%A8%E5%88%B0-92-%E9%82%A3%E5%A4%A9%E6%88%91%E6%8A%8A-lvm-%E6%89%A9%E5%AE%B9%E7%9A%84%E6%B5%81%E7%A8%8B%E8%B5%B0%E4%BA%86%E4%B8%80%E9%81%8D/cover.jpg&#34; alt=&#34;Featured image of post 根分区用到 92% 那天，我把 LVM 扩容的流程走了一遍&#34; /&gt;&lt;p&gt;上个月收到监控告警，说根分区使用率 92%。&lt;/p&gt;&#xA;&lt;p&gt;登录上去 &lt;code&gt;df -h&lt;/code&gt; 一看，四十个 G 的盘只剩三个多 G。&lt;code&gt;du -sh /*&lt;/code&gt; 挨个看，&lt;code&gt;/var/lib/docker&lt;/code&gt; 占了大头，还有一堆构建缓存。&lt;/p&gt;&#xA;&lt;p&gt;清了一轮，回到 60%。但我知道这只是暂时的，服务还在长，早晚得扩。&lt;/p&gt;&#xA;&lt;p&gt;还好当初装系统的时候选了 LVM。要是普通分区，扩容就得停机、进救援模式、用 &lt;code&gt;fdisk&lt;/code&gt; 调分区，风险大得多。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先理清楚-lvm-的三层&#34;&gt;先理清楚 LVM 的三层&#xA;&lt;/h2&gt;&lt;p&gt;很多人被 LVM 绕晕，是因为它的名字太多。其实就三层。&lt;/p&gt;&#xA;&lt;p&gt;物理层是 PV，Physical Volume，一块硬盘或者一个分区，初始化之后交给 LVM 管。&lt;/p&gt;&#xA;&lt;p&gt;中间层是 VG，Volume Group，一个池子，把多个 PV 合成一个大的存储空间。&lt;/p&gt;&#xA;&lt;p&gt;上层是 LV，Logical Volume，从池子里划出来的一块，格式化之后挂载使用。&lt;/p&gt;&#xA;&lt;p&gt;扩容的时候，顺序是从下往上。先让 PV 变大，VG 才会跟着变大，然后才能扩 LV，最后扩文件系统。&lt;/p&gt;&#xA;&lt;p&gt;搞反了就白做。&lt;/p&gt;&#xA;&lt;h2 id=&#34;看现在的状态&#34;&gt;看现在的状态&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;输出大概是这样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vda             254:0    0   40G  0 disk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vda1          254:1    0    1M  0 part&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vda2          254:2    0  512M  0 part /boot/efi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└─vda3          254:3    0 39.5G  0 part&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ├─vg0-root    253:0    0   20G  0 lvm  /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ├─vg0-swap    253:1    0    2G  0 lvm  [SWAP]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  └─vg0-data    253:2    0 17.5G  0 lvm  /data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这块盘 40G，&lt;code&gt;vda3&lt;/code&gt; 是 LVM 的物理分区，占了 39.5G。里面划了三个 LV。&lt;/p&gt;&#xA;&lt;p&gt;问题是我这块盘本来就只有 40G，没有剩余空间。所以要扩，得先给虚拟机加盘。&lt;/p&gt;&#xA;&lt;h2 id=&#34;加盘&#34;&gt;加盘&#xA;&lt;/h2&gt;&lt;p&gt;在云控制台或者虚拟化平台里，把磁盘从 40G 调到 80G。这一步在云厂商那边点一下就行，不用停机。&lt;/p&gt;&#xA;&lt;p&gt;加完之后，虚拟机里 &lt;code&gt;lsblk&lt;/code&gt; 还是显示 40G，因为内核还没重新读分区表。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# vda 显示 80G，但 vda3 还是 39.5G&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这就是关键的一步。&lt;code&gt;vda&lt;/code&gt; 本身变大了，但 &lt;code&gt;vda3&lt;/code&gt; 这个分区没变。&lt;/p&gt;&#xA;&lt;h2 id=&#34;扩分区&#34;&gt;扩分区&#xA;&lt;/h2&gt;&lt;p&gt;有两种情况。&lt;/p&gt;&#xA;&lt;p&gt;如果你用的是 GPT 分区表，而且分区后面没有别的分区，用 &lt;code&gt;growpart&lt;/code&gt; 最省事：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo growpart /dev/vda &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;growpart&lt;/code&gt; 是 &lt;code&gt;cloud-utils-growpart&lt;/code&gt; 包里的工具，大部分云镜像都预装了。&lt;/p&gt;&#xA;&lt;p&gt;如果没装，&lt;code&gt;apt install cloud-utils-growpart&lt;/code&gt; 或者 &lt;code&gt;yum install cloud-utils-growpart&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;跑完再看：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;vda3&lt;/code&gt; 应该变成 79.5G 了。&lt;/p&gt;&#xA;&lt;p&gt;如果是 MBR 分区表，&lt;code&gt;growpart&lt;/code&gt; 也能处理，但有个限制，主分区最多四个，而且扩展分区后面的空间不好扩。这种情况下得用 &lt;code&gt;fdisk&lt;/code&gt; 删了重建分区，&lt;code&gt;fdisk&lt;/code&gt; 的 &lt;code&gt;d&lt;/code&gt; 删分区只删分区表项，不动数据，只要起始扇区没变就是安全的。不过操作的时候手要稳。&lt;/p&gt;&#xA;&lt;h2 id=&#34;让-pv-认识新的大小&#34;&gt;让 PV 认识新的大小&#xA;&lt;/h2&gt;&lt;p&gt;分区变大了，但 LVM 还不知道。因为 PV 里记录了自己的大小。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pvresize /dev/vda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这个命令会让 PV 重新读取分区的大小，然后更新自己的元数据。&lt;/p&gt;&#xA;&lt;p&gt;验证：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pvs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;输出里的 &lt;code&gt;PSize&lt;/code&gt; 应该变成 79.5G，&lt;code&gt;PFree&lt;/code&gt; 是新增的空间。&lt;/p&gt;&#xA;&lt;p&gt;如果 &lt;code&gt;PFree&lt;/code&gt; 没变，说明 &lt;code&gt;pvresize&lt;/code&gt; 没生效，回头检查分区是不是真的扩了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;扩-lv&#34;&gt;扩 LV&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo lvs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;看当前的 LV 大小。&lt;/p&gt;&#xA;&lt;p&gt;扩的时候有两种写法。&lt;/p&gt;&#xA;&lt;p&gt;按绝对值扩到某个大小：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo lvextend -L 40G /dev/vg0/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;注意 &lt;code&gt;-L&lt;/code&gt; 是最终大小，不是增量。如果你写 &lt;code&gt;-L 40G&lt;/code&gt; 而当前已经是 40G，它什么都不会做。&lt;/p&gt;&#xA;&lt;p&gt;按增量扩：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo lvextend -L +20G /dev/vg0/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这个更直观，加二十个 G。&lt;/p&gt;&#xA;&lt;p&gt;或者干脆把池子里的空间全用掉：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo lvextend -l +100%FREE /dev/vg0/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;注意这里是小写的 &lt;code&gt;-l&lt;/code&gt;，后面跟百分比。大写的 &lt;code&gt;-L&lt;/code&gt; 后面跟具体数值。这个大小写很容易看错。&lt;/p&gt;&#xA;&lt;h2 id=&#34;扩文件系统&#34;&gt;扩文件系统&#xA;&lt;/h2&gt;&lt;p&gt;这一步最容易被忘。LV 变大了，但上面的文件系统还是原来的大小，&lt;code&gt;df -h&lt;/code&gt; 看不出变化。&lt;/p&gt;&#xA;&lt;p&gt;ext4 用：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo resize2fs /dev/vg0/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;不用给大小，它会自动扩到 LV 的边界。&lt;/p&gt;&#xA;&lt;p&gt;xfs 用：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo xfs_growfs /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;注意 xfs 的 &lt;code&gt;xfs_growfs&lt;/code&gt; 参数是挂载点，不是设备名。写 &lt;code&gt;/dev/vg0/root&lt;/code&gt; 会报错。&lt;/p&gt;&#xA;&lt;p&gt;这是两个文件系统最明显的区别。ext4 可以缩，xfs 只能扩。所以如果你的盘用 xfs，规划的时候要留点余量，缩不回去。&lt;/p&gt;&#xA;&lt;h2 id=&#34;在线扩容&#34;&gt;在线扩容&#xA;&lt;/h2&gt;&lt;p&gt;好消息是，上面这些操作除了 &lt;code&gt;growpart&lt;/code&gt; 之外，全都可以在线做，不用卸载不用停机。&lt;/p&gt;&#xA;&lt;p&gt;ext4 从内核 3.6 开始支持在线扩容，&lt;code&gt;resize2fs&lt;/code&gt; 会自动检测并走在线模式。xfs 一直是在线的。&lt;/p&gt;&#xA;&lt;p&gt;我用的是 ext4，整个流程在跑着服务的机器上做完，中间没有中断。nginx 和数据库都没感觉。&lt;/p&gt;&#xA;&lt;p&gt;不过还是建议在业务低峰做。虽然理论上是安全的，但万一 &lt;code&gt;growpart&lt;/code&gt; 把分区表写坏了，那就是大事故。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一次完整的操作&#34;&gt;一次完整的操作&#xA;&lt;/h2&gt;&lt;p&gt;把上面的命令串起来，加上 &lt;code&gt;df&lt;/code&gt; 前后的对比：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 扩容前&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 分区扩容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo growpart /dev/vda &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# PV 重新读取&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pvresize /dev/vda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# LV 扩容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo lvextend -l +100%FREE /dev/vg0/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 文件系统扩容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo resize2fs /dev/vg0/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 验证&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;我实际跑的时候，每一步之间都 &lt;code&gt;lsblk&lt;/code&gt; 或 &lt;code&gt;pvs&lt;/code&gt; 确认一下。多敲几条命令，比出问题再回头找强。&lt;/p&gt;&#xA;&lt;h2 id=&#34;几个坑&#34;&gt;几个坑&#xA;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;growpart&lt;/code&gt; 之后忘了 &lt;code&gt;pvresize&lt;/code&gt;，这是最常见的。&lt;code&gt;pvs&lt;/code&gt; 里 &lt;code&gt;PFree&lt;/code&gt; 是 0，你就会以为是分区没扩成功，其实只是 LVM 不知道。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;lvextend&lt;/code&gt; 用了 &lt;code&gt;-L&lt;/code&gt; 但写的是增量值，比如 &lt;code&gt;-L 20G&lt;/code&gt; 而当前已经是 20G，它什么都不做，也不报错。&lt;/p&gt;&#xA;&lt;p&gt;xfs 用 &lt;code&gt;resize2fs&lt;/code&gt; 会直接报错说不支持，别慌，换 &lt;code&gt;xfs_growfs&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;还有一个，如果你的 &lt;code&gt;/boot&lt;/code&gt; 在 LVM 上，扩它是可以的，但 grub 那边可能需要重新生成配置。我这个机器的 &lt;code&gt;/boot&lt;/code&gt; 是独立分区，没在 LVM 里，所以没遇到。&lt;/p&gt;&#xA;&lt;h2 id=&#34;缩容的注意事项&#34;&gt;缩容的注意事项&#xA;&lt;/h2&gt;&lt;p&gt;扩容易，缩难。&lt;/p&gt;&#xA;&lt;p&gt;ext4 缩容要三步。先 &lt;code&gt;umount&lt;/code&gt;，然后 &lt;code&gt;e2fsck -f&lt;/code&gt; 检查，再 &lt;code&gt;resize2fs &amp;lt;设备&amp;gt; &amp;lt;目标大小&amp;gt;&lt;/code&gt;，最后 &lt;code&gt;lvreduce&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;顺序不能反。先缩文件系统再缩 LV。如果先缩 LV，文件系统就损坏了，数据基本找不回来。&lt;/p&gt;&#xA;&lt;p&gt;xfs 根本不支持缩容。要用 xfs 又想缩，只能备份、重建、恢复。&lt;/p&gt;&#xA;&lt;p&gt;所以我的建议是，宁可一开始规划得保守一点，也不要给自己留缩容的活。&lt;/p&gt;&#xA;&lt;h2 id=&#34;磁盘规划的一点经验&#34;&gt;磁盘规划的一点经验&#xA;&lt;/h2&gt;&lt;p&gt;装系统的时候我习惯这么分：&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;/boot&lt;/code&gt; 给 512M，独立分区，不在 LVM 里。这是为了让 grub 和系统救援都能正常工作。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;swap&lt;/code&gt; 给内存的一到两倍，但不超过 4G。现在很多云厂商建议不给 swap，我的看法是留一点，防止突发的内存尖峰直接把进程打死。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;/&lt;/code&gt; 给剩下的全部。不用单独分 &lt;code&gt;/var&lt;/code&gt; 和 &lt;code&gt;/home&lt;/code&gt;，因为 LVM 的好处就是可以动态调，一开始分太细反而失去了灵活性。&lt;/p&gt;&#xA;&lt;p&gt;这样分下来，如果哪天 &lt;code&gt;/var/lib/docker&lt;/code&gt; 涨得太快，我直接扩根分区就行，不用去动别的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;现在的状态&#34;&gt;现在的状态&#xA;&lt;/h2&gt;&lt;p&gt;扩到 80G 之后，根分区用了 38%，&lt;code&gt;/data&lt;/code&gt; 那边还有空间。跑了一个多月，稳定。&lt;/p&gt;&#xA;&lt;p&gt;顺手做了两件事。一是给 docker 加了 &lt;code&gt;data-root&lt;/code&gt; 的迁移，把镜像目录挪到了 &lt;code&gt;/data&lt;/code&gt; 下面，这样系统盘的压力小很多。二是加了个监控，磁盘到 85% 就推消息，不用等到 92% 才被叫醒。&lt;/p&gt;&#xA;&lt;p&gt;LVM 这个东西，平时感觉不到它的存在，真正需要的时候才发现它的好。当初装系统多勾了一个选项，省了今天一晚上的事。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
