,区分故障起因、前期业务操作、故障出现、磁盘挂载排查、硬盘重新分区规划、数据迁移、Harbor 仓库路径整改、Tunasync 镜像同步部署、Nginx 镜像站点配置、最终服务管控,分层书写,每一步对应你执行过的指令,逻辑清晰无遗漏。

一、服务器基础硬件概况(lsblk 查询得出)

  1. sda 1.8T 大容量数据硬盘,后期拆分为两个独立 ext4 分区

    • sda1(500G)UUID:2b027fb4‑58fe‑48c5‑9ac1‑da5c7bd058a9 → 挂载 /home,存放 shitou 用户全部业务文件

    • sda2(1.3T)UUID:ab871d9b‑449d‑4b14‑b40b‑4df420fa6ebd → 挂载 /opt/mirror,专门存放内网镜像同步资源、同步日志

  2. sdb 59.6G 系统盘,LVM 架构

    • sdb1:1M 空闲分区

    • sdb2:2G /boot 启动分区

    • sdb3 LVM 卷组

      • ubuntu‑vg‑lv‑0(55G):根目录 /,存放操作系统、Nginx、证书、系统日志

      • ubuntu‑vg‑lv‑1(2G):swap 交换分区

磁盘规划目的:系统、用户资料、镜像文件三块存储彻底隔离,防止镜像大容量数据塞满系统盘。

二、故障发生完整起因

  1. 你使用手机远程操控服务器,修改新增 swap 交换分区相关配置,配置操作不完善之后直接关机;

  2. 重启开机之后系统磁盘挂载顺序错乱;

  3. 普通用户 shitou 登录终端,工作目录处于 /home,进程占用 sda1 分区,系统无法正常完成 sda1 挂载;

  4. 前期 /home 分区磁盘使用率达到 79%,空间临近爆满,进一步造成 /home 目录内所有业务文件肉眼空白;

  5. 原先部署在 /home/mirror 下面的 apt 镜像、iso 同步文件无法访问,内网镜像网站直接失效;

  6. 硬盘所有数据没有丢失、没有被删除,只是分区挂载失败,系统只展示根目录下面空的 /home 文件夹。

三、history 1‑78:故障出现前期、日常业务调试、发现挂载异常

1. 基础磁盘查看、初始目录创建(1~12)

bash

ls                          # 查看当前目录文件
lsblk -f                    # 查看磁盘分区、文件系统、UUID
cat /etc/fstab              # 查看开机自动挂载配置
sudo mkdir /home/shitou     # 创建普通用户家目录
sudo chown shitou:shitou /home/shitou # 归属用户权限
cd ~
ls
sudo mkdir /home/mirror     # 最早镜像文件夹创建在/home下面
sudo mount -a                # 加载fstab挂载配置
cat /etc/fstab
sudo nano /etc/fstab        # 第一次编辑开机挂载文件
ls

早期镜像目录存放路径:/home/mirror,全部业务数据都放在 sda1(/home)分区。

2. 遍历各个业务容器工作目录(13‑35)

依次查看 bk 备份目录、AdGuardHome、wgcloud 监控、Netdata 监控、nginx‑proxy‑manager 反向代理等已经部署好的业务,此时所有业务文件都正常存放在 /home/shitou 目录。

3. 硬件信息检测(48‑52)

bash

lscpu                                    # CPU参数查看
sudo apt install dmidecode lshw         # 安装硬件检测工具
sudo dmidecode -t 39
sudo lshw -class power                  # 电源硬件信息
sudo dmidecode -t memory                # 内存硬件参数

4. Harbor 镜像仓库下载镜像包、拉取 docker 镜像(56‑70)

进入 harbor 文件夹,多源拉取 harbor‑v2.13.1 容器镜像,使用 github 代理下载离线安装包,准备部署私有镜像仓库。

5. 第一次察觉到磁盘挂载异常(71‑78)

bash

lsblk                           # 查看磁盘挂载结构
ls /
cd /
ls
pwd
cat /etc/fstab
sudo vi /etc/fstab              # 编辑挂载配置尝试修复
sudo mount -a                    # 重新加载挂载

