首先解釋一下幾個關鍵詞
pv: physical volume 實體卷,就是用實體磁盤組成的卷,要在實體磁盤上建立。
vg:volume group卷組,就是實體卷組成的卷組合,要在實體卷基礎上建立。
lv:logical volume邏輯卷,可以了解為邏輯可動态配置設定的磁盤空間,要在卷組上建立。
是以lvm的建立順序就是,實體磁盤分區(也可以不分區),在實體分區上建立pv,在pv上建立vg,在vg上建立lv,然後格式化lv挂載使用
ok,下面具體來操作一下邏輯卷的建立以及空間擴容和删除
我們使用的虛拟機sdb磁盤來分幾個區做一下測試(一般可使用多個磁盤直接加入到卷組,這裡我們使用實體磁盤的多個分區,操作方法相同)
<code>01</code>
<code>[root@cnhejia ~]</code><code># fdisk -l</code>
<code>02</code>
<code>03</code>
<code>disk /dev/sdb: 21.5 gb, 21474836480 bytes</code>
<code>04</code>
<code>255 heads, 63 sectors/track, 2610 cylinders</code>
<code>05</code>
<code>units = cylinders of 16065 * 512 = 8225280 bytes</code>
<code>06</code>
<code>sector size (logical/physical): 512 bytes / 512 bytes</code>
<code>07</code>
<code>i/o size (minimum/optimal): 512 bytes / 512 bytes</code>
<code>08</code>
<code>disk identifier: 0x32d0a442</code>
<code>09</code>
<code>10</code>
<code>device boot start end blocks id system</code>
先将sdb分3個100m的分區出來
<code>[root@cnhejia ~]</code><code># fdisk /dev/sdb <<eof</code>
<code>n</code>
<code>p</code>
<code>1</code>
<code>+100m</code>
<code>2</code>
<code>11</code>
<code>12</code>
<code>13</code>
<code>14</code>
<code>15</code>
<code>3</code>
<code>16</code>
<code>17</code>
<code>18</code>
<code>w</code>
<code>19</code>
<code>eof</code>
<code>20</code>
<code>21</code>
<code>22</code>
<code>23</code>
<code>24</code>
<code>25</code>
<code>26</code>
<code>27</code>
<code>28</code>
<code>29</code>
<code>30</code>
<code>31</code>
<code>/dev/sdb1 1 14 112423+ 83 linu x</code>
<code>32</code>
<code>/dev/sdb2 15 28 112455 83 linu x</code>
<code>33</code>
<code>/dev/sdb3 29 42 112455 83 linu x</code>
将sdb[1-3]轉換為實體卷
<code>[root@cnhejia ~]</code><code># pvcreate /dev/sdb[1-3]</code>
<code>physical volume </code><code>"/dev/sdb1"</code> <code>successfully created</code>
<code>physical volume </code><code>"/dev/sdb2"</code> <code>successfully created</code>
<code>4</code>
<code>physical volume </code><code>"/dev/sdb3"</code> <code>successfully created</code>
使用pvs檢視目前的實體卷情況,都沒有加入vg
<code>[root@cnhejia ~]</code><code># pvs</code>
<code>pv vg fmt attr psize pfree</code>
<code>/dev/sdb1 lvm2 a-- 109.79m 109.79m</code>
<code>/dev/sdb2 lvm2 a-- 109.82m 109.82m</code>
<code>5</code>
<code>/dev/sdb3 lvm2 a-- 109.82m 109.82m</code>
現在我們先将sdb1和sdb2加入一個卷組vgtest
<code>[root@cnhejia ~]</code><code># vgcreate vgtest /dev/sdb[1-2]</code>
<code>volume group </code><code>"vgtest"</code> <code>successfully created</code>
<code>[root@cnhejia ~]</code><code># vgs</code>
<code>vg </code><code>#pv #lv #sn attr vsize vfree</code>
<code>volgroup 1 2 0 wz--n- 19.51g 0</code>
<code>vgtest 2 0 0 wz--n- 216.00m 216.00m</code>
<code>/dev/sda2 volgroup lvm2 a-- 19.51g 0</code>
<code>/dev/sdb1 vgtest lvm2 a-- 108.00m 108.00m</code>
<code>/dev/sdb2 vgtest lvm2 a-- 108.00m 108.00m</code>
<code>[root@cnhejia ~]</code><code>#</code>
卷組vgtest建立成功,并且将sdb1和sdb2加入了這個卷組,通過vgs可以看到卷組大小為216m
現在我們在卷組vgtest上建立一個名為lvtest的100m的邏輯卷,這樣才能真正使用這個磁盤
<code>[root@cnhejia ~]</code><code># lvcreate -l 100m -n lvtest vgtest</code>
<code>logical volume </code><code>"lvtest"</code> <code>created</code>
<code>[root@cnhejia ~]</code><code># lvs</code>
<code>lv vg attr lsize pool origin data% move log cpy%sync convert</code>
<code>lv_root volgroup -wi-ao---- 17.57g</code>
<code>6</code>
<code>lv_swap volgroup -wi-ao---- 1.94g</code>
<code>7</code>
<code>lvtest vgtest -wi-a----- 100.00m</code>
這時候就可以對lvtest進行格式化使用了
<code>[root@cnhejia ~]</code><code># mkfs.ext4 /dev/vgtest/lvtest</code>
<code>或者</code>
<code>[root@cnhejia ~]</code><code># mkfs.ext4 /dev/mapper/vgtest-lvtest</code>
<code>mapper下會生成卷組映射,等同于軟連接配接一樣,操作完全同步。</code>
<code>[root@cnhejia ~]</code><code># mkfs.ext4 /dev/mapper/vgtest-lvtest ^c</code>
<code>[root@cnhejia ~]</code><code># mount /dev/mapper/vgtest-lvtest /mnt/</code>
<code>[root@cnhejia ~]</code><code># df -h</code>
<code>filesystem size used avail use% mounted on</code>
<code>/dev/mapper/volgroup-lv_root 18g 3.6g 13g 22% /</code>
<code>tmpfs 495m 0 495m 0% /dev/shm</code>
<code>/dev/sda1 485m 70m 391m 16% /boot</code>
<code>/dev/mapper/vgtest-lvtest 97m 5.6m 87m 7% /mnt</code>
目前已經成功挂載完成在實體卷sdb1和sdb2上建立的卷組vgtest上建立的100m大小的邏輯卷lvtest
如果這100m的mnt目錄不夠用怎麼辦?邏輯卷的好處就是動态無損擴容,使用lvextend增加空間然後使用resize2fs重新同步磁盤大小。操作方法如下:
<code>[root@cnhejia ~]</code><code># lvextend -l +50m /dev/mapper/vgtest-lvtest</code>
<code>rounding size to boundary between physical extents: 52.00 mib</code>
<code>extending logical volume lvtest to 152.00 mib</code>
<code>logical volume lvtest successfully resized</code>
<code>lvtest vgtest -wi-ao---- 152.00m</code>
<code>[root@cnhejia ~]</code><code># resize2fs /dev/mapper/vgtest-lvtest</code>
<code>resize2fs 1.41.12 (17-may-2010)</code>
<code>filesystem at /dev/mapper/vgtest-lvtest is mounted on /mnt; on-line resizing required</code>
<code>old desc_blocks = 1, new_desc_blocks = 1</code>
<code>performing an on-line resize of /dev/mapper/vgtest-lvtest to 155648 (1k) blocks.</code>
<code>the filesystem on /dev/mapper/vgtest-lvtest is now 155648 blocks long.</code>
<code>/dev/mapper/vgtest-lvtest 148m 5.6m 135m 4% /mnt</code>
mnt目錄已經成功變成150m了
如果想減少這個邏輯卷的空間,操作也很簡單:
<code>umount</code> <code>/mnt</code>
<code>//檢測空間使用情況</code>
<code>[root@cnhejia ~]</code><code># e2fsck -f /dev/mapper/vgtest-lvtest</code>
<code>//将邏輯卷調整為100m即可</code>
<code>[root@cnhejia ~]</code><code># resize2fs /dev/mapper/vgtest-lvtest 100m</code>
這時候如果兩個實體卷200m都用光了怎麼辦?沒關系,lvm也可以将新的磁盤加進來。現在我們就把sdb3加進來,操作方法如下:
<code>[root@cnhejia ~]</code><code># pvcreate /dev/sdb3</code>
<code>[root@cnhejia ~]</code><code># vgextend vgtest /dev/sdb3</code>
<code>volume group </code><code>"vgtest"</code> <code>successfully extended</code>
<code>[root@cnhejia ~]</code><code># vgdisplay</code>
<code>--- volume group ---</code>
<code>vg name vgtest</code>
<code>system id</code>
<code>format lvm2</code>
<code>metadata areas 3</code>
<code>metadata sequence no 4</code>
<code>vg access </code><code>read</code><code>/write</code>
<code>vg status resizable</code>
<code>max lv 0</code>
<code>cur lv 1</code>
<code>open lv 1</code>
<code>max pv 0</code>
<code>cur pv 3</code>
<code>act pv 3</code>
<code>vg size 324.00 mib</code>
<code>pe size 4.00 mib</code>
<code>total pe 81</code>
<code>alloc pe / size 38 / 152.00 mib</code>
<code>free pe / size 43 / 172.00 mib</code>
<code>vg uuid xh0p8e-fmpu-oa4g-nnp4-9vcn-tizn-szylsq</code>
怎麼樣,vgtest這個卷組有300m空間了吧,需要的話可以都放到/mnt的挂載下。
——————————————————————————————
上述是建立和使用管理的一些介紹,如果某個分區/硬碟可能健康狀态不好,要解除安裝或者移出或者更換怎麼辦?
先使用pvmove将看着不爽的實體卷資料轉移,資料轉移完成後然後使用vgreduce将看着不爽的實體卷從卷組移出,然後使用pvremove删除實體卷,這個磁盤就變成普普通通的磁盤了,愛修愛丢随便你;
假設現在sdb2這個分區(或者磁盤)壞了,要移除,但是資料不能丢,操作步驟如下:
<code>[root@cnhejia ~]</code><code># pvmove /dev/sdb2</code>
<code>/dev/sdb2: moved: 18.5%</code>
<code>/dev/sdb2: moved: 100.0%</code>
<code>[root@cnhejia ~]</code><code># vgreduce vgtest /dev/sdb2</code>
<code>removed </code><code>"/dev/sdb2"</code> <code>from volume group </code><code>"vgtest"</code>
<code>[root@cnhejia ~]</code><code># pvremove /dev/sdb2</code>
<code>8</code>
<code>labels on physical volume </code><code>"/dev/sdb2"</code> <code>successfully wiped</code>
至此sdb2這個分區和lvm已經沒有關系了
一個vg卷組是可以建立多個lv邏輯卷的,如果有一個卷你不想要了直接執行lvremove即可
<code>[root@cnhejia ~]</code><code>#lvremove /dev/mapper/vgtest/lvtest</code>
如何删除整個系統的卷組,不再使用lvm?
需要資料先備份,不要資料直接操作,操作如下:
<code>[root@cnhejia ~]</code><code># vgremove vgtest</code>
<code>do you really want to remove volume group </code><code>"vgtest"</code> <code>containing 1 logical volumes? [y/n]: y</code>
<code>do you really want to remove active logical volume lvtest? [y/n]: y</code>
<code>logical volume </code><code>"lvtest"</code> <code>successfully removed</code>
<code>volume group </code><code>"vgtest"</code> <code>successfully removed</code>
這時候fdisk就不再能看到之前的卷組了,pvremove移出卷組即可,直接重分區格式化其實也可以。
注意:
如果磁盤添加到了vg中,并且vg是激活的,那麼再去對磁盤分區表做修改的時候會失敗,提示readonly。
先通過vgchange -a n vgname取消vg的激活狀态再通過fdisk分區,分區後通過vgchange -ay vgname重新激活即可。
當然,激活狀态去修改原有的磁盤分區表增加新的分區,重新開機後一般也能夠正常生效。