生產環境中,常常會遇到硬盤滿,這時候須要LVM格式的硬盤擴容。nginx
LVM簡介bash
LVM是邏輯盤卷管理(LogicalVolume Manager)的簡稱,它是一種磁盤管理工具,最主要的功能就是能夠隨時在線調整分區的大小,解決了安裝Linux系統時須要評估分區大小的煩惱。app
LVM相關術語ide
物理存儲介質(The physical media)工具
這裏指系統的存儲設備:硬盤,如:/dev/hda一、/dev/sda等等,是存儲系統最底層的存儲單元。ui
物理卷(physical volume)url
物理卷就是指硬盤分區或從邏輯上與磁盤分區具備一樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。spa
卷組(Volume Group)code
LVM卷組相似於非LVM系統中的物理硬盤,其由物理卷組成。能夠在卷組上建立一個或多個「LVM分區」(邏輯卷),LVM卷組由一個或多個物理卷組成。orm
邏輯卷(logical volume)
LVM的邏輯卷相似於非LVM系統中的硬盤分區,在邏輯卷之上能夠創建文件系統(好比/home或者/usr等)。
PE(physical extent)
每個物理卷被劃分爲稱爲PE(Physical Extents)的基本單元,具備惟一編號的PE是能夠被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。
LE(logical extent)
邏輯卷也被劃分爲被稱爲LE(Logical Extents) 的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,而且一一對應。
[root@localhost~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_nginx02-lv_root 45G 42G 804M 99% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 485M 39M 421M 9% /boot [root@localhost~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 50G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 49.5G 0 part ├─vg_nginx02-lv_root (dm-0) 253:0 0 45.6G 0 lvm / └─vg_nginx02-lv_swap (dm-1) 253:1 0 3.9G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk #開始擴容 [root@localhost~]# 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 0x492f8aad. 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: 21.5 GB, 21474836480 bytes 64 heads, 32 sectors/track, 20480 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x492f8aad 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-20480, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-20480, default 20480): Using default value 20480 Command (m for help): t Selected partition 1 Hex code (type L to list codes): L 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx 5 Extended 42 SFS 86 NTFS volume set da Non-FS data 6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt 9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT 1e Hidden W95 FAT1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. # 必定要指定分區的格式爲8e,這是LVM的分區格式 [root@localhost ~]# mkfs.ext4 /dev/sdb1 #建立PV [root@localhost ~]# pvcreate /dev/sdb1 #查看當前已經存在的VG信息 [root@localhost ~]# vgdisplay #提示 Physical volume "/dev/sdb1" successfully created [root@localhost ~]# vgdisplay --- Volume group --- VG Name vg_nginx02 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 49.51 GiB PE Size 4.00 MiB Total PE 12674 Alloc PE / Size 12674 / 49.51 GiB Free PE / Size 0 / 0 VG UUID WvYqDf-3IW9-FtBO-cs0y-jYZv-Xj2x-ntX9OP [root@localhost ~]# vgextend vg_nginx02 /dev/sdb1 Volume group "VolGroup"successfully extended [root@localhost~]# lvextend -L +19.9G /dev/mapper/vg_nginx02-lv_root Rounding size to boundary between physical extents: 19.90 GiB Extending logical volume lv_root to 65.54 GiB Logical volume lv_root successfully resized [root@localhost~]# resize2fs /dev/mapper/vg_nginx02-lv_root resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg_nginx02-lv_root is mounted on /; on-line resizing required old desc_blocks = 3, new_desc_blocks = 5 Performing an on-line resize of /dev/mapper/vg_nginx02-lv_root to 17179648 (4k) blocks. The filesystem on /dev/mapper/vg_nginx02-lv_root is now 17179648 blocks long. 若不是xfs咱們能夠用resize2fs,這裏報錯了 [root@localhost~]# resize2fs -f /dev/mapper/vg_nginx02-lv_root resize2fs 1.41.12 (17-May-2010) resize2fs: Bad magic number in super-block while trying to open /dev/mapper/vg_nginx02-lv_root Couldn't find valid filesystem superblock. [root@localhost~]# xfs_growfs /dev/mapper/vg_nginx02-lv_root [root@localhost~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_nginx02-lv_root 65G 42G 20G 69% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 485M 39M 421M 9% /boot