执行完成后 /home 目录依旧看不到原有文件,故障正式确认:sda1 分区挂载失败

四、history 79‑172:手动卸载分区、临时挂载、排查磁盘占用、迁移 Harbor 数据路径

1. 手动卸载、强制挂载 sda1 到 /home(80‑85)

bash

sudo umount /home          # 卸载当前空的/home挂载点
sudo umount /home
sudo mount /dev/sda1 /home # 手动强制把sda1挂载至/home
ls /home                    # 挂载成功之后业务文件短暂出现
docker ps
sudo mount -a

手动临时挂载可以读取数据,证明硬盘文件完好,问题只是开机自动挂载错乱。

2. 排查容器日志、清理 Docker 冗余磁盘占用(86‑95)

bash

docker logs blinko-website    # 查看网站容器日志
ls
pwd
sudo chown -R shitou:shitou /home/shitou # 修复用户目录权限
docker system df                 # 统计docker磁盘占用
docker system prune              # 清理docker无用镜像、缓存
du -sh /home/shitou/*           # 查看/home目录各个文件夹大小

此处排查出大量 Docker 缓存、老旧安装包占用 sda1 磁盘空间,是磁盘爆满诱因。

3. Harbor 私有仓库配置备份、修改存储路径(96‑153)

  1. 进入 harbor 工作目录,停止 harbor 容器

bash

cd /home/shitou/harbor
ls
docker‑compose down
sudo docker‑compose down
docker compose down
  1. 备份全部 harbor 配置文件到 /opt/harbor_backup,防止配置丢失

bash

cat docker-compose.yml
cat harbor.yml
sudo mkdir -p /opt/harbor_backup
sudo cp harbor.yml docker-compose.yml install.sh harbor.yml.tmpl /opt/harbor_backup/
sudo cp -r common /opt/harbor_backup/
  1. 最开始打算将 harbor 数据存放至 /home/mirror/harbor_data

bash

sudo mkdir -p /home/mirror/harbor_data
sudo docker compose down
sudo mv /home/shitou/harbor/harbor_data /home/mirror/harbor_data/
# 使用sed批量替换配置文件里面的数据存储路径
sed -i 's/\/home\/shitou\/harbor\/harbor_data/\/home\/mirror\/harbor_data/g' docker-compose.yml
sed -i 's/\/home\/shitou\/harbor\/harbor_data/\/home\/mirror\/harbor_data/g' harbor.yml
  1. 后续再次调整路径,把 harbor 数据迁移至 /home/harbor

bash

sudo mkdir -p /home/harbor
sudo mv /home/mirror/harbor_data/* /home/harbor
sed -i 's/\/home\/mirror\/harbor_data/\/home\/harbor/g' docker-compose.yml
sed -i 's/\/home\/mirror\/harbor_data/\/home\/harbor/g' harbor.yml
# 删除旧的冗余文件夹
sudo rm -rf /home/shitou/harbor_data
sudo rm -rf /home/mirror/harbor_data

4. 检查 Nginx 端口、尝试启动 Harbor 容器(159‑171)

bash

df -h                           # 全盘查看磁盘使用率
lsblk
systemctl status nginx          # 检查nginx网页服务状态
ss -tulnp | grep 80            # 查看80端口占用
docker ps | grep nginx
cd /home/shitou/harbor
docker compose up -d            # 启动harbor
# 补全缺失的harbor容器镜像
docker pull goharbor/harbor-log:v2.13.1
docker compose down
docker pull goharbor/harbor-core:v2.13.1
docker pull goharbor/harbor-db:v2.13.1
docker pull goharbor/harbor-jobservice:v2.13.1
docker pull goharbor/harbor-portal:v2.13.1

五、history 173‑211:重构 sda 硬盘,拆分双独立分区、格式化、配置开机自动挂载、恢复 /home 用户数据

核心决策:不再把镜像文件存放在 /home 分区;1.8T 的 sda 硬盘拆分两个分区,sda1 负责 /home 用户目录,sda1 专门划分 500G;剩余 1.3T 分出 sda2,独立挂载/opt/mirror存放所有内网镜像资源

1. 格式化两个分区、依次卸载‑格式化‑挂载

bash

mkfs.ext4 /dev/sda1
sudo mkfs.ext4 /dev/sda1         # 格式化sda1
sudo mount /dev/sda1 /home       # sda1挂载用户目录
sudo mkdir -p /opt/mirror
sudo mount /dev/sda2 /opt/mirror # 临时挂载sda2镜像分区
# sda2格式化(格式化前必须先卸载,否则设备繁忙报错)
sudo mkfs.ext4 /dev/sda2
sudo umount /opt/mirror
sudo mkfs.ext4 /dev/sda2
sudo mount /dev/sda2 /opt/mirror

2. 反复编辑调试 /etc/fstab 开机挂载文件(185‑200)

bash

sudo nano /etc/fstab
sudo vi /etc/fstab
sudo cat /etc/fstab
# 创建镜像目录子文件夹
sudo mkdir -p /opt/mirror/apt-mirror /opt/mirror/iso /opt/mirror/mirrors
sudo systemctl daemon-reload
sudo mount -a                # 测试挂载配置
blkid /dev/sda1               # 获取sda1最新UUID
# 多次修改、重载、测试挂载
sudo vi /etc/fstab
sudo mount -a
sudo systemctl daemon-reload
sudo mount -a
sudo mount /dev/sda1 /home
sudo mount /dev/sda2 /opt/mirror

最终 fstab 写入两条正确挂载参数

plaintext

UUID=2b027fb4-58fe-48c5-9ac1-da5c7bd058a9     /home        ext4    defaults    0   2
UUID=ab871d9b-449d-4b14-b40b-4df420fa6ebd     /opt/mirror  ext4    defaults    0   2

3. 更新系统引导、重建目录、恢复备份的 shitou 用户文件

bash

sudo update-initramfs -u         # 更新系统启动引导文件
sudo mkdir -p /opt/mirror/apt-mirror /opt/mirror/iso /opt/mirror/mirrors
sudo mkdir -p /home/shitou
sudo chown -R shitou:shitou /home/shitou
chmod 755 /home/shitou
cd ~
ls
pwd
# 从备份目录恢复全部用户业务数据
ls /home_backup_temp/
sudo cp -r /home_backup_temp/shitou/* /home/shitou/

至此磁盘分区重构完成,用户数据全部回迁完毕。

六、history 212‑253:Tunasync 镜像同步服务迁移部署、worker 配置编写、服务管控

旧镜像同步目录之前存放在 /home,挂载故障之后,镜像工作目录迁移至独立分区 /opt/mirror

1. 停止旧的 tunasync 进程、杀死残留同步程序

bash

ps aux | grep tunasync
sudo systemctl stop tunasync-worker
sudo systemctl stop tunasync-worker
sudo systemctl stop tunasync-manager
pkill tunasync
ps aux | grep tunasync

2. 在独立镜像分区创建同步目录、配置文件夹权限

bash

sudo mkdir -p /opt/mirror/mirrors
sudo mkdir -p /opt/mirror/logs
sudo chown -R shitou:shitou /opt/mirror
sudo chmod -R 755 /opt/mirror
sudo chown -R shitou:shitou /usr/local/tunasync

3. 编辑 worker.conf 同步任务配置文件

配置路径 /usr/local/tunasync/conf/worker.conf

toml

[global]
name = "local-worker"
mirror_dir = "/opt/mirror/mirrors"
concurrent = 2
log_dir = "/opt/mirror/logs/{{.Name}}"

[manager]
api_base = "http://127.0.0.1:14242"
token = "Sync@2026Tuna"
ca_cert = ""

[[mirrors]]
name = "ubuntu"
provider = "rsync"
upstream = "rsync://mirrors.bfsu.edu.cn/ubuntu/"
interval = 21600
use_ipv6 = false

[[mirrors]]
name = "ubuntu-cdimage"
provider = "rsync"
upstream = "rsync://mirrors.bfsu.edu.cn/ubuntu-cdimage/"
interval = 604800
use_ipv6 = false


编辑指令

bash

sudo vi /usr/local/tunasync/conf/worker.conf
sudo cat  /usr/local/tunasync/conf/worker.conf
# 删除vim异常缓存文件
sudo rm -rf /usr/local/tunasync/conf/.worker.conf.swp

4. 重载系统服务、启动 tunasync‑manager、tunasync‑worker

bash

sudo systemctl daemon-reload
sudo systemctl start tunasync-manager
sudo systemctl start tunasync-worker
systemctl status tunasync-manager
systemctl status tunasync-worker
sudo systemctl restart tunasync-manager
sudo systemctl restart tunasync-worker

七、history 237‑241:Nginx 内网镜像站点配置修改、重启 web 服务

1. 修改 default 站点配置,网站根目录指向独立镜像分区

bash

cat /etc/nginx/sites-available/default
sudo vi /etc/nginx/sites-available/default
cat /etc/nginx/sites-available/default

完整 Nginx 配置

nginx

#80端口镜像浏览站点
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /opt/mirror/mirrors;
    index index.html;
    server_name _;

    location / {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        try_files $uri $uri/ =404;
    }
}

#7000 HTTPS反向代理
server {
    listen 7000 ssl;
    server_name www.lingluanaishitou.icu;
    ssl_certificate /etc/nginx/ssl/lingluanaishitou.icu.pem;
    ssl_certificate_key /etc/nginx/ssl/lingluanaishitou.icu.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://127.0.0.1:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

#15000 HTTPS反向代理
server {
    listen 15000 ssl;
    server_name www.lingluanaishitou.icu;
    ssl_certificate /etc/nginx/ssl/lingluanaishitou.icu.pem;
    ssl_certificate_key /etc/nginx/ssl/lingluanaishitou.icu.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://127.0.0.1:8989;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

2. 校验 Nginx 语法,重启网页服务

bash

sudo nginx -t
sudo systemctl restart nginx

八、history‑252:同步服务开机自启管控

bash

sudo systemctl enable tunasync-manager tunasync-worker #开启开机启动
sudo systemctl disable tunasync-manager tunasync-worker #关闭开机启动

最终设定:tunasync 同步服务禁止开机自启,服务器重启后需要手动启动 manager、worker

九、整套故障‑整改‑业务部署完整流程总结

  1. 故障源头:手机远程修改 swap 交换分区,关机重启之后磁盘挂载错乱;普通用户占用 /home 分区、sda1 磁盘空间临近爆满,/home 目录文件无法展示;

  2. 故障排查:手动挂载 sda1 确认硬盘数据完好,清理 Docker 缓存、无用安装包释放磁盘空间;

  3. 磁盘重构:1.8T sda 硬盘拆分为双分区,sda1 (500G)=/home 用户目录、sda2 (1.3T)= 独立镜像分区 /opt/mirror;

  4. 私有仓库整改:备份 Harbor 全部配置,多次调整容器数据存储路径;

  5. 镜像同步迁移:Tunasync 同步工作目录从 /home 迁移至独立大容量分区,配置 4 条软件源同步任务;

  6. 内网网站搭建:Nginx 80 端口指向镜像目录开启目录浏览,保留两个 HTTPS 反向代理端口;

  7. 服务规则:镜像同步服务关闭开机自启,每次重启服务器手动启动同步程序。

十、本次故障吸取的操作教训

  1. 手机远程操作 swap 交换分区、磁盘挂载、fstab 配置等高风险操作极易出错,优先电脑终端操作;

  2. 普通用户处在 /home 家目录会锁住分区,卸载、重装挂载 /home 必须切换 root 用户;

  3. 修改 fstab 开机挂载配置之后,必须先执行 mount‑a 测试,禁止直接重启服务器

  4. 大容量镜像同步业务,一定要单独分配独立磁盘分区存放,不要和用户家目录共用分区,规避挂载故障造成镜像站瘫痪;

  5. /home 分区磁盘占用高于 80% 及时清理 Docker 缓存、老旧离线包、重复备份文件,磁盘满载会引发目录文件无法查看;

  6. 分区格式化前必须 umount 卸载分区,否则会提示设备繁忙,无法执行 mkfs.ext4。