1. 程式人生 > >Linux系統LVM邏輯卷建立過程以及自動化指令碼

Linux系統LVM邏輯卷建立過程以及自動化指令碼

最近在上海新建機房的時候,給了我 2 臺 M2 機型伺服器,在做初始化的時候發現有一堆磁碟:

12345678910111213 [root@Centos64:~]# fdisk -l | grep '300.1 GB' | sortDisk/dev/sda:300.1GB,300069052416bytesDisk/dev/sdb:300.1GB,300069052416bytesDisk/dev/sdc:300.1GB,300069052416bytesDisk/dev/sdd:300.1GB,300069052416bytesDisk/dev/sde:300.1GB,300069052416bytesDisk/dev/sdf:300.1GB,300069052416bytesDisk/dev/sdg
:300.1GB,300069052416bytesDisk/dev/sdh:300.1GB,300069052416bytesDisk/dev/sdi:300.1GB,300069052416bytesDisk/dev/sdj:300.1GB,300069052416bytesDisk/dev/sdk:300.1GB,300069052416bytesDisk/dev/sdl:300.1GB,300069052416bytes

其中掛載的只有 /dev/sda,其他都在那閒著。運管那邊告訴我這個機型不能做 raid。而根據我這邊的業務需求,我並不能一次用到這麼多分割槽,所以必須使用 LVM 合併使用。

關於 LVM 的建立,目前網路上一堆詳細教程,用起來也非常簡單,這裡就只貼一下我的過程。

①、用 fdisk 給每一個磁碟建立一個 8e 分割槽:

1234567891011121314151617181920212223242526 [root@Centos64:~]# fdisk /dev/sdbThe device presentsalogical sector size that issmaller thanthe physical sector size.Aligning toaphysical sector(oroptimalI/O)size boundary isrecommended,orperformance may be impacted.WARNING:DOS-compatible mode isdeprecated.It's strongly recommended to         switch off the mode (command 'c') and change display units to         sectors (command 'u').Command(mforhelp):n#建立Command actioneextendedpprimary partition(1-4)p#選擇主分割槽Partition number(1-4):1First cylinder(1-36481,default1):1Last cylinder,+cylindersor+size{K,M,G}(1-36481,default36481):#直接回車選擇最大Using defaultvalue36481Command(mforhelp):t#輸入t進入型別選擇Selected partition1Hex code(typeLtolist codes):8e#輸入8e格式Changed system type of partition1to8e(Linux LVM)Command(mforhelp):w#w儲存

這樣就完成了一塊磁碟,接著我們依次將其他 sdc 到 sdl 的磁碟也操作一把。

②、全部完成後,使用 pvcreate 將所有分割槽轉化成物理卷,即新增 LVM 屬性資訊並劃分 PE 儲存單元:

12345678910111213 [root@Centos64:~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1Physical volume"/dev/sdb1"successfully createdPhysical volume"/dev/sdc1"successfully createdPhysical volume"/dev/sdd1"successfully createdPhysical volume"/dev/sde1"successfully createdPhysical volume"/dev/sdf1"successfully createdPhysical volume"/dev/sdg1"successfully createdPhysical volume"/dev/sdh1"successfully createdPhysical volume"/dev/sdi1"successfully createdPhysical volume"/dev/sdj1"successfully createdPhysical volume"/dev/sdk1"successfully createdPhysical volume"/dev/sdl1"successfully created

建立完 PV 之後,就可以使用 pvdisplay 或 pvs 檢視詳細資訊了,篇幅有限,這裡我就不貼了。

③、下面我們需要建立一個 VG,然後 PV 都加入到這個卷組當中,卷名可自定義,比如 vg:

123 [root@Centos64:~]# vgcreate vg /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1Volume group"vg"successfully created

同樣,在建立好 VG 以後,我們也可以使用 vgdisplay 或者 vgs 命來來檢視 VG 的資訊(略)

④、接著,使用 lvcreate 命令基於 VG 建立邏輯卷,vg 和 lvm 我們自定義的名稱:

123 [root@Centos64:~]# lvcreate -l 100%VG -n lvm vgLogical volume"lvm"created

同樣我們可以使用 lvdisplay 或者 lvs 命令來檢視建立好的邏輯卷的資訊(略)

⑤、格式化建立的邏輯卷:

1 [root@Centos64:~]# mkfs.ext4 /dev/vg/lvm

⑥、掛載分割槽:

12345678910 [root@Centos64:~]# mkdir /data[root@Centos64:~]# echo '/dev/vg/lvm  /data  ext4 noatime,acl,user_xattr  1 2' >> /dev/fstab[root@Centos64:~]# mount -a[root@Centos64:~]# df -hFilesystem            Size  Used Avail Use%Mounted on/dev/sda19.9G2.1G7.4G22%//dev/sda320G370M19G2%/usr/localtmpfs16G016G0%/dev/shm/dev/sda4244G205M232G1%/data1/dev/mapper/vg-lvm3.1T932M3.0T1%/data

這樣,我們就完成了 LVM 的手工建立過程了,我還有一臺 M2 要弄,而且聽運管說以後會繼續交付這類機型,我可不想這麼苦逼的操作了,光那個建立 8e 格式分割槽就已經很坑了。

所以,就將上面的操作串成指令碼,一鍵完成:

Shell
12345678910111213141516171819202122232425262728293031 #!/bin/bashpartition=/data# 定義最終掛載的名稱vgname=vg# 定義邏輯卷組的名稱lvname=lvm# 定義邏輯卷的名稱code='b c d e f g h i k j l'# 根據分割槽的實際情況修改disk=foriin$codedofdisk/dev/sd$i<<EOF# 這裡自動化完成了所有分割槽fdisk苦逼的互動步驟np11t8ewEOFdisk="$disk /dev/sd${i}1"# 將所有分割槽拼起來donepvcreate$diskvgcreate$vgname$disklvcreate-l100%VG-n$lvmname$vgnamemkfs.ext4/dev/$vgname/$lvmnamemkdir-p$partitionecho"/dev/$vgname/$lvmname$partitionext4 noatime,acl,user_xattr12'>>/dev/fstabmount-adf-h

哦了,就寫這麼多,以備後用。