,区分故障起因、前期业务操作、故障出现、磁盘挂载排查、硬盘重新分区规划、数据迁移、Harbor 仓库路径整改、Tunasync 镜像同步部署、Nginx 镜像站点配置、最终服务管控,分层书写,每一步对应你执行过的指令,逻辑清晰无遗漏。
一、服务器基础硬件概况(lsblk 查询得出)
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,专门存放内网镜像同步资源、同步日志
sdb 59.6G 系统盘,LVM 架构
sdb1:1M 空闲分区
sdb2:2G /boot 启动分区
sdb3 LVM 卷组
ubuntu‑vg‑lv‑0(55G):根目录
/,存放操作系统、Nginx、证书、系统日志ubuntu‑vg‑lv‑1(2G):swap 交换分区
磁盘规划目的:系统、用户资料、镜像文件三块存储彻底隔离,防止镜像大容量数据塞满系统盘。
二、故障发生完整起因
你使用手机远程操控服务器,修改新增 swap 交换分区相关配置,配置操作不完善之后直接关机;
重启开机之后系统磁盘挂载顺序错乱;
普通用户
shitou登录终端,工作目录处于/home,进程占用 sda1 分区,系统无法正常完成 sda1 挂载;前期 /home 分区磁盘使用率达到 79%,空间临近爆满,进一步造成 /home 目录内所有业务文件肉眼空白;
原先部署在 /home/mirror 下面的 apt 镜像、iso 同步文件无法访问,内网镜像网站直接失效;
硬盘所有数据没有丢失、没有被删除,只是分区挂载失败,系统只展示根目录下面空的 /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)
进入 harbor 工作目录,停止 harbor 容器
bash
cd /home/shitou/harbor
ls
docker‑compose down
sudo docker‑compose down
docker compose down
备份全部 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/
最开始打算将 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
后续再次调整路径,把 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
九、整套故障‑整改‑业务部署完整流程总结
故障源头:手机远程修改 swap 交换分区,关机重启之后磁盘挂载错乱;普通用户占用 /home 分区、sda1 磁盘空间临近爆满,/home 目录文件无法展示;
故障排查:手动挂载 sda1 确认硬盘数据完好,清理 Docker 缓存、无用安装包释放磁盘空间;
磁盘重构:1.8T sda 硬盘拆分为双分区,sda1 (500G)=/home 用户目录、sda2 (1.3T)= 独立镜像分区 /opt/mirror;
私有仓库整改:备份 Harbor 全部配置,多次调整容器数据存储路径;
镜像同步迁移:Tunasync 同步工作目录从 /home 迁移至独立大容量分区,配置 4 条软件源同步任务;
内网网站搭建:Nginx 80 端口指向镜像目录开启目录浏览,保留两个 HTTPS 反向代理端口;
服务规则:镜像同步服务关闭开机自启,每次重启服务器手动启动同步程序。
十、本次故障吸取的操作教训
手机远程操作 swap 交换分区、磁盘挂载、fstab 配置等高风险操作极易出错,优先电脑终端操作;
普通用户处在 /home 家目录会锁住分区,卸载、重装挂载 /home 必须切换 root 用户;
修改 fstab 开机挂载配置之后,必须先执行 mount‑a 测试,禁止直接重启服务器;
大容量镜像同步业务,一定要单独分配独立磁盘分区存放,不要和用户家目录共用分区,规避挂载故障造成镜像站瘫痪;
/home 分区磁盘占用高于 80% 及时清理 Docker 缓存、老旧离线包、重复备份文件,磁盘满载会引发目录文件无法查看;
分区格式化前必须 umount 卸载分区,否则会提示设备繁忙,无法执行 mkfs.ext4。
处理故障命令简单梳理
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法