27 November 2015

這篇算是延續上一篇的主題,假設VG裡面還有free space尚未用到,
那麼過一段時間以後,該怎麼把它拿出來用?
所以這篇主要會講到下面2個主題:

  1. Extend
  2. Shrink

1. Extend


Extend會講二種方法,分別為,

  • 1-1. Extend from VG
  • 1-2. Extend from new disk


1-1. Extend from PV


第一種是延續上一篇
從既有的VG中,把Free PE加入到LV中,
上一篇來看,你的VG應該還會剩下60GB。
可以用下面的指令vgs去看VG中剩下多少free PE,
最後一欄的VFree就是指剩下的free PE,
以我的機器為範例,裡面還有829.99G,
以及我有5個LV。

$ vgs
  VG        #PV #LV #SN Attr   VSize    VFree
  ubuntu-vg   1   5   0 wz--n- 1019.76g 829.99g
  
$ lvs
  LV     VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  db     ubuntu-vg -wi-ao  83.92g
  log    ubuntu-vg -wi-ao  19.07g
  root   ubuntu-vg -wi-ao  66.75g
  swap_1 ubuntu-vg -wi-ao 976.00m
  tmp    ubuntu-vg -wi-ao  19.07g

假設我要讓tmp這個LV加大100G,我們可以透過以下二個指令完成,

  1. lvresize
  2. resize2fs


使用方式如下,

$ lvresize -L +100G /dev/mapper/ubuntu--vg-tmp


完成上述指令以後,可以再透過lvs來看一下tmp這個LV是否真的有加大100G。

$ lvs
  LV     VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  db     ubuntu-vg -wi-ao  83.92g
  log    ubuntu-vg -wi-ao  19.07g
  root   ubuntu-vg -wi-ao  66.75g
  swap_1 ubuntu-vg -wi-ao 976.00m
  tmp    ubuntu-vg -wi-ao 119.07g
  
$ df -h /tmp/
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-tmp   19G   44M   18G   1% /tmp


根據上面的output,你會發現LV真的有加大100G,
可是df中的filesystem size並沒有變動,
因為少用了resize2fs
resize2fs作用就是把filesystem變大。

$ resize2fs /dev/mapper/ubuntu--vg-tmp [119G]

最後一個是size的參數,其實可以不用加,
如果不加,就是用整個LV可以用的空間。


1-2. Extend from new disk


第二種Extend的方法是把新disk來加入至lv中。
其實步驟跟上述差不多,只是多了一些準備作業,
準備作業如下:

  1. 新增 PV
  2. 新PV 加入至 VG

首先你要有一顆硬碟,
然後用lsblk找到該block device的名稱,
我機器上的新硬碟就是sdb。

$ lsblk -d
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
fd0    2:0    1     4K  0 disk
sda    8:0    0  1020G  0 disk
sdb    8:16   0   200G  0 disk


在新增一個PV前,
必須先format disk成LVM的格式。

$ fdsik /dev/sdb

然後請按照下面的步驟去create,

  1. 按下n以建立新的partition
  2. 按下p選擇primary partition
  3. 按下1選擇partition number
  4. 按下enter選擇Default first sector
  5. 按下enter選擇Default last sector
  6. 按下t改變partition type
  7. 輸入8e, 8e為LVM的代碼
  8. 按下w儲存寫入

完成以後你就有一個新的partition了,名稱應該為sdb1

$ fdisk -l /dev/sdb


這時候就可以用pvcreate 來新增一個PV,
然後再用pvs看看是否有成功。

$  pvcreate /dev/sdb1

$ pvs
  PV         VG        Fmt  Attr PSize    PFree
  /dev/sda5  ubuntu-vg lvm2 a-   1019.76g 629.99g
  /dev/sdb1            lvm2 a-    200.00g 200.00g


接著就可以用vgextend這個指令,
把剛剛新增的PV加入至原有的ubuntu-vg當中,

$ vgextend ubuntu-vg /dev/sdb1


然後一樣用vgs去看看Free PE,應該會多了200g。
然後就可以用上面的lvresize以及resize2fs去Extend某個LV了。




2. Shrink


接著要來講Shrink的部分,
其實Shrink也是透過lvresize以及resize2fs來完成。
但Shrink和Extend有以下幾點的差別:

  1. 不能online shrinking
  2. 要先縮filesytem,再縮LVM
  3. Data有可能會遺失

那因為不能online shrinking,所以我們要先umount,

$ umount /tmp


接著才可以shrink filesystem,
透過resize2fs去把tmp縮到19G。

$ resize2fs /dev/mapper/ubuntu--vg-tmp 19G


最後才是去shrink LV,一樣是用lvresize去做,
過程中會show warning,告訴你資料可能會遺失,是否真的要做shrink?
如果沒有什麼疑慮,就按下y吧!

$ lvresize -L -100G /dev/mapper/ubuntu--vg-tmp
  WARNING: Reducing active logical volume to 19.07 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce tmp? [y/n]: y
  Reducing logical volume tmp to 19.07 GiB
  Logical volume tmp successfully resized


最後在mount起來,以及用df去看,
應該會發現tmp只剩下19G了!

$ mount /tmp

$ df -h /tmp
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-tmp   19G   44M   18G   1% /tmp


blog comments powered by Disqus