共计 3003 个字符,预计需要花费 8 分钟才能阅读完成。
文章目录[隐藏]
宿主机: Ubuntu 24.04
日期: 2026-01-02
核心目标: 打造一个多用户共享、AI 账号隔离、具备“快照后悔药”能力的开发中心。
一、地基篇:LVM 初始化与“架构微调”
LVM 从零到一的“三步走”
1. 遇到问题
新买的 Kingston SSD (/dev/sda) 是一块无法直接使用的“白砖”。我需要把它变成可以动态调整大小、可以随时扩容的“智能磁盘”。
2. 解决方案:LVM 核心创建流程
在 Linux 中,要把物理硬盘调教好,必须按顺序执行以下三个步骤:
第一步:建立物理卷 (PV – Physical Volume)
这是把硬盘“格式化”为 LVM 能认出来的原材料。
sudo wipefs -a /dev/sda # 第一步:暴力抹除硬盘上的旧分区表(慎用!)sudo pvcreate /dev/sda # 第二步:把这块盘标记为 LVM 的“生肉”
第二步:建立卷组 (VG – Volume Group)
这是把所有 PV(生肉)扔进一个大池子里,形成一个虚拟的存储空间总和。
Bash
# 建立一个叫 vg_data 的大池子,把 /dev/sda 扔进去
sudo vgcreate vg_data /dev/sda
第三步:建立逻辑卷 (LV – Logical Volume)
从池子里划出一块空间,这才是你真正能挂载、存文件的“虚拟硬盘”。
# 从 vg_data 池子里划出 400G,取名 lv_data
# 为什么要留几十 G 不分完?那是为了留给“快照”当燃料(VFree)sudo lvcreate -L 400G -n lv_data vg_data
# 最后一步:给这块“虚拟硬盘”铺上地毯(格式化文件系统)sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mkdir /data && sudo mount /dev/vg_data/lv_data /data
3. 原理与形象比喻
- PV (物理卷) :就像一捆原始的钢筋水泥,它本身不能住人。
- VG (卷组) :就像一个地基 / 工地,你把所有的钢筋水泥(硬盘)都堆在这里。
- LV (逻辑卷) :就像在工地上盖出来的房间。你可以盖大一点,也可以盖小一点,以后甚至可以再盖一层(扩容)。
1. 遇到问题
- 初衷: 希望硬盘像“乐高”一样可以随时拼接扩容。
- 进化需求: 初始建立后发现名字(
vg_docker)太窄了,且空间分得太满(100%),没有空间玩“快照”。
2. 解决方案(改名、调优、预留空间)
如果你需要重命名卷组并预留快照位,请执行以下“重塑”操作:
# 1. 重命名卷组 (将专门的 docker 改为通用的 data)
sudo vgrename vg_docker vg_data
# 2. 预留“存档”空间 (不分满,只分 400G,剩下 47G 做积蓄)
sudo lvremove /dev/vg_data/lv_storage # 删掉旧的
sudo lvcreate -L 400G -n lv_data vg_data # 建个 400G 的,剩下约 47G VFree 自动留给快照
# 3. 格式化与挂载
sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mount /dev/vg_data/lv_data /data
3. 原理与形象比喻
- 原理: LVM 在物理硬盘和文件系统间加了“中介层”。
- 比喻: 物理硬盘是“水桶”,卷组 (VG) 是“蓄水池”,逻辑卷 (LV) 是“水龙头”。
- 这次优化的精髓: 蓄水池(VG)有 447G,我们只给水龙头(LV)接了 400G 的水管。剩下的 47G 留在池子里不流走,专门用来做“数据备份的墨水”。
二、进阶篇:多用户共享与 AI 账号多开
1. 遇到问题
- 痛点: 一个人想用多个 AI 账号(如 GitHub Copilot/Cursor)。IDE 默认只能登一个账号,切换极麻烦。
2. 解决方案(Linux 原生隔离 + ACL 权限打通)
- 多账号隔离: 创建
chin,qin49,github 三个系统用户。由于~/.vscode 隔离在各自家目录,每个用户登录不同的 AI 账号,想换账号,只需 SSH 或 Ubuntu 切换用户。 - 权限打通: 所有人共用
/data目录。
# 赋予所有用户对 /data 的“递归 + 继承”读写权 (ACL)
sudo setfacl -R -m u:chin:rwx,u:qin49:rwx,u:github:rwx,u:libvirt-qemu:rwx /data
sudo setfacl -R -d -m u:chin:rwx,u:qin49:rwx,u:github:rwx,u:libvirt-qemu:rwx /data
3. 原理与形象比喻
- 比喻: 办公室里有三个独立工位(系统用户),每个人的电脑登的 AI 账号不同,但大家共用一个巨大的“公共书架”(
/data)。
三、避坑篇:Docker/KVM 迁移与“强力拆迁”
1. 遇到问题
- Docker 镜像和虚拟机动辄几十 GB,必须从 40G 的系统盘搬到新 SSD。
- 棘手问题: 卸载
/data 时提示Device busy,即便停了 Docker 也没用。
2. 解决方案
-
迁移配置:
- Docker: 修改
/etc/docker/daemon.json 加入"data-root": "/data/docker"。 - KVM:
virsh pool-edit default 指向/data/vms。
- Docker: 修改
- “强力拆迁”脚本: Docker 的 overlay2 挂载极难清理,需用“懒卸载”:
# 强制杀掉所有死盯着 /data 的进程
sudo fuser -ckm /data
# 循环清理所有残留的隐藏挂载点
grep "/data" /proc/mounts | awk '{print $2}' | xargs -r sudo umount -l
四、后悔药篇:LVM 快照与二次扩容
1. 快照(Snapshot):系统的“存档与读档”
既然我们在第一章预留了 47G 的 VFree 空间,现在可以玩快照了。
-
存档(拍快照):
利用我们在 VG 中预留的那 47G 余额:
# 拍一个名为 snap_01 的照片,允许 10G 的变动量 sudo lvcreate -L 10G -s -n snap_01 /dev/vg_data/lv_data -
读档(回滚):
注意:必须先 umount /data。sudo umount /data sudo lvconvert --merge /dev/vg_data/snap_01 # 秒回存档点 sudo mount /data
2. 二次扩容:以后没空间了怎么办?
如果再买一块 1TB 的新盘(假设为 /dev/sdc):
- 初始化:
sudo pvcreate /dev/sdc - 扩容池子:
sudo vgextend vg_data /dev/sdc - 撑大水管:
sudo lvextend -L +800G /dev/vg_data/lv_data - 拉伸地毯:
sudo resize2fs /dev/vg_data/lv_data
🛠 终极状态汇总表
| 目录 | 物理位置 | 角色 | 权限方案 |
|---|---|---|---|
/ |
NVMe 系统盘 | 系统骨架 | root 管理 |
/data |
新 SSD (LVM: lv_data) | 数据中心 | ACL (多用户共治) |
/data/docker |
新 SSD (LVM) | 容器引擎 | 属组 docker |
/data/vms |
新 SSD (LVM) | 虚拟机仓库 | 属组 libvirt |
VFree |
VG 剩余空间 | 后悔药能量槽 | 用于创建快照 |
💡 老司机心得:
- VFree 是底气: 永远不要把 VG 分满,留几十 G 空间,你才有机会在系统崩坏前“读档”。
- ACL 是粘合剂: 它让多用户协作不再有“权限被拒绝”的烦恼。
- 备份是真理: 虽然有快照,但在进行 LVM 重大结构调整前,务必先
rsync 一份数据到/home备份!
正文完
创作不易,扫码加点动力
发表至: 其它
近一天内