LVM

LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分好之后就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨著Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用戶在無需停機的情況下可以方便地調整各個分區大小。分為lvm,lvm2兩個版本。

lvm2使用dm(device mapper模塊),將一個或多個底層設備組織成一個邏輯的工具

底層可以是任何塊設備,可以是分區、raid

pe:物理盤區,pysical extent

圖片.png

存儲空間邊界:

    物理邊界:

    邏輯邊界:

    

    邏輯卷:

        擴展:先物理,后邏輯

        縮減:先邏輯,后物理

                縮減不能少于已經存儲的數據空間大小

快照卷也可以掛載到某個訪問點

快照卷在剛創建時沒有數據,訪問快照卷其實是映射到原卷上了,其實是訪問原卷的第二個通路。

如果改變原卷的數據,原卷上的數據在改之前,會復制到快照卷,所以快照卷不必和原卷一樣大

快照卷沒有永存的目的,只是備份

pv:

    pvcreate,pvs,pvdisplay,pvremove,pvmove,pvscan,

vg:

    vgcreate,vgs,vgdisplay,vgremove,vgextend,vgreduce,vgscan

lv:

    lvcreate,lvs,lvdisplay,lvremove,lvextend,lvreduce,lvscan

實驗:創建10G的vg

[root@node1 ~]# 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 0x6f1459ef.
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): p

Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 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: 0x6f1459ef

   Device Boot      Start         End      Blocks   Id  System

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

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

Command (m for help): t
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): w
The partition table has been altered!

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

查看分區:

