CentOS7 磁盘空间以及文件系统扩容

技术分享 157℃

1、PV VG LV概念

PV,VG,LV构成了一种易于管理拥有一个或多个硬盘的主机的文件系统,这些硬盘可能只有一个分区也可能有多个。通过将这些物理存在的分区(或称为卷)PV(physical volume)进行整合,组成一个分区(卷)组VG(volume group),进而再次进行分配形成逻辑分区(卷)LV(logical volume)。创建成功的逻辑分区对于操作系统来说会想普通分区无异,其好处是可以动态调整分区大小。管理PV,VG,LV的工具称为逻辑卷管理器LVM(logical volume manager)。其关系如下图所示:

2、环境信息

  1. cat /etc/centos-release
  2. CentOS Linux release 7.8.2003 (Core)

3、查看当前文件系统的空间分配情况

  1. [root@localhost ~]# df -h
  2. 文件系统 容量 已用 可用 已用% 挂载点
  3. devtmpfs 1.9G 0 1.9G 0% /dev
  4. tmpfs 1.9G 0 1.9G 0% /dev/shm
  5. tmpfs 1.9G 8.9M 1.9G 1% /run
  6. tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
  7. /dev/mapper/centos-root 44G 4.4G 40G 10% /
  8. /dev/sda1 1014M 150M 865M 15% /boot
  9. tmpfs 379M 0 379M 0% /run/user/0

可以看到挂载点为根目录的文件系统/dev/mapper/centos-root现在一共是44GB的空间,现在我想新加入一块1TB物理磁盘,将新的磁盘全部挂载到这个文件系统中(44GB+1TB)

4、查看当前磁盘空间

  1. [root@localhost ~]# fdisk -l
  2. 磁盘 /dev/sda53.7 GB, 53687091200 字节,104857600 个扇区
  3. Units = 扇区 of 1 * 512 = 512 bytes
  4. 扇区大小(逻辑/物理):512 字节 / 512 字节
  5. I/O 大小(最小/最佳):512 字节 / 512 字节
  6. 磁盘标签类型:dos
  7. 磁盘标识符:0x000b638c
  8. 设备 Boot Start End Blocks Id System
  9. /dev/sda1 * 2048 2099199 1048576 83 Linux
  10. /dev/sda2 2099200 104857599 51379200 8e Linux LVM
  11. 磁盘 /dev/mapper/centos-root47.2 GB, 47240445952 字节,92266496 个扇区
  12. Units = 扇区 of 1 * 512 = 512 bytes
  13. 扇区大小(逻辑/物理):512 字节 / 512 字节
  14. I/O 大小(最小/最佳):512 字节 / 512 字节
  15. 磁盘 /dev/mapper/centos-swap5368 MB, 5368709120 字节,10485760 个扇区
  16. Units = 扇区 of 1 * 512 = 512 bytes
  17. 扇区大小(逻辑/物理):512 字节 / 512 字节
  18. I/O 大小(最小/最佳):512 字节 / 512 字节

目前只有一块物理磁盘sda

4、新增物理磁盘

我使用的是ESXi的虚拟机,现在我给虚拟机新增一块1TB的空磁盘

新增磁盘后返回ssh重新查看磁盘列表信息

  1. [root@localhost ~]# fdisk -l
  2. 磁盘 /dev/sda53.7 GB, 53687091200 字节,104857600 个扇区
  3. Units = 扇区 of 1 * 512 = 512 bytes
  4. 扇区大小(逻辑/物理):512 字节 / 512 字节
  5. I/O 大小(最小/最佳):512 字节 / 512 字节
  6. 磁盘标签类型:dos
  7. 磁盘标识符:0x000b638c
  8. 设备 Boot Start End Blocks Id System
  9. /dev/sda1 * 2048 2099199 1048576 83 Linux
  10. /dev/sda2 2099200 104857599 51379200 8e Linux LVM
  11. 磁盘 /dev/mapper/centos-root47.2 GB, 47240445952 字节,92266496 个扇区
  12. Units = 扇区 of 1 * 512 = 512 bytes
  13. 扇区大小(逻辑/物理):512 字节 / 512 字节
  14. I/O 大小(最小/最佳):512 字节 / 512 字节
  15. 磁盘 /dev/mapper/centos-swap5368 MB, 5368709120 字节,10485760 个扇区
  16. Units = 扇区 of 1 * 512 = 512 bytes
  17. 扇区大小(逻辑/物理):512 字节 / 512 字节
  18. I/O 大小(最小/最佳):512 字节 / 512 字节
  19. 磁盘 /dev/sdb1099.5 GB, 1099511627776 字节,2147483648 个扇区
  20. Units = 扇区 of 1 * 512 = 512 bytes
  21. 扇区大小(逻辑/物理):512 字节 / 512 字节
  22. I/O 大小(最小/最佳):512 字节 / 512 字节

