CentOS/RHEL 7在 XFS 文件系统上扩展 /boot 分区的大小

这篇文章的范围是解释增加 /boot 文件系统所涉及的步骤,其中文件系统类型是 XFS,并且没有足够的空间来安装新的内核包。
虽然我们有标准方法来减小 /boot 的大小,例如:从引导中删除未使用的内核和镜像文件,但作为替代方法,这篇文章说明了扩展引导分区大小的步骤。

以下应该是可以应用的场景:

  • OVM/Vmware 来宾机器。
  • 来宾备份应从 OVM/Vmware 获取。
  • /boot 不在 LVM 中,而其他操作系统文件系统使用 LVM。

按照以下步骤扩展引导分区的大小。

  1. 添加新磁盘(新磁盘的大小必须等于或者大于现有卷组的大小)并使用'fdisk -l' 来检查新添加的磁盘,例如/dev/ sdb:
# fdisk -l
Disk /dev/sda: 32.7 GB, 32693026816 bytes, 63853568 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: 0x0007bf28
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 63852543 31413248 8e Linux LVM
Disk /dev/sdb: 45.6 GB, 45642022912 bytes, 89144576 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 /dev/mapper/ol-root: 30.0 GB, 29972496384 bytes, 58540032 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 /dev/mapper/ol-swap: 2147 MB, 2147483648 bytes, 4194304 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
  1. 对新添加的磁盘进行分区,将类型改为Linux LVM:
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xef10e36e.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-89144575, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-89144575, default 89144575):
Using default value 89144575
Partition 1 of type Linux and of size 42.5 GiB is set
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 45.6 GB, 45642022912 bytes, 89144576 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: 0xef10e36e
Device Boot Start End Blocks Id System
/dev/sdb1 2048 89144575 44571264 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
  1. 在分区磁盘上创建一个物理卷,例如。
    /dev/sdb1.
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
  1. 检查卷组名称。
    将物理卷添加到现有卷组。
# vgs
VG #PV #LV #SN Attr VSize VFree
ol 1 2 0 wz--n- 29.96g 44.00m
# vgextend ol /dev/sdb1
Volume group "ol" successfully extended
  1. 将物理卷从现有磁盘 (/dev/sda2) 迁移到新创建的 (/dev/sdb1)。
    然后减少现有的卷组。
# pvmove /dev/sda2 /dev/sdb1
/dev/sda2: Moved: 0.1%
/dev/sda2: Moved: 6.7%
/dev/sda2: Moved: 8.1%
/dev/sda2: Moved: 22.9%
/dev/sda2: Moved: 32.6%
/dev/sda2: Moved: 53.9%
/dev/sda2: Moved: 76.9%
/dev/sda2: Moved: 78.2%
/dev/sda2: Moved: 100.0%
# vgreduce ol /dev/sda2
Removed "/dev/sda2" from volume group "ol"
  1. 删除分区/dev/sda2.
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 is deleted
Command (m for help): p
Disk /dev/sda: 32.7 GB, 32693026816 bytes, 63853568 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: 0x0007bf28
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
  1. 卸载/boot:
# umount /boot
  1. 检查/dev/sda1 的开始和结束块。
    然后删除分区 /dev/sda1 并创建一个具有相同起始块的新分区 /dev/sda1 并根据需要扩展大小。
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 32.7 GB, 32693026816 bytes, 63853568 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: 0x0007bf28
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
Command (m for help): d
Selected partition 1
Partition 1 is deleted
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-63853567, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-63853567, default 63853567): +1000M
Partition 1 of type Linux and of size 1000 MiB is set
Command (m for help): p
Disk /dev/sda: 32.7 GB, 32693026816 bytes, 63853568 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: 0x0007bf28
Device Boot Start End Blocks Id System
/dev/sda1 2048 2050047 1024000 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
  1. 检查/dev/sda1的文件系统:
# xfs_repair /dev/sda1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
  1. 调整文件系统大小:
# xfs_growfs -d /dev/sda1
xfs_growfs: /dev/sda1 is not a mounted XFS filesystem
  1. 挂载 /boot。
# mount /boot
  1. 在所有这些步骤之后,/boot 文件系统的大小将被扩展。
    我们可以使用“df -h”命令进行检查。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ol-root 28G 1.6G 27G 6% /
devtmpfs 863M 0 863M 0% /dev
tmpfs 873M 0 873M 0% /dev/shm
tmpfs 873M 8.5M 865M 1% /run
tmpfs 873M 0 873M 0% /sys/fs/cgroup
tmpfs 175M 0 175M 0% /run/user/0
/dev/sda1 497M 147M 351M 30% /boot
日期:2020-09-17 00:14:20 来源:oir作者:oir