Linux技术栈 —— 记一次Ubuntu系统 / 目录磁盘扩容


给linux磁盘扩容,是开发和运维绕不过的课题,熟练掌握,大有裨益。

一、系统情况

我使用的是Ubuntu Server 22.04.3,现有情况如下

# 系统情况
lyp@Ubuntu:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

root@Ubuntu:/home/lyp# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0 63.9M  1 loop /snap/core20/2264
loop1                       7:1    0   87M  1 loop /snap/lxd/28373
loop2                       7:2    0 63.9M  1 loop /snap/core20/2318
loop3                       7:3    0   87M  1 loop /snap/lxd/29351
loop4                       7:4    0 38.8M  1 loop /snap/snapd/21759
loop5                       7:5    0 38.7M  1 loop /snap/snapd/21465
sda                         8:0    0   80G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   23G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0   23G  0 lvm  /
sr0                        11:0    1 1024M  0 rom  

root@Ubuntu:/home/lyp# pvs
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <23.00g    0 

root@Ubuntu:/home/lyp# vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  ubuntu-vg   1   1   0 wz--n- <23.00g    0 

# 下面这两条命令根本没用,因为/ubuntu--vg-ubuntu--lv虚拟卷所在的已经到sda3的上限了
root@Ubuntu:/home/lyp# sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
  New size (5887 extents) matches existing size (5887 extents).
root@Ubuntu:/home/lyp# sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.46.5 (30-Dec-2021)
The filesystem is already 6028288 (4k) blocks long.  Nothing to do!

二、操作步骤

下面是按照GPT给的命令执行的


# 关键命令(1):用fdisk创建新分区
root@Ubuntu:/home/lyp# fdisk /dev/sda

Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

GPT PMBR size mismatch (52428799 != 167772159) will be corrected by write.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.


Command (m for help): p

Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 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: 56324E8E-9FCB-4FD5-A114-8017CB8626CF

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  4198399  4194304   2G Linux filesystem
/dev/sda3  4198400 52426751 48228352  23G Linux filesystem

# 关键命令(2):输入 n 创建新分区
Command (m for help): n
# 关键命令(3):选择分区编号,由于sda3是我最后一个分区,故此处是4
Partition number (4-128, default 4): 4
# 关键命令(4):设置起始扇区,通常,默认的起始扇区是正确的,所以按 Enter 使用默认值。
First sector (52426752-167772126, default 52426752): 
# 关键命令(5):设置结束扇区,通常,默认的起始扇区是正确的,所以按 Enter 使用默认值。
Last sector, +/-sectors or +/-size{K,M,G,T,P} (52426752-167772126, default 167772126): 
# 关键命令(6.1):开始更改分区类型
Command (m for help): t
# 关键命令(6.2):选择分区编号,就是我们刚刚创建的,分区号为4
Partition number (1-4, default 4): 4
# 关键命令(6.3):输入类型代码前如果不确定,按L看下代码编号,可以看到30或lvm都是我们要的,根据你自己的机器来定
Partition type or alias (type L to list all): L
  1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  2 MBR partition scheme           024DEE41-33E7-11D3-9D69-0008C781F39F
  3 Intel Fast Flash               D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
......
 30 Linux LVM                      E6D6D379-F507-44C2-A23C-238F2A3DF928
......
107 HiFive FSBL                    5B193300-FC78-40CD-8002-E86C45580B47
108 HiFive BBL                     2E54B353-1271-4842-806F-E436D6AF6985

Aliases:
   linux          - 0FC63DAF-8483-4772-8E79-3D69D8477DE4
   swap           - 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
   home           - 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
   uefi           - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
   raid           - A19D880F-05FC-4D3B-A006-743F0F84911E
   lvm            - E6D6D379-F507-44C2-A23C-238F2A3DF928
# 关键命令(6.3):然后按q退出类型代码查看,就进入到输入type和alias的环境,30和lvm都可以
Partition type or alias (type L to list all): 30
# 可选命令:查看下我们最后的分区效果,可以看到/dev/sda4了,喜悦感上来了
Command (m for help): p
Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 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: 56324E8E-9FCB-4FD5-A114-8017CB8626CF

Device        Start       End   Sectors Size Type
/dev/sda1      2048      4095      2048   1M BIOS boot
/dev/sda2      4096   4198399   4194304   2G Linux filesystem
/dev/sda3   4198400  52426751  48228352  23G Linux filesystem
/dev/sda4  52426752 167772126 115345375  55G Linux LVM
# 关键命令(7):保存并退出
Command (m for help): w
# 关键命令(8):重启系统
root@Ubuntu:/home/lyp# reboot

# 关键命令(9):将新的分区初始化为LVM物理卷
root@Ubuntu:/home/lyp# pvcreate /dev/sda4
  Physical volume "/dev/sda4" successfully created.
# 关键命令(10):将新物理卷添加到现有卷组
root@Ubuntu:/home/lyp# vgextend ubuntu-vg /dev/sda4
  Volume group "ubuntu-vg" successfully extended
