背景
使用pve创建了一个虚拟机,各种环境配置都安装好了之后发现分配的磁盘空间太小了,默认的就30多个G,这还没咋玩呢就满了,像扩容却找遍了这个pve都没找到扩容按钮,并且我这个磁盘不是lvm结构的,所以好像无法直接扩容根目录。
不信邪的我搜了好多教程方案就像一劳永逸把根目录给直接扩容,在尝试了好几种方法还毁坏了好几个备份的系统清空下还是放弃了,奈何我这半吊子水平搞不了专业运维,磁盘操作风险太大了,并且扩容根目录本来就很麻烦,很容易破坏系统,于是决定改变策略,添加数据盘,创建新的分区,挂载新/路径
前提
系统:Ubuntu 20.04
命令:lsblk 以树状结构展示系统中的块设备信息
从下方输出可以看出,我已经把sda硬盘从128G扩容到了192G,但是多出来的64G是属于空闲空间,并没有利用起来,所以下面想做的就是创建一个新的分区sda3,并且挂载到/var目录下。
ma@cw:~$
ma@cw:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 46M 1 loop /snap/snap-store/638
loop1 7:1 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop2 7:2 0 63.3M 1 loop /snap/core20/1828
loop3 7:3 0 4K 1 loop /snap/bare/5
loop4 7:4 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 192G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 127.5G 0 part /
sr0 11:0 1 4.1G 0 rom /media/ma/Ubuntu 20.04.6 LTS amd64
ma@cw:~$
ma@cw:~$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
udev devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 1.6G 1.3M 1.6G 1% /run
/dev/sda5 ext4 125G 10G 109G 9% /
tmpfs tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 squashfs 46M 46M 0 100% /snap/snap-store/638
/dev/loop1 squashfs 347M 347M 0 100% /snap/gnome-3-38-2004/119
/dev/loop3 squashfs 128K 128K 0 100% /snap/bare/5
/dev/loop2 squashfs 64M 64M 0 100% /snap/core20/1828
/dev/loop4 squashfs 92M 92M 0 100% /snap/gtk-common-themes/1535
/dev/loop5 squashfs 50M 50M 0 100% /snap/snapd/18357
/dev/sda1 vfat 511M 4.0K 511M 1% /boot/efi
tmpfs tmpfs 1.6G 20K 1.6G 1% /run/user/1000
/dev/sr0 iso9660 4.1G 4.1G 0 100% /media/ma/Ubuntu 20.04.6 LTS amd64
ma@cw:~$
详细步骤
让我们一步步进行:
- 首先,我们需要创建一个新的分区。我们可以使用
fdisk
命令来完成这项任务。
(base) root@ma:/# fdisk /dev/sda
这将打开一个新的交互式界面,你可以按照提示进行操作。
- 在 fdisk 中,按下
n
键来创建一个新分区。
Welcome to fdisk (util-linux 2.36.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
- 选择分区类型。因为我们想要创建一个 Linux 分区,所以按下
p
。
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
- 选择分区编号。由于 sda1 和 sda5 已经存在,我们需要选择 sda3。
Partition number (1-4, default 1): 3
- 接下来,我们需要选择分区的起始和结束位置。按照提示,你可以选择默认的起始和结束位置。
First sector (1050624-167772159, default 1050624): [按回车键]
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-167772159, default 167772159): +32G
这里我们选择了一个 32GB 大小的分区。确保输入后按回车键。
- 现在分区已经创建了,我们需要将其格式化为 ext4 文件系统。
Command (m for help): t
Selected partition 3
Hex code (type L to list all codes): 83
这里我们选择了 83 作为分区的文件系统类型,它对应着 Linux ext4 文件系统。
- 现在,我们需要将分区标记为已经格式化。
Command (m for help): w
The partition table has been altered.
Syncing disks.
以上7个步骤操作如图所示:
- 分区创建完成。现在我们需要格式化这个新分区。
root@cw:/home/ma# mkfs.ext4 /dev/sda3
mke2fs 1.45.5 (07-Jan-2020)
丢弃设备块: 完成
创建含有 8388608 个块(每块 4k)和 2097152 个 inode 的文件系统
文件系统 UUID:b08ae70a-e723-443f-a2ed-e2d961faa56e
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
正在分配组表: 完成
正在写入 inode表: 完成
创建日志(65536 个块): 完成
写入超级块和文件系统账户统计信息: 已完成
- 创建一个临时挂载点,用于将原 /var 目录挂载进去。
root@cw:/# mkdir /mnt/tempvar
将原 /var 目录挂载到临时挂载点上。
为确保安全,我们还是多做一个备份,再挂载
root@cw:/home/ma# mkdir /var_backup
# 将 /var 目录下的所有内容备份到新创建的临时目录中。
root@cw:/# cp -r /var/* /var_backup/
# 然后再挂载
root@cw:/# mount --bind /var /mnt/tempvar
现在可以将其挂载到 /var
目录下。
(base) root@ma:/# mount /dev/sda3 /var
- 现在,我们可以确认新分区是否已经成功挂载到
/var
目录下。
(base) root@ma:/# df -h
这个命令将列出当前系统中所有的文件系统及其挂载点,你应该能够在输出中看到 /dev/sda3
已经挂载到 /var
。
- 最后,将之前备份的
/var
目录的内容复制回新的挂载点。
(base) root@ma:/# cp -r /var_backup/* /var/
- 确认复制是否成功,并删除备份目录。
(base) root@ma:/# ls /var
(base) root@ma:/# rm -r /var_backup
完成!你已经成功地创建了一个 32GB 的分区并将其挂载到 /var 目录下,并且将原来的 /var 目录下的内容迁移到了新的挂载点上。
结果验证
此时在使用df -hT
输出验证一下:
root@cw:/mnt/tempvar# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 46M 1 loop /snap/snap-store/638
loop1 7:1 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop2 7:2 0 63.3M 1 loop /snap/core20/1828
loop3 7:3 0 4K 1 loop /snap/bare/5
loop4 7:4 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop5 7:5 0 49.9M 1 loop /snap/snapd/18357
sda 8:0 0 192G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
├─sda3 8:3 0 32G 0 part /mnt/tempvar
└─sda5 8:5 0 127.5G 0 part /
sr0 11:0 1 4.1G 0 rom /media/ma/Ubuntu 20.04.6 LTS amd64
root@cw:/mnt/tempvar#
root@cw:/mnt/tempvar#
root@cw:/mnt/tempvar# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
udev devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 1.6G 1.3M 1.6G 1% /run
/dev/sda5 ext4 125G 13G 107G 11% /
tmpfs tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 squashfs 46M 46M 0 100% /snap/snap-store/638
/dev/loop1 squashfs 347M 347M 0 100% /snap/gnome-3-38-2004/119
/dev/loop3 squashfs 128K 128K 0 100% /snap/bare/5
/dev/loop2 squashfs 64M 64M 0 100% /snap/core20/1828
/dev/loop4 squashfs 92M 92M 0 100% /snap/gtk-common-themes/1535
/dev/loop5 squashfs 50M 50M 0 100% /snap/snapd/18357
/dev/sda1 vfat 511M 4.0K 511M 1% /boot/efi
tmpfs tmpfs 1.6G 24K 1.6G 1% /run/user/1000
/dev/sr0 iso9660 4.1G 4.1G 0 100% /media/ma/Ubuntu 20.04.6 LTS amd64
/dev/sda3 ext4 32G 2.4G 28G 9% /var
root@cw:/mnt/tempvar#
可以看到输出/dev/sda3 ext4 32G 2.4G 28G 9% /var
,说明/var目录已经变为了32GB,操作成功了。
最后
硬盘操作一定要核准每个步骤什么意思再执行,重要操作前一定要记得做好备份,很容易误操作造成系统崩溃。