LVM是Linux操做系統的邏輯卷管理器。 如今有兩個Linux版本的LVM,分別是 LVM1,LVM2。LVM1是一種已經被認爲穩定了幾年的成熟產品,LVM2 是最新最好的LVM版本。 LVM2幾乎徹底向後兼容使用LVM1建立的卷。此例外是快照(在升級到LVM 2以前,必須刪除快照卷)。html
邏輯卷管理提供了比傳統的磁盤和分區視圖更高級別的計算機系統上磁盤存儲的視圖。 這使得系統管理員能夠更靈活地將存儲分配給應用程序和用戶。node
在邏輯卷管理器的控制下建立的存儲卷能夠隨意調整大小和移動,儘管這可能須要對文件系統工具進行一些升級。linux
邏輯卷管理器還容許管理用戶定義組中的存儲卷,容許系統管理員處理明顯命名的卷組(如「development」和「sales」),而不是物理磁盤名稱,例如「sda」和「sdb」git
卷組是LVM中使用的最高級別的抽象。 它將邏輯卷和物理卷集合在一塊兒成爲一個管理單元。github
一個物理卷一般是一個硬盤,雖然它可能只是一個看起來像一個硬盤(如軟件RAID設備)的設備。vim
至關於非LVM系統中的磁盤分區。 LV做爲標準塊設備可見; 所以LV能夠包含文件系統(例如/ home)。centos
每一個物理卷都被劃分爲數據塊(稱爲物理擴展盤區),這些擴展盤區與卷組的邏輯盤區具備相同的大小。bash
每一個邏輯卷都被分割成數據塊,稱爲邏輯盤區。 卷組中的全部邏輯卷的區段大小都是相同的。app
一個具體的例子將有助於:ide
假設咱們有一個名爲VG1的卷組,這個卷組的物理盤區大小爲4MB。 在這個卷組中,咱們引入了2個硬盤分區/dev/hda1和/dev/hdb1。
這些分區將成爲物理卷PV1和PV2(管理員能夠自行決定是否提供更有意義的名稱)。
PV被分紅4MB塊,由於這是卷組的大小。磁盤大小不一樣,咱們在PV1中得到99個擴展盤區,在PV2中得到248個擴展盤區。
咱們如今能夠建立本身的邏輯卷,它能夠是1到347(248 + 99)範圍之間的任何大小。
當建立邏輯卷時,在邏輯盤區和物理盤區之間定義映射,例如, 邏輯盤區1能夠映射到PV1的物理盤區51上,寫入邏輯盤的第一個4MB的數據實際上被寫入到PV1的第51盤區。
線性映射 : 將分配必定範圍的PE到LV的一個區域,例如LE 1 - 99映射到PV1,LE 100 - 347映射到PV2。
分條映射 : 將跨多個物理卷交織邏輯盤區的塊,這個方式必定程度上提升了性能,具體以下
1st chunk of LE[1] -> PV1[1], #第一個邏輯塊在PV1設備上, 第二個在PV2設備上,等等。
2nd chunk of LE[1] -> PV2[1],
3rd chunk of LE[1] -> PV3[1],
4th chunk of LE[1] -> PV1[2],
這是LVM提供的一個很是棒的功能就是快照了,他容許管理員建立一個新的塊設備來呈現一個邏輯卷的的精確副本,在某個時間凍結,管理員能夠及時備份指定一致狀態下的數據,備份完畢就能夠刪除設備了。
快照最初包含有關快照的一些元數據,但沒有來自源邏輯卷的實際數據。快照使用寫時複製(copy on write)技術來檢測數據在原始數據塊中什麼時候更改。它將拍攝快照時保存的值複製到快照卷中的塊中,而後容許將新數據存儲在源塊中。
隨着更多塊從源邏輯捲上的原始值發生更改,快照大小也會增長。若是快照卷變滿,它將被丟棄,因此分配足夠的空間是很是重要的,具體取決於你數據的變換狀況,若是快照大小和原始數據同樣大,它將永遠不會溢出的。
[root@centos7 ~]$ rpm -q lvm2 # 查看lvm2是否安裝了, 我使用的centos7,這是安裝的了 lvm2-2.02.171-8.el7.x86_64 [root@centos7 ~]$ # yum -y install lvm2 # 沒有安裝的話使用yum安裝
[root@centos7 ~]$ pv # 使用tab按鍵獲取pv相關命令 pvchange pvck pvcreate pvdisplay pvmove pvremove pvresize pvs pvscan [root@centos7 ~]$ vg # 使用tabl按鍵獲取vg相關的命令 vgcfgbackup vgck vgdisplay vgimport vgmknodes vgrename vgsplit vgcfgrestore vgconvert vgexport vgimportclone vgreduce vgs vgchange vgcreate vgextend vgmerge vgremove vgscan [root@centos7 ~]$ lv # 使用tabl按鍵獲取lv先關的命令 lvchange lvdisplay lvmconf lvmdump lvmsadc lvremove lvs lvconvert lvextend lvmconfig lvmetad lvmsar lvrename lvscan lvcreate lvm lvmdiskscan lvmpolld lvreduce lvresize
上面的命令比較多,簡單介紹幾個經常使用的命令。
pv做用:初始化磁盤和磁盤分區
在將磁盤或者磁盤分區用做物理卷(PV)以前,你須要對其進行初始化工做。
[root@centos7 ~]$ pvcreate /dev/sdb1
注意:
分區並設置分區類型
[root@centos7 ~]$ fdisk -l Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000b0b8a Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 270534655 134217728 83 Linux /dev/sda3 270534656 372934655 51200000 83 Linux /dev/sda4 372934656 419430399 23247872 5 Extended /dev/sda5 372938752 413898751 20480000 83 Linux Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x93d380cf Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM /dev/sdb2 2099200 4196351 1048576 8e Linux LVM Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x73afb36f Device Boot Start End Blocks Id System /dev/sde1 2048 2099199 1048576 8e Linux LVM /dev/sde2 2099200 6293503 2097152 8e Linux LVM Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x7e0900d8 Device Boot Start End Blocks Id System /dev/sdd1 2048 2099199 1048576 8e Linux LVM /dev/sdd2 2099200 12584959 5242880 8e Linux LVM Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xc56b90d8 Device Boot Start End Blocks Id System /dev/sdc1 2048 2099199 1048576 8e Linux LVM /dev/sdc2 2099200 4196351 1048576 8e Linux LVM Disk /dev/sdf: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes [root@centos7 ~]$ partprobe Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. [root@centos7 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 128G 0 part ├─sda3 8:3 0 48.8G 0 part / ├─sda4 8:4 0 512B 0 part └─sda5 8:5 0 19.5G 0 part /app sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1G 0 part └─sdb2 8:18 0 1G 0 part sdc 8:32 0 20G 0 disk ├─sdc1 8:33 0 1G 0 part └─sdc2 8:34 0 1G 0 part sdd 8:48 0 20G 0 disk ├─sdd1 8:49 0 1G 0 part └─sdd2 8:50 0 5G 0 part sde 8:64 0 20G 0 disk ├─sde1 8:65 0 1G 0 part └─sde2 8:66 0 2G 0 part sdf 8:80 0 20G 0 disk sr0 11:0 1 8.1G 0 rom /run/media/root/CentOS 7 x86_64
上面咱們在/dev/sd{b,c,d,e}這4個盤每一個都有2個類型爲lvm的盤。接下來使用pvcreat初始化爲物理卷
[root@centos7 ~]$ pvcreate /dev/sd{b1,b2,c1,c2,d1,d2,e1,e2} -y # 這裏加入了-y選項,以前的盤有文件系統的。 我這裏強制建立了 Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Wiping xfs_external_log signature on /dev/sdb2. Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdb2" successfully created. Physical volume "/dev/sdc1" successfully created. Physical volume "/dev/sdc2" successfully created. Physical volume "/dev/sdd1" successfully created. Physical volume "/dev/sdd2" successfully created. Physical volume "/dev/sde1" successfully created. Physical volume "/dev/sde2" successfully created.
[root@centos7 ~]$ pvs # 詳細信息可使用pvdisplay查看 PV VG Fmt Attr PSize PFree /dev/sdb1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sdb2 lvm2 --- 1.00g 1.00g /dev/sdc1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sdc2 lvm2 --- 1.00g 1.00g /dev/sdd1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sdd2 lvm2 --- 5.00g 5.00g /dev/sde1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sde2 lvm2 --- 2.00g 2.00g
vg的建立是比較簡單的。
[root@centos7 ~]$ vgcreate vg_test_01 /dev/sd{b1,c1,d1,e1} # 上面咱們建立了8個pv,這裏咱們使用4個1的設備去建立vg,建立後默認vg是激活狀態的 Volume group "vg_test_01" successfully created
[root@centos7 ~]$ vgs # 查看簡短的信息 VG #PV #LV #SN Attr VSize VFree vg_test_01 4 0 0 wz--n- 3.98g 3.98g [root@centos7 ~]$ vgdisplay # 查看詳細的信息 --- Volume group --- VG Name vg_test_01 # vg的名字 System ID Format lvm2 # lvm格式, 這裏是lvm2的 Metadata Areas 4 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 4 Act PV 4 VG Size 3.98 GiB # 這是咱們4個pv的總大小 PE Size 4.00 MiB # pe的大小 Total PE 1020 Alloc PE / Size 0 / 0 # 分配的大小,這裏咱們尚未建立lv,因此爲0 Free PE / Size 1020 / 3.98 GiB # 分配後剩餘的空間,第一個數是剩餘的個數,第二個數是剩餘的空間大小,2個都是剩餘的只是單位表示不同而已 VG UUID Y5NjjP-e3Aq-3u6E-gw6P-fLyy-Y5pN-ryyN9R # vg設備的uuid
[root@centos7 ~]$ vgchange -a y vg_test_01 # 咱們上面就是激活狀態的,若是咱們重啓系統,或者vgchange -y n命令關閉了,就須要這個命令啓動下 0 logical volume(s) in volume group "vg_test_01" now active
[root@centos7 ~]$ vgchange -a n vg_test_01 # 要想移除vg,須要先關閉vg才能移除,這裏先關閉 0 logical volume(s) in volume group "vg_test_01" now active [root@centos7 ~]$ vgremove vg_test_01 # 移除vg,
[root@centos7 ~]$ vgcreate vg_test_01 /dev/sd{b1,c1,d1,e1} # 上面我把vg刪了,這裏從新添加進來 Volume group "vg_test_01" successfully created [root@centos7 ~]$ vgextend vg_test_01 /dev/sdb2 # 添加一個pv2到vg中來 Volume group "vg_test_01" successfully extended
這個操做須要使用vgdisplay查看vg的使用狀況和刪除的pv上沒有數據。若是有使用pvmove遷移完畢數據才能移除。
[root@centos7 ~]$ vgreduce vg_test_01 /dev/sdb2 Removed "/dev/sdb2" from volume group "vg_test_01"
[root@centos7 ~]$ vgdisplay # lv邏輯卷建立以前, 須要查看下vg信息 --- Volume group --- VG Name vg_test_01 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 3.98 GiB PE Size 4.00 MiB Total PE 1020 Alloc PE / Size 0 / 0 Free PE / Size 1020 / 3.98 GiB VG UUID sZwHea-LabA-SJaV-Wz40-qFp3-Um2w-pvmJAY [root@centos7 ~]$ lvcreate -L 2G -n lv_test_01 vg_test_01 # 咱們的vg是近4G的,我這裏建立一個2G的lv,以前磁盤使用了文件系統慈愛有以下警告。輸入y便可。 WARNING: linux_raid_member signature detected on /dev/vg_test_01/lv_test_01 at offset 4096. Wipe it? [y/n]: y Wiping linux_raid_member signature on /dev/vg_test_01/lv_test_01. WARNING: ext4 signature detected on /dev/vg_test_01/lv_test_01 at offset 1080. Wipe it? [y/n]: y Wiping ext4 signature on /dev/vg_test_01/lv_test_01. Logical volume "lv_test_01" created.
[root@centos7 ~]$ lvremove /dev/vg_test_01/lv_test_01 # 這個移除咱們上面建立lv_test_01這個邏輯卷, 下面提示這個是活動的邏輯卷,輸入y就能夠了 Do you really want to remove active logical volume vg_test_01/lv_test_01? [y/n]: y Logical volume "lv_test_01" successfully removed
注意: 若是這個lv被掛載了。 請先umount
[root@centos7 ~]$ lvcreate -L 2G -n lv_test_01 vg_test_01 # 上面咱們刪除了lv,這裏須要建立出來 Logical volume "lv_test_01" created. [root@centos7 ~]$ mkfs.ext4 /dev/vg_test_01/lv_test_01 # 這裏我使用ext4 文件系統了。centos7默認使用的文件系統是xfs,可是xfs不支持縮減的 [root@centos7 ~]$ mkdir /mnt/test_01 # 建立掛載點目錄 [root@centos7 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/test_01/ # 掛載邏輯卷
上面咱們的測試是vg是4G,咱們的建立的lv是2G的,咱們想給建立的lv擴展1G空間。
[root@centos7 ~]$ lvextend -L +1G /dev/vg_test_01/lv_test_01 # 咱們擴大1G, +1G表示在原有基礎上擴大1G,咱們這裏是有vg是有空間的,沒有的話就須要建立pv,擴大vg在作 Size of logical volume vg_test_01/lv_test_01 changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents). Logical volume vg_test_01/lv_test_01 successfully resized. [root@centos7 ~]$ df -h # 上面的命令提示lv已經到3G了, 可是使用df-h 查看仍是2g Filesystem Size Used Avail Use% Mounted on /dev/sda3 48G 4.9G 41G 11% / devtmpfs 979M 4.0K 979M 1% /dev tmpfs 993M 0 993M 0% /dev/shm tmpfs 993M 22M 971M 3% /run tmpfs 993M 0 993M 0% /sys/fs/cgroup /dev/sda1 976M 130M 780M 15% /boot /dev/sda5 20G 307M 18G 2% /app tmpfs 199M 32K 199M 1% /run/user/0 /dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg_test_01-lv_test_01 2.0G 33M 2.0G 2% /mnt/test_01 [root@centos7 ~]$ resize2fs /dev/mapper/vg_test_01-lv_test_01 # 須要增加下文件系統的,讓文件系統和lv大小匹配下 meta-data=/dev/mapper/vg_test_01-lv_test_01 isize=512 agcount=4, agsize=131072 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=524288, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 524288 to 786432 [root@centos7 ~]$ df -h # 再次查看就是一致的了 Filesystem Size Used Avail Use% Mounted on /dev/sda3 48G 4.9G 41G 11% / devtmpfs 979M 4.0K 979M 1% /dev tmpfs 993M 0 993M 0% /dev/shm tmpfs 993M 22M 971M 3% /run tmpfs 993M 0 993M 0% /sys/fs/cgroup /dev/sda1 976M 130M 780M 15% /boot /dev/sda5 20G 307M 18G 2% /app tmpfs 199M 32K 199M 1% /run/user/0 /dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg_test_01-lv_test_01 3.0G 33M 3.0G 2% /mnt/test_01
注意:
邏輯卷的大小能夠減少,也能夠增長。 可是,在縮小卷自己以前,請記住縮小文件系統的大小或存在於卷中的任何文件是很是重要的,不然可能會丟失數據。
注意: xfs,jsf文件系統是無法縮減lvm的,由於這2個文件系統無法縮減文件系統大小的。參考http://tldp.org/HOWTO/LVM-HOWTO/reducelv.html
主要步驟:
上面咱們的邏輯卷是3G的大小,在縮減以前咱們須要確保縮減的空間不能影響數據的存放的。
檢查工做
[root@centos7 ~]$ cp -a /etc/ /mnt/test_01/ # 我這裏模擬下,只能目錄有文件的狀況 [root@centos7 ~]$ du -sh /mnt/test_01/ # 查看下大小 42M /mnt/test_01/ [root@centos7 ~]$ df -h # 查看邏輯卷分區利用狀況 ,數據才存放76M,咱們的邏輯卷都3G呢, 若是咱們想縮減1G,徹底沒有問題的。 Filesystem Size Used Avail Use% Mounted on /dev/sda3 48G 4.9G 41G 11% / devtmpfs 979M 4.0K 979M 1% /dev tmpfs 993M 0 993M 0% /dev/shm tmpfs 993M 22M 971M 3% /run tmpfs 993M 0 993M 0% /sys/fs/cgroup /dev/sda1 976M 130M 780M 15% /boot /dev/sda5 20G 307M 18G 2% /app tmpfs 199M 32K 199M 1% /run/user/0 /dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg_test_01-lv_test_01 3.0G 76M 3.0G 3% /mnt/test_01
縮減空間
[root@centos7 ~]$ umount /dev/vg_test_01/lv_test_01 # 取消掛載 [root@centos7 ~]$ resize2fs /dev/vg_test_01/lv_test_01 1G # resieze2fs定義下文件系統大小 resize2fs 1.42.9 (28-Dec-2013) Please run 'e2fsck -f /dev/vg_test_01/lv_test_01' first. [root@centos7 ~]$ e2fsck -f /dev/vg_test_01/lv_test_01 #上面的命令要檢查,那就檢查下 e2fsck 1.42.9 (28-Dec-2013) 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/vg_test_01/lv_test_01: 3614/196608 files (0.1% non-contiguous), 42361/786432 blocks [root@centos7 ~]$ resize2fs /dev/vg_test_01/lv_test_01 1G # 檢查完,那就執行縮減文件系統大小 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg_test_01/lv_test_01 to 262144 (4k) blocks. The filesystem on /dev/vg_test_01/lv_test_01 is now 262144 blocks long. [root@centos7 ~]$ lvreduce -L 1G /dev/vg_test_01/lv_test_01 # 縮減下邏輯捲到1G,這裏有提示,縮減可能會丟失數據,輸入y便可 WARNING: Reducing active logical volume to 1.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg_test_01/lv_test_01? [y/n]: yG Size of logical volume vg_test_01/lv_test_01 changed from 3.00 GiB (768 extents) to 1.00 GiB (256 extents). Logical volume vg_test_01/lv_test_01 successfully resized. [root@centos7 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/test_01/ # 恢復掛載 [root@centos7 ~]$ ll /mnt/test_01/ total 28 drwxr-xr-x. 140 root root 12288 Dec 7 13:54 etc drwx------. 2 root root 16384 Dec 7 15:47 lost+found [root@centos7 ~]$ df -h # 檢查下 Filesystem Size Used Avail Use% Mounted on /dev/sda3 48G 4.9G 41G 11% / devtmpfs 979M 4.0K 979M 1% /dev tmpfs 993M 0 993M 0% /dev/shm tmpfs 993M 22M 971M 3% /run tmpfs 993M 0 993M 0% /sys/fs/cgroup /dev/sda1 976M 130M 780M 15% /boot /dev/sda5 20G 307M 18G 2% /app tmpfs 199M 32K 199M 1% /run/user/0 /dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64 /dev/mapper/vg_test_01-lv_test_01 944M 52M 825M 6% /mnt/test_01
移動vg到另一個機器上
主要步驟:
檢查分析
[root@centos7 ~]$ vgs VG #PV #LV #SN Attr VSize VFree vg_test_01 4 1 0 wz--n- 3.98g 2.98g [root@centos7 ~]$ pvs l PV VG Fmt Attr PSize PFree /dev/sdb1 vg_test_01 lvm2 a-- 1020.00m 0 /dev/sdb2 lvm2 --- 1.00g 1.00g /dev/sdc1 vg_test_01 lvm2 a-- 1020.00m 1016.00m /dev/sdc2 lvm2 --- 1.00g 1.00g /dev/sdd1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sdd2 lvm2 --- 5.00g 5.00g /dev/sde1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sde2 lvm2 --- 2.00g 2.00g [root@centos7 ~]$ lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_test_01 vg_test_01 -wi-ao---- 1.00g
咱們使用lvs,vgs,pvs分別查看信息。發現咱們vg是3G的大小。lv是1G的大小。可是vg的pv來自不一樣的磁盤的。咱們要遷移vg。不能把包含pv都遷移過去把。 那這一會兒須要4個盤的。
咱們把pv數據遷移下,到時候摘盤的時候只那一個就能夠多好。 發現/dev/sdd2是一個5G的盤。 打算使用/dev/sdd這個盤做爲遷移盤來遷移數據。
一些預處理工做
[root@centos7 ~]$ umount /mnt/test_01/ # 去除掛載
[root@centos7 ~]$ vgchange -an vg_test_01 # 設置vg不激活 0 logical volume(s) in volume group "vg_test_01" now active
[root@centos7 ~]$ pvmove /dev/sd{b1,c1,e1} # 遷移pv數據 /dev/sdb1: Moved: 0.00% /dev/sdb1: Moved: 100.00% [root@centos7 ~]$ pvs # 確保pv都是空的,沒有數據存放了。 PV VG Fmt Attr PSize PFree /dev/sdb1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sdb2 lvm2 --- 1.00g 1.00g /dev/sdc1 vg_test_01 lvm2 a-- 1020.00m 1016.00m /dev/sdc2 lvm2 --- 1.00g 1.00g /dev/sdd1 vg_test_01 lvm2 a-- 1020.00m 0 /dev/sdd2 vg_test_01 lvm2 a-- <5.00g <5.00g /dev/sde1 vg_test_01 lvm2 a-- 1020.00m 1020.00m /dev/sde2 lvm2 --- 2.00g 2.00g [root@centos7 ~]$ vgreduce vg_test_01 /dev/sd{b1,c1,e1} # 縮減vg 去除b1,c1,e1 Removed "/dev/sdb1" from volume group "vg_test_01" Removed "/dev/sdc1" from volume group "vg_test_01" Removed "/dev/sde1" from volume group "vg_test_01" [root@centos7 ~]$ pvremove /dev/sd{b1,c1,e1} # 移除pv,這裏提示, Lables on physical volume "/dev/sdb1" sucdessfully wiped. Labels on physical volume "/dev/sdc1" successfully wiped. Labels on physical volume "/dev/sde1" successfully wiped.
導出vg
[root@centos7 ~]$ vgdisplay # 導出前的確認 --- Volume group --- VG Name vg_test_01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 24 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 5.99 GiB PE Size 4.00 MiB Total PE 1534 Alloc PE / Size 256 / 1.00 GiB Free PE / Size 1278 / 4.99 GiB VG UUID sZwHea-LabA-SJaV-Wz40-qFp3-Um2w-pvmJAY [root@centos7 ~]$ vgexport vg_test_01 # 導出vg發現有激活的設備,須要關閉 Volume group "vg_test_01" has active logical volumes [root@centos7 ~]$ vgchange -an vg_test_01 # 設置爲非激活 0 logical volume(s) in volume group "vg_test_01" now active [root@centos7 ~]$ vgexport vg_test_01 # 導出, 要看到成功導出才能夠,這裏注意了, 若是這個vg名字和目標機器有重名的話, 這裏使用rename改下在導出 Volume group "vg_test_01" successfully exported [root@centos7 ~]$ sync # 多執行幾回sync。 防止內存和磁盤沒有同步的問題。 [root@centos7 ~]$ sync [root@centos7 ~]$ sync [root@centos7 ~]$ sync
我這裏把這個磁盤取出來安裝到另一個機器上面。下面的一部分操做在新機器上執行。注意啦。
識別硬件
[root@centos6 ~]$ /git/Bash/other/scan_scsi_device.sh # 執行下掃描硬件腳本,我本身寫的,後面把這個bash腳本貼出來 start scan /sys/devices/pci0000:00/0000:00:07.1/host0/scsi_host/host0/scan scan finished. /sys/devices/pci0000:00/0000:00:07.1/host1/scsi_host/host1/scan scan finished. /sys/devices/pci0000:00/0000:00:10.0/host2/scsi_host/host2/scan scan finished. end scan please use lsblk check [root@centos6 ~]$ lsblk # 使用lsblk查看,能夠發現,識別出來就是那個/dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 3.7G 0 rom /media/CentOS_6.9_Final sr1 11:1 1 8.1G 0 rom /media/CentOS 7 x86_64 sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 48.8G 0 part / ├─sda3 8:3 0 19.5G 0 part /app ├─sda5 8:5 0 2G 0 part [SWAP] ├─sda4 8:4 0 2M 0 part └─sda6 8:6 0 1G 0 part sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1G 0 part ├─sdb2 8:18 0 20G 0 part ├─sdb3 8:19 0 1G 0 part ├─sdb4 8:20 0 1K 0 part ├─sdb5 8:21 0 20G 0 part ├─sdb6 8:22 0 1G 0 part └─sdb7 8:23 0 1G 0 part sr2 11:2 1 3.7G 0 rom /media/CentOS_6.9_Final_ sr3 11:3 1 2G 0 rom /media/CentOS_6.9_Final__ sdc 8:32 0 20G 0 disk ├─sdc1 8:33 0 1G 0 part └─sdc2 8:34 0 5G 0 part
腳本內容以下
[root@centos6 ~]$ cat /git/Bash/other/scan_scsi_device.sh #!/bin/bash #================================================ #FileName :scan_scsi_device #Author :zhaojiedi #Description:若是你添加了一個新的硬盤設備, 可是沒有被系統識別,使用以下腳本能夠識別出來, #DateTime :2017-11-30 18:03:27 #Version :V1.0 #Other :最新版本建議從這裏獲取https://github.com/zhaojiedi1992/Bash #================================================ #!/bin/bash echo "start scan" for i in `find /sys/devices/ -name scan`; do echo "- - -" > $i echo $i scan finished. done echo "end scan" echo -e "\033[32mplease use lsblk check\033[0m"
導入並掛載
[root@centos6 ~]$ vgscan # vg掃描 Reading all physical volumes. This may take a while... Found exported volume group "vg_test_01" using metadata type lvm2 [root@centos6 ~]$ pvscan # pv掃描 PV /dev/sdc1 is in exported VG vg_test_01 [1020.00 MiB / 0 free] PV /dev/sdc2 is in exported VG vg_test_01 [5.00 GiB / 4.99 GiB free] Total: 2 [5.99 GiB] / in use: 2 [5.99 GiB] / in no VG: 0 [0 ] [root@centos6 ~]$ vgimport vg_test_01 # 確認無錯誤的就導入。 Volume group "vg_test_01" successfully imported [root@centos6 ~]$ vgs # 查看下vg信息 VG #PV #LV #SN Attr VSize VFree vg_test_01 2 1 0 wz--n- 5.99g 4.99g [root@centos6 ~]$ vgchange -ay vg_test_01 # 激活vg 1 logical volume(s) in volume group "vg_test_01" now active [root@centos6 ~]$ mkdir /mnt/new_test # 建立掛載點 [root@centos6 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/new_test/ # 掛載 [root@centos6 ~]$ du -sh /mnt/new_test/ # 確認文件沒有丟失 45M /mnt/new_test/
分析下當前環境,我把vg移動到centos6上了。一下操做在centos6上執行的。
[root@centos6 ~]$ vgs # 查看下vg信息, 一共6G,還有5G呢。 VG #PV #LV #SN Attr VSize VFree vg_test_01 2 1 0 wz--n- 5.99g 4.99g [root@centos6 ~]$ pvs # 有2個pv PV VG Fmt Attr PSize PFree /dev/sdc1 vg_test_01 lvm2 a--u 1020.00m 0 /dev/sdc2 vg_test_01 lvm2 a--u 5.00g 4.99g
咱們剛纔給/mnt/new_test目錄掛載邏輯卷vg_test_01。假如咱們的/mnt/new_test的內容一直在變化。想去備份數據就須要快照捲了。
建立快照
[root@centos6 etc]$ lvcreate -L 500M -s -p r -n vg_test_01_snapshot /dev/vg_test_01/lv_test_01 # -L指定大小, -s 表示建立快照而不是普通邏輯卷,-p r 指定權限爲只讀的, -n指定名字 Logical volume "vg_test_01_snapshot" created.
注意: 若是使用的xfs文件系統, 掛載的時候須要加入nouuid,ro選項,且建立快照的時候不能指定-p r選項。具體參考: http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html
模擬一些數據修改操做
[root@centos6 etc]$ echo "zhaojiedi1992" >>/mnt/new_test/zhaojiedi1992.txt # 製做一些修改狀況 [root@centos6 etc]$ vim /mnt/new_test/etc/motd
監控快照狀況
[root@centos6 ~]$ lvdisplay /dev/vg_test_01/vg_test_01_snapshot --- Logical volume --- LV Path /dev/vg_test_01/vg_test_01_snapshot LV Name vg_test_01_snapshot VG Name vg_test_01 LV UUID pZ8x2u-lqPA-uLef-P816-dS8V-wZ0y-PKWWwL LV Write Access read only #只讀的 LV Creation host, time centos6.magedu.com, 2017-12-02 06:11:56 +0800 LV snapshot status active destination for lv_test_01 # 這是lv_test_01的快照 LV Status available # open 0 LV Size 1.00 GiB # 快照的總大小 Current LE 256 COW-table size 500.00 MiB COW-table LE 125 Allocated to snapshot 0.01% # 這個地方能夠看當前快照佔用狀況。 Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3
掛載快照並備份
[root@centos6 etc]$ mkdir /mnt/test_bak # 建立一個快照掛載目錄 [root@centos6 etc]$ mount /dev/vg_test_01/vg_test_01_snapshot /mnt/test_bak/ # 掛載,由於咱們上面建立快照的時候指定-pr只讀的 mount: block device /dev/mapper/vg_test_01-vg_test_01_snapshot is write-protected, mounting read-only [root@centos6 etc]$ cat /mnt/test_bak/ # 快照後的zhaojiedi1992.txt沒有的。 etc/ lost+found/ [root@centos6 etc]$ cat /mnt/test_bak/etc/motd # 這個地方的文件也是快照前的樣子。沒有問題 Welcom you this system [root@centos6 etc]$ tar -jcvf /root/test.tar.bz --acl --selinux --xattrs /mnt/test_bak/ # 備份數據趕忙的
移除快照
[root@centos6 etc]$ umount /mnt/test_bak/ # 取消掛載 [root@centos6 etc]$ lvremove /dev/vg_test_01/vg_test_01_snapshot # 移除了快照卷 Do you really want to remove active logical volume vg_test_01_snapshot? [y/n]: y Logical volume "vg_test_01_snapshot" successfully removed
suse : https://www.suse.com/documentation/sles11/stor_admin/data/lvm.html
lvm how to : http://tldp.org/HOWTO/LVM-HOWTO/index.html