# 关键命令(11):扩展逻辑卷以使用卷组中的所有可用空间
root@Ubuntu:/home/lyp# lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
	Size of logical volume ubuntu-vg/ubuntu-lv changed from <23.00 GiB (5887 extents) to 77.99 GiB (19966 extents).
	 Logical volume ubuntu-vg/ubuntu-lv successfully resized.
# 关键命令(12):扩展文件系统以使用逻辑卷中的新增空间
root@Ubuntu:/home/lyp# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
	resize2fs 1.46.5 (30-Dec-2021)
	Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
	old_desc_blocks = 3, new_desc_blocks = 10
	The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 20445184 (4k) blocks long.

三、优秀目录结构与名词解释

一个合理的,好的磁盘文件结构是什么?按我的理解,应该是根目录/每个下的目录,都有自己的空间,这样的话,哪个目录空间不够就分配空间给哪个目录

NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n1                   259:0    0  1.8T  0 disk 
├─nvme0n1p1               259:1    0    1G  0 part /boot/efi
├─nvme0n1p2               259:2    0    2G  0 part /boot
└─nvme0n1p3               259:3    0  1.8T  0 part 
  ├─ubuntu--vg-root       253:0    0   30G  0 lvm  /
  ├─ubuntu--vg-swap       253:1    0   16G  0 lvm  [SWAP]
  ├─ubuntu--vg-var        253:2    0   50G  0 lvm  /var
  ├─ubuntu--vg-home       253:3    0  200G  0 lvm  /home
  ├─ubuntu--vg-opt        253:4    0   50G  0 lvm  /opt
  ├─ubuntu--vg-usr        253:5    0  100G  0 lvm  /usr
  ├─ubuntu--vg-tmp        253:6    0   20G  0 lvm  /tmp
  └─ubuntu--vg-data       253:7    0 1.332T 0 lvm  /data
sda                         8:0    0  7.3T  0 disk 
└─data--vg-backup         253:8    0  7.3T  0 lvm  /backup
loop0                       7:0    0 63.9M  1 loop /snap/core20/2264
loop1                       7:1    0 63.9M  1 loop /snap/core20/2318
loop2                       7:2    0   87M  1 loop /snap/lxd/28373
loop3                       7:3    0   87M  1 loop /snap/lxd/29351
loop4                       7:4    0 38.7M  1 loop /snap/snapd/21465
loop5                       7:5    0 38.8M  1 loop /snap/snapd/21759

解释上述结构:
nvme0n1 是主磁盘,容量为 1.8TB,分为多个分区和逻辑卷。

nvme0n1p1 (1G, /boot/efi): EFI 引导分区,用于存放 UEFI 引导加载器。
nvme0n1p2 (2G, /boot): 引导分区,存放内核和其他引导相关文件。
nvme0n1p3 (1.8T, LVM): 主分区,分配给 LVM,用于创建多个逻辑卷。
逻辑卷 (LVM): 使用 LVM 提供灵活的存储管理,便于动态调整大小。

ubuntu–vg-root (30G, /): 根分区,存放系统的核心文件。30G 足够大,适用于大多数系统。
ubuntu–vg-swap (16G, [SWAP]): 交换分区,用作虚拟内存,通常大小是物理 RAM 的大小。
ubuntu–vg-var (50G, /var): 变量数据分区,存放日志文件、邮件等动态增长的文件。
ubuntu–vg-home (200G, /home): 用户目录分区,存放用户的个人文件和配置。
ubuntu–vg-opt (50G, /opt): 可选软件包分区,存放第三方应用和软件包。
ubuntu–vg-usr (100G, /usr): 系统应用程序和库文件分区,足够容纳大多数软件包。
ubuntu–vg-tmp (20G, /tmp): 临时文件分区,存放临时文件,防止 / 根目录因临时文件占满。
ubuntu–vg-data (1.332T, /data): 数据分区,存放大数据、数据库或其他用户数据。
sda 是第二块磁盘,容量为 7.3TB。

data–vg-backup (7.3T, /backup): 备份分区,存放系统备份、快照等重要数据,确保数据安全。
为什么要这样分区?
灵活性和扩展性:使用 LVM(逻辑卷管理)使得每个分区的大小可以根据需要动态调整,而不需要重启系统或重装操作系统。

安全性和稳定性:分开不同用途的分区,如 /var、/tmp、/home 等,可以减少系统崩溃的风险。例如,日志填满 /var 不会影响 / 根目录。

性能优化:一些目录(如 /var、/tmp)的读写频率较高,分开分区可以优化文件系统的性能,并减少磁盘碎片的影响。

备份和恢复便利:独立分区使得备份和恢复更加高效。例如,备份 /home 和 /data 分区,而不是整个系统分区。

防止磁盘占满:特定目录(如 /tmp 或 /var)容易填满磁盘,独立分区可以防止它们影响系统的其他部分。

实施建议
分区时使用 GPT 分区表:支持大于 2TB 的分区,并且可以定义更多的主分区。
使用 LVM 来管理分区:提供更大的灵活性和扩展性。
根据实际需求调整大小:例如,/home 分区在多用户系统中可能需要更大,或者 /data 在存储大量数据时需要更多空间。
通过这种合理的分区策略,你可以更好地管理 Linux 系统的磁盘空间,提高系统的性能和安全性。

