记录一次linux扩缩容

pv : 物理卷,与磁盘分区是逻辑对应关系
vg : 卷组,单个或多个物理卷组合
pe : 逻辑意义上磁盘的最小存储单位,默认 4MB
lv : 逻辑意义上的分区,从 vg 中提取容量来创建逻辑卷。最后对逻辑卷格式化并挂载使用

总结

新加 pvcreate + vgcreate + lvcreate

1
2
3
4
5
6
sudo pvcreate /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
sudo vgcreate bigdata-vg /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
sudo lvcreate -l 100%FREE -n bigdata-lv bigdata-vg
sudo mkfs.ext4 /dev/bigdata-vg/bigdata-lv
sudo mkdir -p /data/home/user0/bigdata
sudo mount /dev/bigdata-vg/bigdata-lv /data/home/user0/bigdata

扩容 pvcreate + vgextend + lvextend

1
2
3
4
5
6
sudo pvcreate /dev/nvme4n1
sudo vgextend bigdata-vg /dev/nvme4n1
sudo lvextend -l +100%FREE /dev/bigdata-vg/bigdata-lv
sudo resize2fs /dev/bigdata-vg/bigdata-lv # 如果 ext4
# sudo xfs_growfs /data/home/user0/bigdata # 如果 xfs
df -h /data/home/user0/bigdata

添加 LVM

  1. pvcreate /dev/sdc1 /dev/sdj # pvdisplay
  2. vgcreate docker /dev/sdc1 /dev/sdj # vgdisplay
  3. lvcreate -l 100%FREE -n testpool docker # lvdisplay
  4. mkfs.xfs /dev/docker/testpool
  5. mount /dev/docker/testpool /var/lib/docker

删除 LVM

  1. umount /var/lib/docker
  2. lvremove /dev/docker/testpool
  3. vgremove docker
  4. pvremove /dev/sdc1 /dev/sdj
  5. fdisk /dev/sdc # t 改为 83 # fdisk /dev/sdj
  6. ls /dev/mapper/docker-testpool | xargs -I% – dmsetup remove %
  7. partprobe

LVM 扩缩容

新添加硬盘 /dev/sdf

1
2
3
4
5
6
7
8
9
10
11
12
13
fdisk -l
fdisk /dev/sdf # 过程省略
fdisk -l
mkfs -t ext4 -c /dev/sdf1
mount /dev/sdf1 /new_data

blkid # 查看 UUID
echo "UUID=5297705a-0889-434e-abc0-b47a6c180645 /new_data ext4 defaults 0 0" >> /etc/fstab # 写入文件,重启后自动挂载

## /etc/mtab # 当前挂载信息
## 减少 / 目录存储空间
mkdir -p /new_data/data
ln -s /new_data/data /data

扩展硬盘

vmware 硬盘设置 里面 扩展

新建分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fdisk -l
fdisk /dev/sda
m
n
p
3
default
default
t
3
8e (linux LVM)
p
w
partprobe

扩容

1
2
3
4
5
6
7
8
9
10
11
12
lsblk  # 多一个 sda4
pvcreate /dev/sda4 # 创建物理卷

pvdisplay

vgextend centos /dev/sda4 # 扩充逻辑卷, centos 是 VG name
vgdisplay # 可以看到 Free PE / Size

lvresize -l +100%FREE /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

# resize2fs -p /dev/mapper/centos-root ## 使用 ext 时可以使用这个命令替换

调整硬盘大小

1
2
3
4
5
6
7
8
9
10
11
12
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 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: B8602372-BEA9-4285-A079-D5DC179F9F6B

Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 3149823 3145728 1.5G Linux filesystem
/dev/sda3 3149824 83884031 80734208 38.5G Linux filesystem

将剩余空间全给 sda3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@imwl:~# parted /dev/sda
GNU Parted 3.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit GB
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 0.00GB 0.00GB 0.00GB bios_grub
2 0.00GB 1.61GB 1.61GB ext4
3 1.61GB 42.9GB 41.3GB

(parted) resizepart 3 100%
(parted) quit
Information: You may need to update /etc/fstab.

root@imwl:~# partprobe

调整文件系统

1
2
3
4
5
pvresize /dev/sda3
lvresize -l +100%FREE /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

# resize2fs -p /dev/mapper/centos-root ## 使用 ext 时可以使用这个命令替换

缩减 /home 容量 扩充到 根目录

建议先备份 /home

1
2
3
4
5
6
7
8
9
10
11
12
13
cp -r /home /opt
umount /home
lvresize -L 10G /dev/mapper/centos-home
mkfs.xfs -f /dev/mapper/centos-home # 格式化
mount /dev/mapper/centos-home
pvdisplay
vgdisplay

lvresize -L +190G /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

cp -r /opt/home/* /home/ # 需要设置用户权限
# eg: chown -R imwl:imwl /home/imwl

手动备份 也可以使用工具备份

1
2
3
4
5
6
7
8
yum install -y xfsdump

xfsdump -f /opt/home.dump /home


## 扩容完后

xfsrestore -f /opt/home.dump /home