Linux 磁盘管理 xfs文件系统扩容 XFS是一个开源的(GPL)日志文件系统,最初由硅谷图形(SGI)开发,现在大多数的Linux发行版都支持。事实上,XFS已被最新的CentOS/RHEL 7采用,成为其默认的文件系统。在其众多的特性中,包含了“在线调整大小”这一特性,使得现存的XFS文件系统在已经挂载的情况下可以进行扩展。然而,对于XFS文件系统的缩减却还没有支持。
一、裸磁盘扩容 裸磁盘扩容(Linux) 裸磁盘是指未进行分区的云硬盘,即创建的云硬盘挂至主机后,直接对磁盘进行格式化进行使用,用户可通过对硬盘扩容容量后,进入操作系统对裸磁盘进行扩容操作。
1.查看磁盘信息:判断裸磁盘 /dev/sdb 是一个 100G 的、没有分过区、直接格式化成 xfs 文件系统挂载使用的”裸磁盘”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 $ fdisk -l /dev/sdb 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 $ lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100G 0 disk /data $ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv xfs 39G 2.1G 37G 6% / /dev/sda1 xfs 1014M 194M 821M 20% /boot tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb xfs 100G 33M 100G 1% /data
2.vCenter 扩容裸磁盘 这边是用VMware 虚拟机进行测试
重启操作系统后,查看 /dev/sdb 容量已增加到 200G
1 2 3 4 5 6 $ fdisk -l /dev/sdb Disk /dev/sdb: 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
xfs 文件系统还未扩容。
1 2 3 4 5 6 7 8 9 10 $ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv xfs 39G 2.1G 37G 6% / /dev/sda1 xfs 1014M 194M 821M 20% /boot tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb xfs 100G 33M 100G 1% /data
3.xfs 文件系统扩容 xfs 文件系统的磁盘不需要卸载挂载点,可以在线扩容,注意查看 blocks 数量是否增加。
1 2 3 4 5 6 7 8 9 10 11 $ xfs_growfs /data meta-data=/dev/sdb isize=512 agcount=4, agsize=6553600 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=26214400, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=12800, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 26214400 to 52428800
4.扩容完验证: 1 2 3 4 5 6 7 8 9 10 11 $ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv xfs 39G 2.1G 37G 6% / /dev/sda1 xfs 1014M 194M 821M 20% /boot tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb xfs 200G 33M 200G 1% /data
二、单分区磁盘扩容 单分区磁盘是指磁盘在扩容之前已被挂载过虚拟机且只划分过 1 个分区,用户可通过对硬盘扩容容量后,进入操作系统对单分区磁盘进行分区扩容操作。单分区扩容在 Linux 及 Windows 操作系统上的操作不同,本章节为 Linux 单分区扩容操作指南。.
对两种分区表操作扩容(MBR 分区表、GPT 分区表)操作不同。
MBR 分区表请使用fdisk分区,GPT 分区表请使用 gdisk 工具分区。
fdisk 只能对 2T 以下的磁盘进行分区操作,大于 2T 用gdisk, parted
(一) 单分区磁盘扩容1:MBR分区表(<2T) 1.确认磁盘是MBR分区表 1 2 3 4 5 6 7 8 9 10 11 $ fdisk -l /dev/sdb 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: 0x95728ed5 Device Boot Start End Blocks Id System /dev/sdb1 2048 209715199 104856576 83 Linux
2.查看当前磁盘的信息,包括挂载点、文件系统类型及分区情况; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /data $ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv xfs 39G 2.1G 37G 6% / /dev/sda1 xfs 1014M 194M 821M 20% /boot tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb1 xfs 100G 33M 100G 1% /data
3.vCenter 扩容单分区磁盘 前面有讲过,这边省略注释 fstab 的开机挂载选项,然后重启操作系统。
1 2 3 4 5 6 7 8 9 10 11 fdisk -l /dev/sdb Disk /dev/sdb: 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: 0x95728ed5 Device Boot Start End Blocks Id System /dev/sdb1 2048 209715199 104856576 83 Linux
4.重新创建单分区
先删除 /dev/sdb1 分区,再重新创建 /dev/sdb1 分区。
删除分区不会造成磁盘内数据丢失。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 $ 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 . 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): Using default response p Partition number (1-4, default 1): First sector (2048-419430399, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): Using default value 419430399 Partition 1 of type Linux and of size 200 GiB is set Command (m for help ): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
5.fs 文件系统扩容 xfs 文件系统,则先执行 xfs_repair 检查文件系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ xfs_repair /dev/sdb1 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log ... - scan filesystem freespace and inode maps... ... ... ... - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... done $ lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 200G 0 disk └─sdb1 8:17 0 200G 0 part
打开 fstab 的开机自启动挂载注释,使用 mount -a 重新挂载磁盘。
最后执行 xfs_growfs 在文件系统级别对磁盘分区进行最后的扩容操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $ xfs_growfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553536 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=26214144, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=12799, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 26214144 to 52428544 $ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv xfs 39G 2.1G 37G 6% / /dev/sda1 xfs 1014M 194M 821M 20% /boot tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb1 xfs 200G 33M 200G 1% /data
(二)单分区磁盘扩容2:GPT分区表(>2T) 当一块磁盘的容量大于 2TB 时,在 linux 下无法通过 fdisk 工具命令对对进行分区,需通过 parted 命令进行分区及扩容操作。
1.查看磁盘信息:判断GPT格式单分区磁盘 fdisk 无法操作 gpt 分区表格是的磁盘,因此要使用 parted 命令来查看分区表格式。
因此 /dev/sdb 是 gpt 分区格式的 100G 单分区磁盘,仅有一个分区 /dev/sdb1,文件系统挂载点是 /data
1 2 3 4 5 6 7 8 9 $ parted /dev/sdb print Model: VMware Virtual disk (scsi) Disk /dev/sdb: 107GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 107GB 107GB xfs Linux filesystem
2.查看当前磁盘的信息,包括挂载点、文件系统类型及分区情况; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 查看磁盘有几个分区 $ lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /data # 只有1个分区 #查看文件系统 $ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv xfs 39G 2.1G 37G 6% / /dev/sda1 xfs 1014M 194M 821M 20% /boot tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb1 xfs 100G 33M 100G 1% /data # 挂载点,容量100G
3.vCenter 扩容单分区磁盘 前面有讲过,这边省略注释 fstab 的开机挂载选项,然后重启操作系统。
1 2 3 4 5 6 7 8 9 $ parted /dev/sdb print Model: VMware Virtual disk (scsi) Disk /dev/sdb: 215GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 107GB 107GB xfs Linux filesystem
4.重新创建单分区 对离线状态的 /dev/sdb1 分区,使用 parted 命令删除原来分区并创建新分区,删除当前分区不会造成磁盘内数据丢失。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 # 开始重新创建单分区 $ parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit s # 将显示和操纵单位变成 sector 扇区 # 先按 p 查看磁盘下是仅有一个分区 1,容量目前看到的是 100G (parted) p Model: VMware Virtual disk (scsi) Disk /dev/sdb: 419430400s Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: # 注意这里起始扇区是从 2048s 开始的 Number Start End Size File system Name Flags 1 2048s 209715166s 209713119s xfs Linux filesystem # 删除分区 1 (parted) rm 1 # 创建分区 (parted) mkpart Partition name? []? # 分区名称 File system type? [ext2]? xfs # 文件系统类型 Start? 2048s # 起始扇区,仍然也是从2048s 开始 End? 100% # 结束扇区,这里使以百分比的形式使用余量所有扇区 # 查看 (parted) p Model: VMware Virtual disk (scsi) Disk /dev/sdb: 419430400s Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: # 结束扇区数量增加了! Number Start End Size File system Name Flags 1 2048s 419428351s 419426304s xfs # 退出分区操作 (parted) q Information: You may need to update /etc/fstab.
5.xfs 文件系统扩容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ mount /dev/sdb1 /data $ xfs_growfs /data meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553535 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=26214139, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=12799, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 26214139 to 52428280
查看扩容成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ parted /dev/sdb print Model: VMware Virtual disk (scsi) Disk /dev/sdb: 215GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 215GB 215GB xfs $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.8M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/root_vg-root_lv 39G 2.1G 37G 6% / /dev/sda1 1014M 194M 821M 20% /boot tmpfs 379M 0 379M 0% /run/user/0 /dev/sdb1 200G 33M 200G 1% /data
三、多分区磁盘扩容 查看硬盘分区
1 2 3 4 5 6 7 8 9 10 11 12 fdisk -l Disk /dev/sda: 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: 0x000b8f71 Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 83886079 40893440 83 Linux
1、系统盘扩容 不同磁盘类型,遵循不同的磁盘扩容规则:
1.1 虚拟机上直接修改配置 有快照的虚拟机不支持扩容
1.2 系统内扩容步骤 步骤1:安装growpart Cloud-init支持版镜像中已默认安装growpart,其余版本需要自行安装,过程如下:
CentOS:
1 2 3 yum install -y epel-release yum install -y cloud-utils
Ubuntu:
1 2 sudo apt-get install cloud-initramfs-growroot
步骤2:扩容分区表
1 2 3 LANG=en_US.UTF-8 growpart /dev/sda 2
CentOS6和Debian8,可能会遇到内核以及工具链不支持热重载分区表的情况,如遇此情况,扩容分区表后需重启一次操作系统。
步骤3:扩容文件系统
1 2 3 resize2fs /dev/sda2 (ext4文件系统) xfs_growfs /dev/vda1 (xfs文件系统) 或xfs_growfs /
步骤4:确认 查看是否扩容完成:
2、数据盘扩容 2.1 系统内扩容步骤 查看数据盘的文件系统类型(升级操作需要针对ext4和xfs两种文件系统采取不同的操作)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 df -ihTFilesystem Type Inodes IUsed IFree IUse% Mounted on devtmpfs devtmpfs 472K 354 471K 1% /dev tmpfs tmpfs 474K 1 474K 1% /dev/shm tmpfs tmpfs 474K 545 474K 1% /run tmpfs tmpfs 474K 16 474K 1% /sys/fs/cgroup /dev/sda2 xfs 20M 196K 20M 1% / /dev/sda1 xfs 512K 334 512K 1% /boot tmpfs tmpfs 474K 1 474K 1% /run/user/0 e2fsck -f /dev/vdb resize2fs /dev/vdb CopyErrorSuccess xfs_repair /dev/vdb xfs_growfs /data
参考资料