[root@node1 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0  125829120 sda
   8        1     204800 sda1
   8        2   10240000 sda2
   8        3     512000 sda3
   8        4          1 sda4
   8        5  114870272 sda5
   8       16  125829120 sdb
   8       17    3156741 sdb1
   8       18    7349737 sdb2

創建pv:

[root@node1 ~]# pvcreate  /dev/sdb{1,2}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[root@node1 ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---  3.01g 3.01g
  /dev/sdb2       lvm2 ---  7.01g 7.01g
[root@node1 ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "3.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               3.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               f3ko3z-2YZ8-ghkh-jPOE-C3RI-AKVi-Z5Hjkm
   
  "/dev/sdb2" is a new physical volume of "7.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               7.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               KsP0wm-X0KJ-ZkwP-3l3G-lVAA-peS0-UjmRoN

創建vg:

vgcreate [-s N[mgt]] VG名稱  物理設備路徑,-s指定pe大小

[root@node1 ~]# vgcreate myvg /dev/sdb1
  Volume group "myvg" successfully created
[root@node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   1   0   0 wz--n- 3.01g 3.01g
[root@node1 ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               myvg
  PV Size               3.01 GiB / not usable 2.75 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              770
  Free PE               770
  Allocated PE          0
  PV UUID               f3ko3z-2YZ8-ghkh-jPOE-C3RI-AKVi-Z5Hjkm

擴展vg:

[root@node1 ~]# vgextend myvg /dev/sdb2
  Volume group "myvg" successfully extended
[root@node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   0   0 wz--n- 10.02g 10.02g

lvcreate:

    -n:lv_name

    -L:size[mMgGtT]

    VG_NAME

[root@node1 ~]# lvcreate -L 2G -n mylv myvg
  Logical volume "mylv" created
[root@node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 2.00g

邏輯卷被映射為一個設備:

[root@node1 ~]# ll /dev/mapper/
total 0
crw-rw---- 1 root root 10, 58 Dec 17 17:52 control
lrwxrwxrwx 1 root root      7 Dec 17 18:09 myvg-mylv -> ../dm-0

邏輯卷的2個訪問路徑:

/dev/vg_name/lv_name

/dev/mapper/vg_name-lv_name

此二者均為符號鏈接,指向的文件為/dev/dm-#

[root@node1 ~]# ll /dev/mapper/myvg-mylv 
lrwxrwxrwx 1 root root 7 Dec 17 18:09 /dev/mapper/myvg-mylv -> ../dm-0
[root@node1 ~]# ll /dev/myvg/mylv
lrwxrwxrwx 1 root root 7 Dec 17 18:09 /dev/myvg/mylv -> ../dm-0

分區、格式化:

[root@node1 ~]# mke2fs -t ext4 /dev/myvg/mylv
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=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

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@node1 ~]# mkdir /data
[root@node1 ~]# mount /dev/myvg/mylv /data
[root@node1 ~]# cd /data
[root@node1 data]# ls
lost+found
[root@node1 data]# mount
/dev/sda5 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda2 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/myvg-mylv on /data type ext4 (rw)

查看:

[root@node1 data]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao---- 2.00g                                                    
[root@node1 data]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   2   1   0 wz--n- 10.02g 8.02g

復制數據:

[root@node1 data]# cp /etc/rc.d/rc.sysinit /data
[root@node1 data]# ls
lost+found  rc.sysinit

擴展:

1、先確定擴展的目標大小,并確保對應的卷組中有足夠的空閑空間可用

2、擴展物理邊界lvextend

3、擴展邏輯邊界resize2fs

[root@node1 data]# lvextend -L 4G /dev/myvg/mylv
  Size of logical volume myvg/mylv changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume mylv successfully resized
[root@node1 data]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             108G  1.3G  101G   2% /
tmpfs                  84M     0   84M   0% /dev/shm
/dev/sda1             190M   25M  156M  14% /boot
/dev/sda2             9.5G   22M  9.0G   1% /home
/dev/mapper/myvg-mylv
                      2.0G  3.1M  1.9G   1% /data
[root@node1 data]# resize2fs /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /data; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 1048576 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1048576 blocks long.

縮減:很危險,生產環境一般不縮減,縮減不能在線縮減。

1、先確定縮減后的目標大小,并確保對應的目標邏輯卷大小中有足夠的空間可容納原所有數據

2、先卸載文件系統,并要執行強制檢測(e2fsck -f)

3、縮減邏輯邊界resize2fs device 3G

4、縮減物理邊界lvreduce

[root@node1 data]# cd
[root@node1 ~]# umount /data
[root@node1 ~]# e2fsck -f /dev/myvg/mylv 
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 12/262144 files (0.0% non-contiguous), 33875/1048576 blocks
[root@node1 ~]# resize2fs /dev/myvg/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 786432 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 786432 blocks long.

[root@node1 ~]# lvreduce -L 3G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents).
  Logical volume mylv successfully resized
[root@node1 ~]# mount /dev/myvg/mylv /data
[root@node1 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             108G  1.3G  101G   2% /
tmpfs                  84M     0   84M   0% /dev/shm
/dev/sda1             190M   25M  156M  14% /boot
/dev/sda2             9.5G   22M  9.0G   1% /home
/dev/mapper/myvg-mylv
                      2.9G  3.1M  2.8G   1% /data
[root@node1 ~]# cd /data
[root@node1 data]# ls
lost+found  rc.sysinit

快照卷:

一般只能讀

lvcreate:

    -L:size

    -n:name

    -s:

    -p:r

快照卷是對某邏輯卷進行的,因此必須跟目標邏輯卷在同一卷組中,所以無須指明卷組

注意:確保創建時,原卷沒有修改

[root@node1 data]# mount -o remount,ro /dev/myvg/mylv /data
[root@node1 data]# lvcreate -L 512M -n mylv-snap -p r -s /dev/myvg/mylv 
 Logical volume "mylv-snap" created
[root@node1 data]# mount -o remount,rw /dev/myvg/mylv /data
[root@node1 data]# mkdir /snap
[root@node1 data]# mount /dev/myvg/mylv-snap /snap
mount: block device /dev/mapper/myvg-mylv--snap is write-protected, mounting read-only

修改原卷:

[root@node1 data]# vim rc.sysinit 
[root@node1 data]# tail -5 rc.sysinit
if [ -x /bin/plymouth ]; then
    /bin/plymouth --sysinit
fi

new line

快照卷:

[root@node1 data]# cd /snap
[root@node1 snap]# ls
lost+found  rc.sysinit
[root@node1 snap]# tail -5 rc.sysinit 
# Let rhgb know that we're leaving rc.sysinit
if [ -x /bin/plymouth ]; then
    /bin/plymouth --sysinit
fi

復制文件到原卷并查看:

[root@node1 data]# cp /etc/fstab /data
[root@node1 data]# ls
fstab  lost+found  rc.sysinit

查看快照卷:

[root@node1 snap]# ls
lost+found  rc.sysinit

移除快照卷、lv、vg、pv:

[root@node1 snap]# cd
[root@node1 ~]# umount /snap
[root@node1 ~]# lvremove /dev/myvg/mylv-snap 
Do you really want to remove active logical volume mylv-snap? [y/n]: y
  Logical volume "mylv-snap" successfully removed
[root@node1 ~]# umount /data
[root@node1 ~]# lvremove myvg
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed
[root@node1 ~]# vgremove myvg
  Volume group "myvg" successfully removed
[root@node1 ~]# pvremove /dev/sdb{1,2}
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdb2" successfully wiped

做快照卷備份時,即把快照卷內的數據和原卷中的數據一起備份,然后再卸載、移除快照卷,卸載原卷并格式化它,重新掛載原卷,并還原備份。

原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/63914

(0)
黑白子黑白子
上一篇 2016-12-17
下一篇 2016-12-17

相關推薦

  • SHELL編程之數組運用及YUM軟件包管理

    SHELL編程中,當要引用到多個值的時候,一個一個地進行變量賦值會讓我們的腳本變得繁瑣,不利于代碼的優化,所以,就需要通過數組進行定義,優化代碼,減少不必要的定義和命令操作。 SHELL中的數組:存儲多個元素的連續內存空間 數組名:整個屬組只有一個名字 數組索引: 編號從0開始   數組名[索引]   ${array_name[index…

    Linux干貨 2016-08-24
  • 馬哥教育網絡班21期第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋也叫橋接器,是連接兩個局域網的一種存儲/轉發設備,用來連接不同網段。 集線器稱為“Hub”,主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。 二層交換機工作于OSI模型的第2層(數據鏈路層),可識別數據包中的MAC地址信…

    Linux干貨 2016-09-19
  • linux下繪圖工具rrdtool

    一、前言       為了做云緩存平臺的技術儲備,從零開始學習了rrdtool,rrdtool非常強大,剛接觸會有摸不著邊的感覺,尤其是一堆概念性的東西。學習的切入點便是這些概念,一一理解后你才能品嘗到rrdtool的清香,首先要感謝ailms整理的“RRDtool簡體中文教程 v1.01”,通俗易…

    Linux干貨 2015-03-27
  • netfilter/iptables 基礎入門

    netfilter/iptables 基礎入門 Firewall防火墻的實現方式 什么是netfilter?        Netfilter是由Linux內核提供的框架,允許以定制處理程序的形式實現各種與網絡相關的操作。Netfilter為包過濾,網絡地址轉換和端口轉換提供各種功能和操作,它們提供了通過網絡…

    2017-06-13
  • Linux基礎(四)——用戶管理&grep命令

    1、  復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp /etc/skel/ /home/tuser1 –r chmod -R 700 /home/tuser1/ 2、  編輯/etc/group文件,添加組hadoop。 echo "ha…

    Linux干貨 2016-11-08
  • N22-草稿

    testing

    Linux干貨 2016-08-08
欧美性久久久久