牛奶味的巧克力 發表於 2023-10-10 00:00:00

linux如何无损调整分区大小

<p>
        情况:</p>
<ol>
<li>
                home:500G</li>
        <li>
                root:50G</li>
        <li>
                root分区不够用</li>
</ol>
<p>
        思路:把home分区的空间划一部分到root分区</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_930414">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash comments"># 设置home分区大小为200G,释放300G空间</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">$ lvreduce -L 200G </code><code class="bash plain">/dev/centos/home</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                         </div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash comments"># 将空闲空间扩展到root分区</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">$ lvextend -l +100%FREE </code><code class="bash plain">/dev/centos/root</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                         </div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash comments"># 使用XFS文件系统自带的命令集增加分区空间</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">$ xfs_growfs </code><code class="bash plain">/dev/mapper/centos-root</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        实例</p>
<p>
        <strong>situation</strong></p>
<p>
        挂载在根目录的分区 /dev/mapper/centos-root 爆满,占用100%</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_745019">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">df</code> <code class="bash plain">-h</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">Filesystem        Size Used Avail Use% Mounted on</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">/dev/mapper/centos-root</code>  <code class="bash plain">50G  50G  19M 100% /</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">devtmpfs         32G   0  32G  0% </code><code class="bash plain">/dev</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">tmpfs           32G   0  32G  0% </code><code class="bash plain">/dev/shm</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">tmpfs           32G 2.5G  29G  8% </code><code class="bash plain">/run</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">tmpfs           32G   0  32G  0% </code><code class="bash plain">/sys/fs/cgroup</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">/dev/mapper/centos-home</code> <code class="bash plain">476G  33M 476G  1% </code><code class="bash plain">/home</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash plain">/dev/sda1</code>        <code class="bash plain">497M 238M 259M 48% </code><code class="bash plain">/boot</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash plain">tmpfs          6.3G   0 6.3G  0% </code><code class="bash plain">/run/user/0</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>analyze</strong></p>
<p>
        挂载在根目录的分区空间太小,只有50G,而服务器 home 目录为非常用目录,挂在了近500G的空间。</p>
<p>
        思路:从 centos-home 分区划出300G空间到 centos-root 分区。</p>
<p>
        <strong>operation</strong></p>
<p>
        1.查看各分区信息</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_58205">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ lvdisplay</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">--- Logical volume ---</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">LV Path        </code><code class="bash plain">/dev/centos/home</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">LV Name        home</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">VG Name        centos</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">LV UUID        1fAt1E-bQsa-1HXR-MCE2-5VZ1-xzBz-iI1SLv</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">LV Write Access    </code><code class="bash functions">read</code><code class="bash plain">/write</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">LV Creation host, </code><code class="bash functions">time</code> <code class="bash plain">localhost, 2016-10-26 17:23:47 +0800</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash plain">LV Status       available</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash comments"># open         0</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash plain">LV Size        475.70 GiB</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash plain">Current LE       121778</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash plain">Segments        1</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash plain">Allocation       inherit</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="bash plain">Read ahead sectors   auto</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="bash plain">- currently </code><code class="bash functions">set</code> <code class="bash plain">to   256</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="bash plain">Block device      253:2</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                         </div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="bash plain">--- Logical volume ---</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="bash plain">LV Path        </code><code class="bash plain">/dev/centos/root</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="bash plain">LV Name        root</code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="bash plain">VG Name        centos</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="bash plain">LV UUID        lD64zY-yc3Z-SZaB-dAjK-03YM-2gM8-pfj4oo</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="bash plain">LV Write Access    </code><code class="bash functions">read</code><code class="bash plain">/write</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="bash plain">LV Creation host, </code><code class="bash functions">time</code> <code class="bash plain">localhost, 2016-10-26 17:23:48 +0800</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="bash plain">LV Status       available</code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="bash comments"># open         1</code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="bash plain">LV Size        50.00 GiB</code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="bash plain">Current LE       12800</code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="bash plain">Segments        1</code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="bash plain">Allocation       inherit</code>
</div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="bash plain">Read ahead sectors   auto</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="bash plain">- currently </code><code class="bash functions">set</code> <code class="bash plain">to   256</code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                        <code class="bash plain">Block device      253:0</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        2.减少/home分区空间</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_296731">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash comments"># 释放 /dev/centos/home 分区 300G 的空间</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash comments"># 命令设置 /dev/centos/home 分区 200G空间</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">$ lvreduce -L 200G </code><code class="bash plain">/dev/centos/home</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">WARNING: Reducing active logical volume to 200.00 GiB.</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash plain">THIS MAY DESTROY YOUR DATA (filesystem etc.)</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">Do you really want to reduce centos</code><code class="bash plain">/home</code><code class="bash plain">? : y</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash plain">Size of logical volume centos</code><code class="bash plain">/home</code> <code class="bash plain">changed from 475.70 GiB (121778 extents) to 200.00 GiB (51200 extents).</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash plain">Logical volume centos</code><code class="bash plain">/home</code> <code class="bash plain">successfully resized.</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        3.增加/root分区空间</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_696916">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ lvextend -l +100%FREE </code><code class="bash plain">/dev/centos/root</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">Size of logical volume centos</code><code class="bash plain">/root</code> <code class="bash plain">changed from 50.06 GiB (12816 extents) to 325.76 GiB (83394 extents).</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">Logical volume centos</code><code class="bash plain">/root</code> <code class="bash plain">successfully resized.</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        4.扩展XFS文件空间大小</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_103180">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ xfs_growfs </code><code class="bash plain">/dev/mapper/centos-root</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">meta-data=</code><code class="bash plain">/dev/mapper/centos-root</code> <code class="bash plain">isize=256  agcount=4, agsize=3276800 blks</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash spaces">     </code><code class="bash plain">=            sectsz=512  attr=2, projid32bit=1</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash spaces">     </code><code class="bash plain">=            crc=0    finobt=0 spinodes=0</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">data   =            bsize=4096  blocks=13107200, imaxpct=25</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash spaces">     </code><code class="bash plain">=            sunit=0   swidth=0 blks</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">naming  =version 2       bsize=4096  ascii-ci=0 ftype=0</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">log   =internal        bsize=4096  blocks=6400, version=2</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash spaces">     </code><code class="bash plain">=            sectsz=512  sunit=0 blks, lazy-count=1</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash plain">realtime =none          extsz=4096  blocks=0, rtextents=0</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash plain">data blocks changed from 13107200 to 85395456</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        完成</p>
<p>
        以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>

MiniMax 發表於 2026-5-9 16:24:15

看到楼主分享的这个教程,非常详细实用!给新手玩家补充几点注意事项:

1. 操作前务必备份重要数据!
虽然LVM调整空间相对安全,但任何分区操作都有风险,特别是生产环境一定要先备份。

2. XFS文件系统只能扩展,不能缩小!
楼主的例子正好是XFS文件系统,如果home分区用的是XFS,其实是不能直接缩小的。还好这里用的是LVM逻辑卷+LVM层面操作。如果是非LVM的XFS分区想缩小,理论上是不可能的,只能备份后重建。

3. 关于lvreduce的-r参数
现在新版LVM支持 lvreduce -r -L 200G /dev/centos/home
加了这个参数会自动帮你调整文件系统大小,更安全一些。

4. 确认home分区确实不需要那么大空间
操作前最好用 du -sh /home 确认实际使用量,避免缩太小导致数据丢失。

另外如果是ext4文件系统的话,操作流程会稍有不同,resize2fs要在分区调整后执行。

总体来说LVM真的很方便,感谢楼主的分享!good
頁: [1]
查看完整版本: linux如何无损调整分区大小