理解分区(Partition)、物理卷(Physical Volume, PV)、逻辑卷(Logical Volume, LV)、和逻辑卷管理(LVM)之间的关系对于有效管理 Linux 系统的存储是非常重要的。下面我将详细解释这些概念,并通过 Mermaid 图示来帮助你更好地理解它们之间的关系。

1. 分区(Partition)

分区是指在物理磁盘上划分的逻辑区域。分区是将磁盘的存储空间划分为独立的部分,使得每个部分都可以独立使用和管理。分区的主要类型有:

  • 主分区(Primary Partition):每个磁盘最多可以有四个主分区。
  • 扩展分区(Extended Partition):一种特殊类型的主分区,允许在其中创建多个逻辑分区。
  • 逻辑分区(Logical Partition):在扩展分区中创建的分区,用于突破四个主分区的限制。

2. 物理卷(Physical Volume, PV)

**物理卷(PV)**是 LVM(逻辑卷管理器)中使用的最基本的存储单位。一个物理卷可以是一个完整的硬盘,也可以是一个分区。物理卷是 LVM 管理的起点。LVM 使用物理卷来创建更高级的存储结构。

3. 卷组(Volume Group, VG)

**卷组(VG)**是由一个或多个物理卷组成的逻辑存储池。卷组可以看作是一个可以用来创建逻辑卷的“存储池”。一个卷组可以跨越多个物理磁盘,从而让逻辑卷的大小和数量更加灵活和可扩展。

4. 逻辑卷(Logical Volume, LV)

**逻辑卷(LV)**是从卷组中分配的存储单元,可以看作是“虚拟分区”。逻辑卷的大小可以动态调整,而无需担心物理磁盘的实际布局。这使得逻辑卷特别适合需要灵活管理磁盘空间的环境。

5. 逻辑卷管理器(LVM)

**逻辑卷管理器(LVM)**是 Linux 下的一种磁盘管理技术。LVM 提供了一种更灵活的管理磁盘空间的方式,支持将多个物理卷组合成一个逻辑卷组,然后在其上创建逻辑卷。这种方式使得调整文件系统大小、增加或减少磁盘空间变得更加容易。

  • 物理磁盘(Physical Disk)(大地)AA2 表示两块不同的物理磁盘。
  • 分区(Partition)(划片)B1, B2, B3, B4 代表每个磁盘上的分区。
  • 物理卷(PV)(工业用地、农业用地、生活用地)C1, C2, C3, C4 表示每个分区初始化为 LVM 物理卷。
  • 卷组(VG)(市区、县城)D 表示由多个物理卷组成的一个逻辑存储池。
  • 逻辑卷(LV)(落地到各企业所占地皮)E1, E2, E3, E4 表示从卷组中分配的存储单元,它们分别被挂载到不同的文件系统路径(如 / (root), /home, /var, /opt)。
Physical-Disk-1-100GB
Physical-Disk-2-200GB
Partition-1-50GB
Partition-2-50GB
Partition-1-100GB
Partition-2-100GB
PV1-50GB
PV2-50GB
PV3-100GB
PV4-100GB
Volume-Group-VG1
Logical-Volume-LV1-100GB-Mounted-on-root
Logical-Volume-LV2-50GB-Mounted-on-home
Logical-Volume-LV3-100GB-Mounted-on-var
Logical-Volume-LV4-50GB-Mounted-on-opt

四、磁盘划分与土地政策异同探讨

前一章节提到了,我们可以做如下的类比:

  • 物理磁盘(Physical Disk)—— 大地
  • 分区(Partition)—— 划片
  • 物理卷(PV)—— 工业用地、农业用地、生活用地
  • 卷组(VG)—— 高新开发区
  • 逻辑卷(LV)—— 落地到各企业所占地皮

那么为何可以做这种类比呢?这种类比的底层逻辑是什么呢?就像人有出生、生活、死亡,进程有新建、运行、终止,很明显就可以做这样的类比:

  • 人出生 —— 进程新建
  • 人生活 —— 进程运行
  • 人死亡 —— 进程终止

这是因为这两者完全遵守同样的生命周期规律即有始必有终,那么刚刚提到的磁盘划分,空间所遵循的生命周期规律是什么呢?我觉得可以这样想:

  • 物理磁盘(待分配) —— 大地(待开发)
  • 分区(分区,对应于fdisk命令) —— 土地划片(区域规划,对应于行政命令)
  • 物理卷(选择分区类型代码并转换为物理卷,)—— 工业用地、农业用地、生活用地(建设成特定用途的土地)
  • 卷组(卷组可添加物理卷)—— 市区、县城(市区可新增工业用地)
  • 逻辑卷(逻辑卷是对卷组的再细分)—— 各企业所占地皮(各企业用地是对市区、县城的再细分)

这个规律就是,无用 -> 开辟(利用) -> 分化 -> 合并 -> 使用

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值