Linux-手动扩容磁盘分区
Linux-磁盘分区手动扩容
- 大多数云商场的数据盘可以实现不重启主机在线扩容磁盘分区容量:阿里云,百度云,AWS,ucloud
- 虽然是无损扩容,但是最好操作之前做好备份,或快照,以免意外发生
- 修改磁盘的分区表信息,并不会删除磁盘分区的数据,格式化才会删除数据
- 单分区磁盘操作简单,多分区磁盘注意事项较多,建议使用其他方案,而不是直接改分区表进行扩容
实例演示:使用 fdisk 扩容 ext4 磁盘分区
数据盘为阿里云高效云盘
Ubuntu 17.10 64位的 ECS 实例
未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4 文件系统),文件系统的挂载点为 /data
目标是:文件系统(磁盘分区)扩容完成后,数据盘仍然只有一个主分区
首先在云控制台对指定磁盘进行扩容操作,本次示例为50GB扩容到60GB
1.扩容前检查磁盘分区信息
- 检查并记录分区表信息,包括数据盘的总容量、起始扇区(First sector)位置,分区表类型等
fdisk -l
------------------------------------
root@zuiyoujie:~# fdisk -l /dev/vdb
Disk /dev/vdb: 60 GiB, 64424509440 bytes, 125829120 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
Disklabel type: dos
Disk identifier: 0x63c3e6e0
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 104857599 104855552 50G 83 Linux
-------------------------------------
parted parted /dev/vdb p
- 检查磁盘分区类型和容量信息
# 查看磁盘信息
df -h
# 查看磁盘分区容量信息
lsblk /dev/vdb
# 查看磁盘分区类型
blkid
[root@zuiyoujie ~]# blkid
/dev/vda1: UUID="84953f78-xxxx-4dbd-ac60-aaabc2e4cb9c" TYPE="ext4"
/dev/vdb: UUID="cb664382-xxxx-49f0-874e-d68d8cba0141" TYPE="ext4"
/dev/vdc: UUID="4a7b0493-f24d-43d5-b499-822df72e7867" TYPE="xfs"
- 在原有分区内创建测试文件,扩容完毕后检查文件
root@zuiyoujie:~# mkdir -p /data/test
root@zuiyoujie:~# touch /data/test/20180327
root@zuiyoujie:~# touch /data/test/20180327.txt
root@zuiyoujie:~# tree /data/
/data/
├── lost+found
└── test
├── 20180327
└── 20180327.txt
2.修改分区表
- 卸载分已挂载的分区
# 运行 umount 命令卸载主分区
umount /dev/vdb1
# 如果卸载失败 可以使用 lsof 查看挂载信息
lsof /data
# 使用 df -h 查看是否卸载成功
df -h
-----------------------------------
root@zuiyoujie:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 799M 3.0M 796M 1% /run
/dev/vda1 50G 5.4G 42G 12% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 799M 0 799M 0% /run/user/0
-----------------------------------
- 删除并重建分区表
fdisk /dev/vdb
-------------------------------------
root@zuiyoujie:~# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.27.1).
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 has been deleted.
Command (m for help): n # 新建分区表
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p # 分区表类型
Partition number (1-4, default 1): # 分区编号
First sector (2048-125829119, default 2048): # 分区起始位置,保持默认
Last sector, +sectors or +size{K,M,G,T,P} (2048-125829119, default 125829119): # 分区结束位置,保持默认
Created a new partition 1 of type 'Linux' and of size 60 GiB.
Command (m for help): wq # 保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
--------------------------------------
- 重新加载磁盘分区信息
# 重新加载分区信息
partprobe /dev/vdb
# 或者
partx -u /dev/vdb1
# 检查分区容量变更
lsblk /dev/vdb
- 注意:起始扇区问题
输入第一个可用的扇区编号:为了保证数据的一致性,First sector 需要与原来的分区保持一致。在本示例中,按回车键采用默认值。
如果发现 First sector 显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。
输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。
- 注意:分区修改命令
---------------------------------------
root@zuiyoujie:~# fdisk /dev/vdb1 # 错误的命令,fdisk 针对磁盘级操作,而不是分区
/dev/vdb1: device contains a valid 'ext4' signature; it is strongly recommended to wipe the device with wipefs(8) if this is unexpected, in order to avoid possible collisions
--------------------------------------
- 注意:退出后需要重新检测分区挂载情况,有时候卸载的分区会自动挂载回去
# 如果 /dev/vdb1 又被挂载上去就需要重新卸载该分区
df -h
umount /dev/vdb1
3.调整分区大小
- 1.使用 e2fsck 检查文件系统是 ext4 类型的分区,确保状态为 clean
# 使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长
e2fsck -n /dev/vdb1
# 文件系统状态为 clean,表示文件系统状态正常,可以进行后续操作,如果状态不是 clean,需要排查修复
--------------------------------
[root@zuiyoujie ~]# e2fsck -n /dev/vdb1
Warning! /dev/vdb1 is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/vdb1: clean, 11/1310720 files, 126322/5242624 blocks
--------------------------------
# 如果运行命令后未显示文件系统状态为clean,可以尝试用以下命令检查修复
e2fsck -n - /dev/vdb1
# 强制检查修复
e2fsck -f /dev/vdb1
--------------------------------
root@zuiyoujie:~# e2fsck -f /dev/vdb1
e2fsck 1.42.13 (17-May-2015)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vdb1: 14/3276800 files (0.0% non-contiguous), 251700/13106944 blocks
--------------------------------
# 如果是 xfs 文件系统
xfs_repair -n /dev/vdb1
- 2.修改文件系统大小
resize2fs /dev/vdb1
--------------------------------
root@zuiyoujie:~# resize2fs /dev/vdb1
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/vdb1 to 15728384 (4k) blocks. # 可能需要较长时间
The filesystem on /dev/vdb1 is now 15728384 (4k) blocks long.
--------------------------------
- 注意:正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失
4.重新挂载分区到指定目录
mount /dev/vdb1 /data
df -h
-------------------------------
root@zuiyoujie:~# mount /dev/vdb1 /data
root@zuiyoujie:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 0 7.9G 0% /dev
tmpfs 1.6G 3.2M 1.6G 1% /run
/dev/vda1 50G 5.7G 41G 13% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/vdb1 59G 52M 56G 1% /data
--------------------------------
# 配置开机器自动挂载分区,然后重启系统进行验证
vim /etc/fstab
--------------------------------
/dev/vdb1 /data ext4 defaults 0 0
--------------------------------
# 检查文件,确认磁盘扩容成功
root@zuiyoujie:~# tree /data/
/data/
├── lost+found
└── test
├── 20180327
└── 20180327.txt
10.参考链接
百度云:https://cloud.baidu.com/doc/CDS/s/Lk0629a17
阿里云:https://help.aliyun.com/document_detail/25452.html?spm=a2c4g.11186623.6.1145.7c01c0ddQNjgWt
作者:天生帅才 www.zuiyoujie.com
本文版权归作者和博客园共有,如果感觉有用可以随意打赏,感谢支持,欢迎转载