一次查看硬盘,觉得sda(主硬盘,系统分区都在这里)下面分区挺大的,尤其是sda3,如下:
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 499G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 499G 0 lvm /
觉得可以从sda3中在分区出来一点空间挂载, sudo fdisk /dev/sda3 然后一顿操作。
重启后,玩完,进不了系统linux服务器搭建,因为ubuntu--vg-ubuntu--lv根目录 / 被分区后,无法识别了,只能格式化此分区。如果格式化此分区,数据也全没了,关键还进不去系统了。当时一身冷汗,还好此服务器没部署服务。所以重装系统了。
这次经历注意两点:
三、扩展分区与逻辑分区
分区的时候有主分区(primary)和扩展分区(extended),主分区都知道,那扩展分区什么时候用呢?
主分区只能存在4个,无法再创建了,如果想创建多于4个主分区,这时候就需要创建扩展分区,通过扩展分区创建逻辑分区就可以使用了,和主分区使用没啥区别。注:extended无法直接使用,不可格式化,不可挂载,必须创建逻辑分区后才能使用。扩展分区下可创建多个逻辑分区。
创建扩展分区和逻辑分区
#分区
sudo fdisk /dev/sdb
创建扩展分区,Partition type选择e即可,其他步骤一致。
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2):
First sector (20000001-41943039, default 20000768):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (20000768-41943039, default 41943039): 30000000
Created a new partition 2 of type 'Extended' and of size 4.8 GiB.
#p查看扩展分区sdb2完成。
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
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: 0xfc5ea7ec
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20000000 19997953 9.5G 83 Linux
/dev/sdb2 20000768 30000000 9999233 4.8G 5 Extended
创建逻辑分区,Partition type选择这时只有p和l选择,选择l(逻辑分区),其他步骤一致
Command (m for help): n
Partition type
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (20002816-30000000, default 20002816):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (20002816-30000000, default 30000000):
Created a new partition 5 of type 'Linux' and of size 4.8 GiB.
#p查看逻辑分区sdb5完成。
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
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: 0xfc5ea7ec
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20000000 19997953 9.5G 83 Linux
/dev/sdb2 20000768 30000000 9999233 4.8G 5 Extended
/dev/sdb5 20002816 30000000 9997185 4.8G 83 Linux
扩展分区默认sdb5开始命名,表示在4个主分区以后。逻辑分区好后,可以格式化挂载了。
sudo mkfs.ext4 /dev/sdb5
sudo mount /dev/sdb5 /mnt/
df -h
查看结果如下,挂载成功,可以使用了。
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 9.5G 0 part
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 4.8G 0 part /mnt
四、标准分区扩容(非LVM)
在同一块硬盘下的标准扩容,相对比较简单。步骤为删除需要扩容的分区编号,重新分区编号,重新挂载即可。
这里以sdb1为例,已挂载至/mysql路径,总共有20G,还有将近10G空闲,将空闲的分配给sdb1。
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 9.8G 0 part /mysql
为了测试数据完整性,在sdb1创建一个文件test.txt,
cd /mysql/
sudo vim test.txt
内容为test,mysql,12345678。
ubuntu@ubuntu:/$ cat /mysql/test.txt
test,mysql,12345678
取消挂载
sudo umount /mysql
重新分区
sudo fdisk /dev/sdb
删除分区,再重新分区
#删除分区,选择所要扩展分区的编号,这里只有1个,默认删除第一个sdb1.
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
#编号1,还是原来的sdb1.
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
#结束大小不要小于原来的大小,否则容易造成数据改变或丢失,原来时10G,这里改为大概15G
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): 30780000
Created a new partition 1 of type 'Linux' and of size 14.7 GiB.
Partition #1 contains a ext4 signature.
#按 N 保留 xfs 签名,移除的话分区的 UUID 会变更。
Do you want to remove the signature? [Y]es/[N]o: n
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
扩容完成,注:不需要重新格式化,否则数据丢失,直接挂载使用即可。
挂载查看原来数据是否还在,原来数据还在,没有改变。至于为什么,涉及到磁盘的构成,有柱面,扇区,簇,编号之类的,有兴趣自己可以研究。
ubuntu@ubuntu:/$ sudo mount /dev/sdb1 /mysql/
ubuntu@ubuntu:/mysql$ cat mysql/test.txt
test,mysql,12345678
lsblk查看大小,sdb1由原来的10G左右,扩容为15G左右。扩容完成
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 14.7G 0 part /mysql
五、系统根分区(LVM)扩容
主要扩容系统根分区。如以下的系统的sda3,ubuntu--vg-ubuntu--lv根分区。
需谨慎操作长春linux培训,涉及到系统相关磁盘分区。
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 19G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 19G 0 lvm /
1:物理卷linux磁盘扩容,卷组,逻辑卷
扩展之前。需要了解的三个概率:物理卷,卷组,逻辑卷。引入这个概念,可以解除物理隔离的限制。
物理卷在逻辑卷管理器中属于最底层的,任何的逻辑卷和卷组都必需依靠物理卷来建立,物理卷可以是一个完整的硬盘,也可以是硬盘中的某一个分区。
卷组是建立在物理卷之上,一个卷组中可以包含一个或者多个物理卷。
逻辑卷类似于非 LVM 系统中的硬盘分区,在逻辑卷之上可以建立文件系统 (比如 /home 或者 /usr 等)。
加上还有其他元素(有兴趣自己深究),一起构成LVM(Logical Volume Manager)逻辑卷管理。
总结:多个磁盘/分区/raid-->多个物理卷PV-->合成卷组VG-->从VG划分出逻辑卷LV-->格式化LV,挂载使用。
功能
PV管理命令
VG管理命令
LV管理命令
scan 扫描
pvscan
vgscan
lvscan
create 创建
pvcreate
vgcreate
vcreate
display 显示
pvdisplay
vgdisplay
lvdisplay
remove 移除
pvremove
vgremove
lvremove
extend 扩展
vgextend
lvextend
reduce 减少
vgreduce
lvreduc
举个通俗例子:多个磁盘/分区就是多袋小麦,创建物理卷(PV)就是分别磨成面粉,合成卷组(VG)就是把面粉和成一大团面团,逻辑卷(LV)就是分出去的一个个小坨小面团分别做包子饺子之类其他功能的。想要扩容给小面团(LV),就需要从大面条(VG)里面取出来补。需要扩容的根分区就是那一坨小面团。
2:同一块硬盘扩容根分区
如下:总磁盘30G大小,根分区20G,有10G空闲需要分配给ubuntu--vg-ubuntu--lv根分区。
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 19G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 19G 0 lvm /
从根分区的逻辑卷管理(lvm)的名称可以看出,已存在的卷组(VG)为ubuntu--vg,和逻辑卷(LV)为ubuntu--lv,所有想要扩容,只要增加卷组(VG)的空间,然后分配给逻辑卷(LV)即可。
2.1:查看卷组(VG)和逻辑卷(LV)信息
也可以自行查看存在的卷组(VG)和逻辑卷(LV)。
#查看卷组,Free PE 为空闲可分配的空间。
ubuntu@ubuntu:~$ sudo vgdisplay
[sudo] password for ubuntu:
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 0 / 0
VG UUID Gvpatz-SSYp-qfrV-5AGf-BXAD-aVC7-XZlewX
#查看逻辑卷
ubuntu@ubuntu:~$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/ubuntu-vg/ubuntu-lv
LV Name ubuntu-lv
VG Name ubuntu-vg
LV UUID XND7LS-kWJL-LISf-HmrN-eK7S-X8ea-2Lazo7
LV Write Access read/write
LV Creation host, time ubuntu-server, 2021-11-27 09:39:38 +0000
LV Status available
# open 1
LV Size <19.00 GiB
Current LE 4863
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
2.2:创建分配分区(获取小麦原材料)
为了给增加卷组(VG)的空闲可用空间,先创建一个分区,将剩下的分配给分区。
sudo fdisk /dev/sda
n分区,全部默认回车即可,记住主分区为4,即sda4。
Command (m for help): n
Partition number (4-128, default 4):
First sector (41940992-62914526, default 41940992):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (41940992-62914526, default 62914526):
Created a new partition 4 of type 'Linux filesystem' and of size 10 GiB.
Command (m for help): p
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Disk model: VMware Virtual S
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: gpt
Disk identifier: 0EC75B7E-5AD4-4971-B452-57826F74E4FD
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 2101247 2097152 1G Linux filesystem
/dev/sda3 2101248 41940991 39839744 19G Linux filesystem
/dev/sda4 41940992 62914526 20973535 10G Linux filesystem
Command (m for help): w
The partition table has been altered.
Syncing disks.
2.3:创建物理卷PV(磨成面粉)
sudo pvcreate /dev/sda4
显示如下:
ubuntu@ubuntu:~$ sudo pvcreate /dev/sda4
Physical volume "/dev/sda4" successfully created.
注意:老的Linux在创建PV时,需要将分区类型改为Linux
LVM(8e)。但新的系统已经非常智能,即使默认的Linux分区(83),也可以创建PV。具体过程是fdisk 过程中,选择参数
l:查看所有分区类型代码,及 t:修改分区类型代码,选择代码8e类型即可。
2.4:添加到卷组VG中(大面团)
将物理卷PV添加到卷组VG中(面粉加到大面团中),卷组VG这里已有,上面查询得知名称为ubuntu-vg
sudo vgextend ubuntu-vg /dev/sda4
显示如下:
ubuntu@ubuntu:~$ sudo vgextend ubuntu-vg /dev/sda4
Volume group "ubuntu-vg" successfully extended
再次查看卷组VG,Free PE / Size 已经有了10G的空闲空间可分配了。
ubuntu@ubuntu:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0