可以看到此时已经多了一块大小为1099.5 GB名为sdb的新磁盘。

但是现在还无法使用,我们先给它分个区。

5、PV前期准备工作

  1. [root@localhost ~]# fdisk /dev/sdb
  2. 欢迎使用 fdisk (util-linux 2.23.2)。
  3. 更改将停留在内存中,直到您决定将更改写入磁盘。
  4. 使用写入命令前请三思。
  5. Device does not contain a recognized partition table
  6. 使用磁盘标识符 0xa981a92f 创建新的 DOS 磁盘标签。
  7. 命令(输入 m 获取帮助):m
  8. 命令操作
  9. a toggle a bootable flag
  10. b edit bsd disklabel
  11. c toggle the dos compatibility flag
  12. d delete a partition
  13. g create a new empty GPT partition table
  14. G create an IRIX (SGI) partition table
  15. l list known partition types
  16. m print this menu
  17. n add a new partition
  18. o create a new empty DOS partition table
  19. p print the partition table
  20. q quit without saving changes
  21. s create a new empty Sun disklabel
  22. t change a partition system id
  23. u change display/entry units
  24. v verify the partition table
  25. w write table to disk and exit
  26. x extra functionality (experts only)
  27. 命令(输入 m 获取帮助):n
  28. Partition type:
  29. p primary (0 primary, 0 extended, 4 free)
  30. e extended
  31. Select (default p): p
  32. 分区号 (1-4,默认 1):1
  33. 起始 扇区 (2048-2147483647,默认为 2048):
  34. 将使用默认值 2048
  35. Last 扇区, +扇区 or +size{
  36. K,M,G} (2048-2147483647,默认为 2147483647):
  37. 将使用默认值 2147483647
  38. 分区 1 已设置为 Linux 类型,大小设为 1024 GiB
  39. 命令(输入 m 获取帮助):w
  40. The partition table has been altered!
  41. Calling ioctl() to re-read partition table.
  42. 正在同步磁盘。

我只划分了一个分区sdb1,可根据自身需求划分多个分区,但需要提前规划好各分区容量。最后不要忘记输入w来保存信息。

现在我们给新分区指定分区类型

  1. [root@localhost ~]# fdisk /dev/sdb
  2. 欢迎使用 fdisk (util-linux 2.23.2)。
  3. 更改将停留在内存中,直到您决定将更改写入磁盘。
  4. 使用写入命令前请三思。
  5. 命令(输入 m 获取帮助):t
  6. 已选择分区 1
  7. Hex 代码(输入 L 列出所有代码):8e
  8. 已将分区“Linux”的类型更改为“Linux LVM
  9. 命令(输入 m 获取帮助):w
  10. The partition table has been altered!
  11. Calling ioctl() to re-read partition table.
  12. 正在同步磁盘。

分区类型:很多,一般描述的是磁盘分区的用途,比如要做逻辑卷和swap分区的需要指定特定的分区类型,没有特殊用途,只是普通作为存储数据的,保持默认的分区类型就可以了。

文件系统:描述的是文件在磁盘里的存储方式,权限定义,i节点分配等功能。
一般情况下,Windows默认的文件系统为:NTSF

REDHAT7默认的文件系统为:XFS

REDHAT6默认的文件系统为:ext4 同样不要忘记w保存


6、格式化PV

现在格式化一下我们新建的sdb1分区

  1. [root@localhost ~]# mkfs.ext3 /dev/sdb1
  2. mke2fs 1.42.9 (28-Dec-2013)
  3. Discarding device blocks: 完成
  4. 文件系统标签=
  5. OS type: Linux
  6. 块大小=4096 (log=2)
  7. 分块大小=4096 (log=2)
  8. Stride=0 blocks, Stripe width=0 blocks
  9. 67108864 inodes, 268435200 blocks
  10. 13421760 blocks (5.00%) reserved for the super user
  11. 第一个数据块=0
  12. Maximum filesystem blocks=4294967296
  13. 8192 block groups
  14. 32768 blocks per group, 32768 fragments per group
  15. 8192 inodes per group
  16. Superblock backups stored on blocks:
  17. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
  18. 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
  19. 102400000, 214990848
  20. Allocating group tables: 完成
  21. 正在写入inode表: 完成
  22. Creating journal (32768 blocks): 完成
  23. Writing superblocks and filesystem accounting information: 完成

7、使用lvm创建PV

  1. [root@localhost ~]# lvm pvcreate /dev/sdb1
  2. WARNING: ext3 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
  3. Wiping ext3 signature on /dev/sdb1.
  4. Physical volume "/dev/sdb1" successfully created.

