lvm(邏輯卷管理)

LVM ( Logical Volume Manager ) 邏輯卷管理

1、建立 LV

一、首先在你的虛擬機上添加一塊新的硬盤用來作實驗。

二、安裝 lvm : yum -y install lvm2

三、查看新添加的磁盤

[root@study ~]# fdisk -l

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

## 其中,/dev/sdb 就是我新添加的磁盤了

四、建立物理分區

[root@study ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x62beb6a4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m                          # 幫助信息
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition                        # 刪除一個分區
   l   list known partition types                # 打印分區類型對應的 ID 號
   m   print this menu
   n   add a new partition                       # 添加一個分區
   o   create a new empty DOS partition table
   p   print the partition table                 # 打印分區表
   q   quit without saving changes               # 不保存退出
   s   create a new empty Sun disklabel
   t   change a partition's system id            # 更改分區 ID
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit              # 保存退出
   x   extra functionality (experts only)

## 執行的命令是 fdisk /dev/sdb .

Command (m for help): n             # 執行添加分區指令
Command action
   e   extended
   p   primary partition (1-4)
p                                   # 添加一個主分區
Partition number (1-4): 1           # 分區號爲 1
First cylinder (1-2610, default 1): # 分區起始位置(直接回車)
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1024M  # 分區結束位置(+1024M 表示 1G 大小)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-2610, default 133):
Using default value 133
Last cylinder, +cylinders or +size{K,M,G} (133-2610, default 2610): +1024M

Command (m for help): p             # 執行打印分區表

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x62beb6a4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         264     1060290   83  Linux

## 能夠看到分了兩個區 /dev/sdb1  /dev/sdb2

Command (m for help): t             # 執行更改分區 ID (83 表示Linux 普通分區、82 表示swap、8e 表示LVM)
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x62beb6a4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  8e  Linux LVM
/dev/sdb2             133         264     1060290   8e  Linux LVM

## 已經看到分區 ID 變爲 8e ; 文件系統爲 Linux LVM

Command (m for help): w             # 執行保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@study ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x62beb6a4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  8e  Linux LVM
/dev/sdb2             133         264     1060290   8e  Linux LVM

## 能夠看到磁盤 /dev/sdb 有兩個分區 /dev/sdb1 /dev/sdb2 

五、建立 PV (物理卷)

[root@study ~]# pvcreate /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

## 使用 pvcreate 建立 PV 後面跟想要建立的分區

[root@study ~]# pvscan
  PV /dev/sda3   VG vg_study   lvm2 [18.80 GiB / 0    free]
  PV /dev/sdb1                 lvm2 [1.01 GiB]
  PV /dev/sdb2                 lvm2 [1.01 GiB]
  Total: 3 [20.82 GiB] / in use: 1 [18.80 GiB] / in no VG: 2 [2.02 GiB]

## 使用 pvscan 、pvdisplay 、pvs 均可以查看 PV
## PV /dev/sdb1 pv /dev/sdb2 爲我新建立的 PV 大小爲 1G(PV /dev/sda3 爲以前建立的屬 VG vg_study )

六、建立 VG (卷組)

[root@study ~]# vgcreate my_vg /dev/sdb1 /dev/sdb2
  Volume group "my_vg" successfully created

## 使用 vgcreate 建立卷組,後面接 vg 名,接 pv

[root@study ~]# vgdisplay
  --- Volume group ---
  VG Name               my_vg
  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               2.02 GiB
  PE Size               4.00 MiB
  Total PE              516
  Alloc PE / Size       0 / 0
  Free  PE / Size       516 / 2.02 GiB
  VG UUID               ynCJG8-ZIvI-9gBF-dO5K-aQws-N9WW-r26hch

## 一樣可使用 vgscan 、vgs 、vgdisplay 來查看 VG
## 能夠看到 VG名爲 my_vg 、VG 大小爲 2G 、PE 大小 4M 等

七、建立 LV (邏輯卷)

[root@study ~]# lvcreate -L 2G -n my_lv my_vg
  Logical volume "my_lv" created

## 使用 lvcreate 建立 LV ,-L 指定 LV大小,-n 指定 LV名稱,後面接 VG名

[root@study ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/my_vg/my_lv
  LV Name                my_lv
  VG Name                my_vg
  LV UUID                j9Bduh-3TB9-Owhz-X3PX-fVeQ-bvJe-OAFBVp
  LV Write Access        read/write
  LV Creation host, time study.localhost.localdomain, 2014-11-26 11:14:28 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

## 一樣可使用 lvscan 、lvs 、lvdisplay 來查看 LV
## 能夠看到 LV路徑 /dev/my_vg/my_lv 、LV名 my_lv 、VG名 my_vg 、LV大小 2G 等

八、建立文件系統 (格式化)

[root@study ~]# mkfs.ext4 /dev/my_vg/my_lv
mke2fs 1.41.12 (17-May-2010)
文件系統標籤=
操做系統:Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

正在寫入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

## 使用 mkfs.ext4 格式化爲 ext4 文件系統

九、掛載使用

[root@study ~]# mkdir /data
[root@study ~]# mount /dev/my_vg/my_lv /data/
[root@study ~]# df -HT
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_study-LogVol00 ext4    20G  1.4G   18G   8% /
tmpfs                         tmpfs  521M     0  521M   0% /dev/shm
/dev/sda1                     ext4   204M   30M  164M  16% /boot
/dev/mapper/my_vg-my_lv       ext4   2.2G   71M  2.0G   4% /data

## 建立 /data 目錄,將 /dev/my_vg/my_lv 掛載到 /data

[root@study ~]# umount /data/
[root@study ~]# blkid /dev/my_vg/my_lv
/dev/my_vg/my_lv: UUID="a8cb322e-1872-4ea8-bfba-f21b678bc849" TYPE="ext4"
[root@study ~]# echo "UUID="a8cb322e-1872-4ea8-bfba-f21b678bc849" /data ext4 defaults 0 0" >> /etc/fstab
[root@study ~]# mount -a
[root@study ~]# df -HT
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_study-LogVol00 ext4    20G  1.5G   18G   8% /
tmpfs                         tmpfs  521M     0  521M   0% /dev/shm
/dev/sda1                     ext4   204M   30M  164M  16% /boot
/dev/mapper/my_vg-my_lv       ext4   2.2G   71M  2.0G   4% /data

## 也可使用 blkid 生成 UUID 而後寫入到 /etc/fstab 文件中,實現開機自動掛載

2、擴容 LV

一、首先建立物理分區(重點是此次建立後要格式化)

二、建立 PV

三、擴容 VG

[root@study ~]# vgextend my_vg /dev/sdb3
  Volume group "my_vg" successfully extended

## 使用 vgextend 指令擴展 VG ,後面接要擴展的 VG名 ,後面接將哪一個 PV 擴展進去

[root@study ~]# vgdisplay my_vg
  --- Volume group ---
  VG Name               my_vg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.02 GiB
  PE Size               4.00 MiB
  Total PE              774
  Alloc PE / Size       512 / 2.00 GiB
  Free  PE / Size       262 / 1.02 GiB
  VG UUID               ynCJG8-ZIvI-9gBF-dO5K-aQws-N9WW-r26hch

## 可使用 vgdisplay my_vg 來指定查看哪一個 VG
## 能夠看到 VG 總大小爲 3G 、已使用 2G 、空閒 1G(由於咱們擴進去 1G 的 PV)

四、擴容 LV

[root@study ~]# lvextend -L +1G /dev/my_vg/my_lv
  Size of logical volume my_vg/my_lv changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
  Logical volume my_lv successfully resized

## 使用 lvextend 擴容 LV ,-L 指定擴多大 ,後面接 LV 實際路徑 /dev/my_vg/my_lv

[root@study ~]# lvdisplay /dev/my_vg/my_lv
  --- Logical volume ---
  LV Path                /dev/my_vg/my_lv
  LV Name                my_lv
  VG Name                my_vg
  LV UUID                j9Bduh-3TB9-Owhz-X3PX-fVeQ-bvJe-OAFBVp
  LV Write Access        read/write
  LV Creation host, time study.localhost.localdomain, 2014-11-26 11:14:28 +0800
  LV Status              available
  # open                 1
  LV Size                3.00 GiB
  Current LE             768
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

## 可使用 lvdisplay /dev/my_vg/my_lv 來查看 LV 大小
## LV 大小變爲了 3G (原 2G)

五、投入使用

[root@study ~]# df -HT
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_study-LogVol00 ext4    20G  1.4G   18G   8% /
tmpfs                         tmpfs  521M     0  521M   0% /dev/shm
/dev/sda1                     ext4   204M   30M  164M  16% /boot
/dev/mapper/my_vg-my_lv       ext4   2.2G   71M  2.0G   4% /data

## 咱們發現分區 /data 大小仍是 2G

[root@study ~]# resize2fs /dev/my_vg/my_lv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/my_vg/my_lv is mounted on /data; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/my_vg/my_lv to 786432 (4k) blocks.
The filesystem on /dev/my_vg/my_lv is now 786432 blocks long.

[root@study ~]# df -HT
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_study-LogVol00 ext4    20G  1.4G   18G   8% /
tmpfs                         tmpfs  521M     0  521M   0% /dev/shm
/dev/sda1                     ext4   204M   30M  164M  16% /boot
/dev/mapper/my_vg-my_lv       ext4   3.2G   71M  3.0G   3% /data

## 使用 resize2fs /dev/my_vg/my_lv 從新計算分區大小後 發現擴容到了 3G

3、縮減 LV

一、模擬數據寫入

[root@study ~]# dd if=/dev/zero of=/data/block.db bs=1024M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
1073741824字節(1.1 GB)已複製,81.6381 秒,13.2 MB/秒

## 咱們使用 dd 命令寫了 1G 的數據到 /data

[root@study ~]# cp /etc/passwd /data/  ## 複製這個文件的目的是驗證數據是否丟失

[root@study ~]# df -HT
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_study-LogVol00 ext4    20G  1.4G   18G   8% /
tmpfs                         tmpfs  521M     0  521M   0% /dev/shm
/dev/sda1                     ext4   204M   30M  164M  16% /boot
/dev/mapper/my_vg-my_lv       ext4   3.2G  1.2G  1.9G  39% /data

## 如今這個剩餘空間 咱們想把他撤出來 1G

二、首先檢查一下文件系統

[root@study ~]# umount /data/  ## 必定要先 umount
[root@study ~]# e2fsck -f /dev/my_vg/my_lv
e2fsck 1.41.12 (17-May-2010)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄鏈接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/my_vg/my_lv: 13/196608 files (0.0% non-contiguous), 291646/786432 blocks

三、從新計算大小

[root@study ~]# resize2fs /dev/my_vg/my_lv 2G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/my_vg/my_lv to 524288 (4k) blocks.
The filesystem on /dev/my_vg/my_lv is now 524288 blocks long.

## 從新定義大小爲 2G

四、縮小 LV

[root@study ~]# lvreduce -L -1G /dev/my_vg/my_lv
  WARNING: Reducing active logical volume to 2.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce my_lv? [y/n]: y
  Size of logical volume my_vg/my_lv changed from 3.00 GiB (768 extents) to 2.00 GiB (512 extents).
  Logical volume my_lv successfully resized

## 使用 lvreduce 來縮小 LV ,-L -1G 縮小 1G

[root@study ~]# mount -a
[root@study ~]# df -HT
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_study-LogVol00 ext4    20G  1.4G   18G   8% /
tmpfs                         tmpfs  521M     0  521M   0% /dev/shm
/dev/sda1                     ext4   204M   30M  164M  16% /boot
/dev/mapper/my_vg-my_lv       ext4   2.2G  1.2G  863M  58% /data

[root@study ~]# ls /data/
block.db  lost+found  passwd

## 從新掛載分區,發現數據沒有問題 (僅是測試,沒有發現問題)

五、VG 中移除 PV

[root@study ~]# vgdisplay my_vg
  --- Volume group ---
  VG Name               my_vg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.02 GiB
  PE Size               4.00 MiB
  Total PE              774
  Alloc PE / Size       637 / 2.49 GiB
  Free  PE / Size       137 / 548.00 MiB
  VG UUID               ynCJG8-ZIvI-9gBF-dO5K-aQws-N9WW-r26hch

## 首先咱們 vgdisplay my_vg ,發現 VG 空閒 548M

[root@study ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               my_vg
  PV Size               1.01 GiB / not usable 3.41 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              258
  Free PE               0
  Allocated PE          258
  PV UUID               JB8X8v-jBPU-eOiN-aEOU-TOig-tv01-SuHytd

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               my_vg
  PV Size               1.01 GiB / not usable 3.44 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              258
  Free PE               0
  Allocated PE          258
  PV UUID               YXBMJJ-RyG3-z1xa-tlw6-piaI-cTgj-SIBIlz

  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               my_vg
  PV Size               1.01 GiB / not usable 3.44 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              258
  Free PE               137
  Allocated PE          121
  PV UUID               jSpEdJ-fxZh-LP27-rFIM-0gnO-mL2x-PpBJpK

## 其次使用 pvdisplay 查看 PV 的使用狀況發現:
   /dev/sdb1  PE 空閒 0
   /dev/sdb2  PE 空閒 0
   /dev/sdb3  PE 空閒 137 (上圖顯示每一個 PE 爲 4M ,那麼 /dev/sdb3 總空閒容量=137*4 = 548M)
## 正好等於 VG 的空閒大小,而 PV /dev/sdb3 大小爲 1G ,也就是說有部分空間被佔用,因此沒法移除該 PV

[root@study ~]# vgreduce my_vg /dev/sdb3
  Physical volume "/dev/sdb3" still in use
[root@study ~]# umount /data/
[root@study ~]# vgreduce my_vg /dev/sdb3
  Physical volume "/dev/sdb3" still in use

## 提示正在被佔用,沒法移除( umount 分區也不行 )

[root@study ~]# umount /data/

[root@study ~]# e2fsck -f /dev/my_vg/my_lv
e2fsck 1.41.12 (17-May-2010)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄鏈接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/my_vg/my_lv: 14/163840 files (0.0% non-contiguous), 289591/652288 blocks

[root@study ~]# resize2fs /dev/my_vg/my_lv 2G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/my_vg/my_lv to 524288 (4k) blocks.
The filesystem on /dev/my_vg/my_lv is now 524288 blocks long.

[root@study ~]# lvreduce -L -500M /dev/my_vg/my_lv
  WARNING: Reducing active logical volume to 2.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce my_lv? [y/n]: y
  Size of logical volume my_vg/my_lv changed from 2.49 GiB (637 extents) to 2.00 GiB (512 extents).
  Logical volume my_lv successfully resized

## 咱們把 LV 縮小了 500M

[root@study ~]# vgdisplay my_vg
  --- Volume group ---
  VG Name               my_vg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.02 GiB
  PE Size               4.00 MiB
  Total PE              774
  Alloc PE / Size       512 / 2.00 GiB
  Free  PE / Size       262 / 1.02 GiB
  VG UUID               ynCJG8-ZIvI-9gBF-dO5K-aQws-N9WW-r26hch

## 如今再看 VG 大小 空閒 1G

[root@study ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               my_vg
  PV Size               1.01 GiB / not usable 3.44 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              258
  Free PE               258
  Allocated PE          0
  PV UUID               jSpEdJ-fxZh-LP27-rFIM-0gnO-mL2x-PpBJpK

## pvdisplay 也發現 /dev/sdb3 正好所有空閒

[root@study ~]# vgreduce my_vg /dev/sdb3
  Removed "/dev/sdb3" from volume group "my_vg"

## 已經成功將 PV /dev/sdb3 從 VG my_vg 中移除

[root@study ~]# vgs
  VG       #PV #LV #SN Attr   VSize  VFree
  my_vg      2   1   0 wz--n-  2.02g 16.00m

## 使用 vgs 能夠看到 vg my_vg 中包含 PV 數爲 2

六、刪除 PV

[root@study ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped

## 使用 pvremove 刪除 PV /dev/sdb3

[root@study ~]# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sdb1  my_vg    lvm2 a--   1.01g     0
  /dev/sdb2  my_vg    lvm2 a--   1.01g 16.00m

## 使用 pvs 看到只有兩個 PV 了
## 而後 fdisk /dev/sdb 將 sdb3 的 ID 改成 83 ,保存 
   mkfs.ext4 /dev/sdb3 ,從新掛載到目錄,至此 /dev/sdb3 成爲普通分區

4、刪除整個 lv vg pv

[root@study ~]# umount /data/
[root@study ~]# lvremove /dev/my_vg/my_lv
Do you really want to remove active logical volume my_lv? [y/n]: y
  Logical volume "my_lv" successfully removed
[root@study ~]# vgremove my_vg
  Volume group "my_vg" successfully removed
[root@study ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
[root@study ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped

## 刪除比建立容易多了 ...
相關文章
相關標籤/搜索