Cur PV 2
Act PV 2
VG Size 28.99 GiB
PE Size 4.00 MiB
Total PE 7422
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 2559 / <10.00 GiB
VG UUID Gvpatz-SSYp-qfrV-5AGf-BXAD-aVC7-XZlewX
2.5:分配空间给逻辑卷根LV(小面团)
从卷组VG分配空间给逻辑卷根LV目录(从大面团取出可用的给需要的小面团),上面可查询可知,LV名称为ubuntu-lv,扩容命令及参数参考如下:
#分配10G ,-L 指定逻辑卷的大小,单位为“kKmMgGtT”字节
sudo lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
#或者100%空闲分配, -l 指定逻辑卷的大小(LE数)
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
#或者逻辑卷扩展至30G
sudo lvextend -L 30G /dev/ubuntu-vg/ubuntu-lv
#以上都可以加上参数-r ,将逻辑卷的文件系统扩展(如:房子建好了,需要装修,不需要指定大小)
刚开始不够10G,多少有点误差,所有分配9.9G就可以了。显示successfully成功,显示如下:
ubuntu@ubuntu:~$ sudo lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
Insufficient free space: 2560 extents needed, but only 2559 available
ubuntu@ubuntu:~$ sudo lvextend -L +9.9G /dev/ubuntu-vg/ubuntu-lv
Rounding size to boundary between physical extents: 9.90 GiB.
Size of logical volume ubuntu-vg/ubuntu-lv changed from <19.00 GiB (4863 extents) to <28.90 GiB (7398 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
2.6:resize2fs重新计算磁盘大小
执行之后并不会立马生效需要执行,需要重新计算磁盘大小。这时候只能查看lsblk磁盘已增大,但是df -h里面文件系统没有变化,所以需要操作这一步生效。
resize2fs命令是用来增大或者收缩未加载的“ext2/ext3/ext4”文件系统的大小。
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
显示如下成功:
ubuntu@ubuntu:~$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 7575552 (4k) blocks long.
2.7:查看磁盘大小
df -h或者lsblk可查看,已经扩容成功为30G.
df -h
/dev/mapper/ubuntu--vg-ubuntu--lv 29G 6.8G 21G 26% /
lsblk
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 19G 0 part
│ └─ubuntu--vg-ubuntu--lv 253:0 0 28.9G 0 lvm /
└─sda4 8:4 0 10G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 28.9G 0 lvm /
3:添加硬盘扩容根分区
3.1:添加新硬盘sdb
lsblk查看已显示磁盘
sdb 8:16 0 20G 0 disk
3.2:创建物理卷PV
你可以分区后创建物理卷,也可以整块硬盘创建物理卷PV,这里直接将整块创建PV,将所有空间给系统根分区扩容。
sudo pvcreate /dev/sdb
下面步骤与上面添加类似
3.3:添加到卷组VG
sudo vgextend ubuntu-vg /dev/sdb
#查看free PE时候添加成功。
sudo vgdisplay
3.4:分配空间给逻辑卷根LV
sudo lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
3.5:重新计算磁盘,分配给系统文件
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
3.6:查看磁盘大小
df -h 和 lsblk 查看大小
ubuntu@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 391M 1.5M 390M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 39G 6.9G 30G 19% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/loop0 56M 56M 0 100% /snap/core18/2128
/dev/loop2 71M 71M 0 100% /snap/lxd/21029
/dev/loop1 62M 62M 0 100% /snap/core20/1242
/dev/sda2 976M 107M 803M 12% /boot
/dev/loop3 43M 43M 0 100% /snap/snapd/14066
/dev/loop4 68M 68M 0 100% /snap/lxd/21835
/dev/loop5 56M 56M 0 100% /snap/core18/2253
/dev/loop6 33M 33M 0 100% /snap/snapd/12704
tmpfs 391M 0 391M 0% /run/user/1000
ubuntu@ubuntu:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 55.4M 1 loop /snap/core18/2128
loop1 7:1 0 61.9M 1 loop /snap/core20/1242
loop2 7:2 0 70.3M 1 loop /snap/lxd/21029
loop3 7:3 0 42.2M 1 loop /snap/snapd/14066
loop4 7:4 0 67.2M 1 loop /snap/lxd/21835
loop5 7:5 0 55.5M 1 loop /snap/core18/2253
loop6 7:6 0 32.3M 1 loop /snap/snapd/12704
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 19G 0 part
│ └─ubuntu--vg-ubuntu--lv 253:0 0 39G 0 lvm /
└─sda4 8:4 0 10G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 39G 0 lvm /
sdb 8:16 0 20G 0 disk
└─ubuntu--vg-ubuntu--lv 253:0 0 39G 0 lvm /
六、缩减LVM空间
重要事情说三遍:
正式环境,非必要情况或者不熟悉的情况下,请勿操作,宁愿空着,也别冒险
正式环境,非必要情况或者不熟悉的情况下,请勿操作,宁愿空着linux磁盘扩容,也别冒险
正式环境,非必要情况或者不熟悉的情况下,请勿操作,宁愿空着,也别冒险
xfs类型不可以直接缩减,只扩不减。如果是ext2,ext3,ext4可以在线缩减,如果xfs盘要缩小就要删除后重新添加
1:非系统根分区LVM缩容
四步,这里以名称为 lv 为例子,这里是缩减至多少大小,不是缩减了多少。
1、取消挂载
系统根分区无法在线取消挂载,所以这时请勿对系统根分区执行任何缩容操作
系统根分区无法在线取消挂载,所以这时请勿对系统根分区执行任何缩容操作
系统根分区无法在线取消挂载,所以这时请勿对系统根分区执行任何缩容操作
umount /lv/ #取消挂载目录
2、e2fsck检查修复磁盘完整性
e2fsck -f /dev/vg0/lv0
3、缩小系统文件空间,即df -h查看的空间
不取消挂载,这步会报错,注:一定先减文件系统,再减逻辑卷
resize2fs /dev/vg0/lv0 10G
4、缩小磁盘空间,即lsblk查看的空间
不执行上面的操作,直接执行这步,虽然成功,但是会操作数据丢失,系统无法启动。
lvreduce -L 10G /dev/vg0/lv0
5、重新挂载
mount -a
最后查看lvs空间
lvs
扩展:
加上参数-r 可以一步到位,即将上面的3和4步骤一起执行。
lvreduce命令使用-L选项减少空间,-r选项减少文件系统空间,实现动态调整(这是ext4文件系统)
lvreduce -L 10G -r /dev/vg0/lv0
2:系统根分区LVM缩容
跟上面步骤一致,唯一的区别是没法在线取消挂载,所以需要进入救援模式(单用户模式)
救援模式分两种,一种是正常启动系统进入,另一种是加载镜像是进入。
缩容系统根分区必须是挂载镜像时的救援模式才可以操作。
1、正常启动系统进入救援模式
启动按shift键,出现选择系统界面,按e。找到以单词 linux 开头的行,并在该行的末尾添加以下内容(要到达末尾,只需按下 CTRL+e 或使用 END 键或左右箭头键):
systemd.unit=rescue.target
添加完成后,只需按下 CTRL+x 或 F10 即可继续启动救援模式。几秒钟后,你将以 root 用户身份进入救援模式(单用户模式)
2、挂载iso或者启动盘进入救援模式
系统不同,进入也不同,本人ubuntu20.04,没有找到合适的方式,其他的系统自行研究