创建好了之后,查看一下现在的pv列表

  1. [root@localhost ~]# lvm pvdisplay
  2. --- Physical volume ---
  3. PV Name /dev/sda2
  4. VG Name centos
  5. PV Size <49.00 GiB / not usable 3.00 MiB
  6. Allocatable yes (but full)
  7. PE Size 4.00 MiB
  8. Total PE 12543
  9. Free PE 0
  10. Allocated PE 12543
  11. PV UUID fQgbcS-biIL-kGQT-MU0L-8cpV-Kmv5-6kZtcc
  12. "/dev/sdb1" is a new physical volume of "<1024.00 GiB"
  13. --- NEW Physical volume ---
  14. PV Name /dev/sdb1
  15. VG Name
  16. PV Size <1024.00 GiB
  17. Allocatable NO
  18. PE Size 0
  19. Total PE 0
  20. Free PE 0
  21. Allocated PE 0
  22. PV UUID G4Jldl-0RGv-HmhP-UUKf-vGbc-S32e-h42UTm

8、将新的PV加入VG

首先我们先来看一下目前的VG列表

  1. [root@localhost ~]# lvm vgdisplay
  2. --- Volume group ---
  3. VG Name centos
  4. System ID
  5. Format lvm2
  6. Metadata Areas 1
  7. Metadata Sequence No 3
  8. VG Access read/write
  9. VG Status resizable
  10. MAX LV 0
  11. Cur LV 2
  12. Open LV 2
  13. Max PV 0
  14. Cur PV 1
  15. Act PV 1
  16. VG Size <49.00 GiB
  17. PE Size 4.00 MiB
  18. Total PE 12543
  19. Alloc PE / Size 12543 / <49.00 GiB
  20. Free PE / Size 0 / 0
  21. VG UUID Cd3LKc-dtg5-otbP-UHOO-QoAK-wkSs-0XljMj

只有一个名为centos的系统创建的vg。我们直接将新的PV加入其中即可,也可以自己创建新的VG。

  1. [root@localhost ~]# lvm vgextend centos /dev/sdb1
  2. Volume group "centos" successfully extended
  3. [root@localhost ~]# lvm vgdisplay
  4. --- Volume group ---
  5. VG Name centos
  6. System ID
  7. Format lvm2
  8. Metadata Areas 2
  9. Metadata Sequence No 4
  10. VG Access read/write
  11. VG Status resizable
  12. MAX LV 0
  13. Cur LV 2
  14. Open LV 2
  15. Max PV 0
  16. Cur PV 2
  17. Act PV 2
  18. VG Size <1.05 TiB
  19. PE Size 4.00 MiB
  20. Total PE 274686
  21. Alloc PE / Size 12543 / <49.00 GiB
  22. Free PE / Size 262143 / <1024.00 GiB
  23. VG UUID Cd3LKc-dtg5-otbP-UHOO-QoAK-wkSs-0XljMj

加入VG后再次查看VG列表,发现VG已经扩大到1个T了。


9、LV扩容

现在我们可以给根目录挂载点的LV扩容了

  1. [root@localhost ~]# lvm lvextend -l +100%FREE /dev/mapper/centos-root
  2. Size of logical volume centos/root changed from <44.00 GiB (11263 extents) to 1.04 TiB (273406 extents).
  3. Logical volume centos/root successfully resized.

可以看到LV的大小已经从44GB改变到1.04TB了

这个指令的含义是,将100%的剩余可用空间全部分配给/dev/mapper/centos-root

也可以指定具体的数值

  1. $ lvm lvextend -L +1T /dev/mapper/centos-root

重新调整逻辑分区大小

  1. [root@localhost ~]# xfs_growfs /dev/mapper/centos-root
  2. meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2883328 blks
  3. = sectsz=512 attr=2, projid32bit=1
  4. = crc=1 finobt=0 spinodes=0
  5. data = bsize=4096 blocks=11533312, imaxpct=25
  6. = sunit=0 swidth=0 blks
  7. naming =version 2 bsize=4096 ascii-ci=0 ftype=1
  8. log =internal bsize=4096 blocks=5631, version=2
  9. = sectsz=512 sunit=0 blks, lazy-count=1
  10. realtime =none extsz=4096 blocks=0, rtextents=0
  11. data blocks changed from 11533312 to 279967744

最后再次查看磁盘空间信息,发现根目录挂载点已经扩容成功了。

  1. [root@localhost ~]# df -h
  2. 文件系统 容量 已用 可用 已用% 挂载点
  3. devtmpfs 1.9G 0 1.9G 0% /dev
  4. tmpfs 1.9G 0 1.9G 0% /dev/shm
  5. tmpfs 1.9G 8.9M 1.9G 1% /run
  6. tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
  7. /dev/mapper/centos-root 1.1T 4.4G 1.1T 1% /
  8. /dev/sda1 1014M 150M 865M 15% /boot
  9. tmpfs 379M 0 379M 0% /run/user/0