根分区磁盘拓展
有时候我们使用云主机或者本地虚拟机的时候,没有区分系统盘和数据盘,而且也没有规划使用lvm,随着数据不断堆积,发现当初的磁盘分区已经满了。
今天来探索一下怎样进行磁盘分区扩容。
1. 使用fdisk或者partd进行分区重建
可以参考一下华为云的文档。
以下是一个脚本,适用于AWS EC2机器根分区只有8G的问题。 这里只适用于只有1个分区的情况 也就是只有一个sda1
将全部的容量重新分配给sda1然后挂载到/分区。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash Extend_Disk() { # 格式化硬盘 num=`fdisk -l | grep /dev/xvda | wc -l` df_num=`df -h | grep /dev/xvda | wc -l` if [[ ${num} == 2 && ${df_num} == 1 ]]; then echo " u # 转换一下显示的单位为cylinders(柱面)或sectors(扇区,默认) p # 打印当前的分区 d # 删除当前分区 n # 新建一个分区 p 1 # 新建第一个分区 2048 # 默认就是2048扇区。MBR预留的 # 空行别漏了 p a # 把(引导分区)启动标记打回去 1 w # 保存当前修改的分区 " | fdisk /dev/xvda fi } Extend_Disk |
2. 使用growpart
进行动态扩容
2.1 适用于centos6.x +
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 安装growpart工具 [root@localhost ~] yum -y install cloud-utils-growpart # 获取块设备信息 [root@localhost ~] lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 5G 0 disk └─sdb1 8:17 0 5G 0 part /data2 sda 8:0 0 15G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 13.2G 0 part / └─sda3 8:3 0 1.5G 0 part [SWAP] sr0 11:0 1 1024M 0 rom # 关注sda的三个分区 |
2.2 看看机器的挂载情况:
1 2 3 4 5 6 |
[root@localhost ~] df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 13G 11G 2.0G 84% / tmpfs tmpfs 931M 12K 931M 1% /dev/shm /dev/sda1 ext4 283M 40M 228M 15% /boot /dev/sdb1 ext4 2.9G 4.6M 2.8G 1% /data2 |
2.3 扩容
我这里要对/
分区进行扩容 也就是对应的/dev/sda2
直接执行 growpart
磁盘(/dev/sda
) 分区号(2
)
1 2 3 4 5 6 |
[root@localhost ~] growpart /dev/sda 2 NOCHANGE: partition 2 is size 27695104. it cannot be grown # 返回的是NOCHANGE,拓展没有成功。 # 这里是因为sda2是中间的分区,后面还有一个sda3的分区,我这里当swap分区用了。 # growpart只能连续的柱头才能拓展。 自己看自己的分区是否有用,不要我删除了3 你也删除了3。 |
解决方式:
删除sda3
分区。
1 2 3 4 |
[root@localhost ~] fdisk /dev/sda d 3 wq |
执行growpart
扩展sda2
分区
1 2 |
[root@localhost ~] growpart /dev/sda 2 # /dev/sda是设备 2 是分区号,需要区分开 CHANGED: partition=2 start=616448 old: size=27695104 end=28311552 new: size=62294092,end=62910540 |
查看sda2的总容量变了(15G-->30G)
1 2 3 4 5 6 7 8 |
[root@localhost ~] lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 5G 0 disk └─sdb1 8:17 0 5G 0 part /data2 sda 8:0 0 30G 0 disk ├─sda1 8:1 0 300M 0 part /boot └─sda2 8:2 0 29.7G 0 part / sr0 11:0 1 1024M 0 rom |
2.4 需要resize2fs
更新文件系统,而resize2fs
需要重启服务器才能进行,否则系统不能识别分区表。
1 2 |
#重启之前记得先注释掉/etc/fstab 的swap分区挂载。 [root@localhost ~] reboot |
1 2 3 4 5 6 |
[root@localhost ~] resize2fs /dev/sda2 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/sda2 is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/sda2 to 7786761 (4k) blocks. The filesystem on /dev/sda2 is now 7786761 blocks long. |
可以看到/分区成功扩展到30G
了
1 2 3 4 5 6 |
[root@localhost ~] df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 30G 11G 18G 37% / tmpfs tmpfs 931M 12K 931M 1% /dev/shm /dev/sda1 ext4 283M 40M 228M 15% /boot /dev/sdb1 ext4 4.9G 6.0M 4.6G 1% /data2 |
到现在根分区就扩容完成了。
3.重建swap
分区
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 |
1. dd生成一个2G文件 [root@localhost ~] dd if=/dev/zero of=/swapfile bs=1M count=2048 2. 创建SWAP文件 [root@localhost ~] mkswap /swapfile 3. 激活SWAP文件 [root@localhost ~] swapon /swapfile 4. 查看SWAP信息是否正确 [root@localhost ~] swapon -s 5. 添加到fstab文件中让系统引导时自动启动 [root@localhost ~] echo "/swapfile swap swap defaults 0 0" >> /etc/fstab 6. 用命令free检查2G交换分区生效 [root@localhost ~] free -m [root@localhost ~] grep SwapTotal /proc/meminfo 7. 释放SWAP文件 [root@localhost ~] swapoff /swapfile 8. 删除SWAP文件 [root@localhost ~] rm -fr /swapfile # 如果使用centos7的话可以使用一下的命令快速创建交换分区 [root@localhost ~] fallocate -l 4G /swapfile [root@localhost ~] chmod 600 /swapfile [root@localhost ~] mkswap /swapfile [root@localhost ~] swapon /swapfile [root@localhost ~] free -m |
🐶愿一生所遇皆忠良。🐶