浅析 /home 分区挂载异常问题
一、本机硬盘硬件结构(lsblk 真实信息)
plaintext
sda(1.8T整块硬盘,分出2个独立分区)
├─sda1 500G → 挂载点:/home(用户资料分区)
└─sda2 1.3T → 挂载点:/opt/mirror(镜像文件专属分区)
sdb(系统盘 59.6G LVM结构)
├─sdb1 1M 空闲分区
├─sdb2 2G /boot启动分区
└─sdb3 LVM卷组
├─ubuntu--vg-lv--0 55G 根目录 / 系统盘
└─ubuntu--vg-lv--1 2G 交换分区
分区 UUID(你本机实际编号,直接复制写入 fstab)
/dev/sda1(/home 分区):2b027fb4-58fe-48c5-9ac1-da5c7bd058a9/dev/sda2(/opt/mirror 镜像分区):ab871d9b-449d-4b14-b40b-4df420fa6ebd
磁盘规划
sda1‑500G
/home:存放用户配置、文档、旧镜像备份、日常文件,重装系统用户数据不会丢失sda2‑1.3T
/opt/mirror:专门存放 ISO 系统镜像、apt 软件源、安装包,作为 Nginx 文件下载站点根目录sdb 为系统盘,独立负责 Ubuntu 系统、Nginx、SSL 证书、日志,三类存储空间完全隔离
二、两套部署方案
方案 1:免分区简易方案(备用测试)
适合临时调试,不对硬盘重新分区,镜像存放于系统盘用户目录
bash
#镜像备份目录
/home/shitou/mirror_backup
Nginx 站点根目录临时配置:root /home/shitou/mirror_backup;
优点:操作简单,无挂载出错风险
缺点:占用系统盘空间,镜像堆积容易塞满系统盘造成服务器故障
方案 2:正式双分区方案(你当前正在使用,sda 硬盘切割双分区)
完整操作日志(跟着你执行顺序整理,包含报错处理)
1. 查看磁盘分区信息
bash
lsblk
sudo fdisk -l
2. 卸载旧分区(sda2 原先处于挂载状态,格式化必须先卸载)
bash
#卸载镜像分区
sudo umount /dev/sda2
3. 格式化 sda2 为 ext4 文件系统
bash
#报错:/dev/sda2 is mounted; will not make a filesystem here!
#报错原因:分区还处于挂载状态,上面umount卸载之后再次执行
sudo mkfs.ext4 /dev/sda2
4. 读取两个分区的 UUID
bash
blkid /dev/sda1
blkid /dev/sda2
获取到本机固定 UUID:
sda1:
2b027fb4-58fe-48c5-9ac1-da5c7bd058a9sda2:
ab871d9b-449d-4b14-b40b-4df420fa6ebd
5. 确认挂载目录
bash
sudo mkdir -p /home
sudo mkdir -p /opt/mirror
/home 已经由 sda1 挂载,仅需要配置开机自动挂载
6. 编辑开机自动挂载文件 /etc/fstab
bash
sudo nano /etc/fstab
在文件末尾粘贴下面两行(直接使用你的本机 UUID)
plaintext
UUID=2b027fb4-58fe-48c5-9ac1-da5c7bd058a9 /home ext4 defaults 0 2
UUID=ab871d9b-449d-4b14-b40b-4df420fa6ebd /opt/mirror ext4 defaults 0 2
Ctrl+O保存、Ctrl+X退出编辑器
7. 测试挂载配置(重中之重,防止 fstab 出错导致开机无法进入系统)
bash
mount -a
df -h
没有报错即代表挂载配置正常
8. 迁移文件
/home 分区:用户资料已经存放在 sda1 分区,无需迁移
镜像文件拷贝至独立镜像分区
bash
#复制镜像资源
sudo cp -r /home/shitou/镜像文件/* /opt/mirror/
#配置Nginx访问权限
sudo chown -R www-data:www-data /opt/mirror
sudo chmod -R 755 /opt/mirror
三、Nginx 完整站点配置 /etc/nginx/sites-available/default
nginx
#80端口 读取1.3T独立镜像分区 /opt/mirror,开启目录浏览
server {
listen 80 default_server;
listen [::]:80 default_server;
root /opt/mirror;
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;
}
}
四、Nginx 启动、启用站点、全套排错命令
bash
#创建站点软链接,启用default配置
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
#校验配置语法
sudo nginx -t
#启动Nginx服务
sudo systemctl start nginx
#设置开机自启
sudo systemctl enable nginx
#查看运行状态
sudo systemctl status nginx
五、完整踩坑日志
报错 1:/dev/sda2 is mounted; will not make a filesystem here!
故障原因:分区处于挂载占用状态,无法执行格式化
解决:先执行
sudo umount /dev/sda2卸载分区之后再格式化
报错 2:nginx.service is not active, cannot reload
故障原因:Nginx 服务尚未启动,reload 仅支持正在运行的服务
解决:
sudo systemctl start nginx先启动服务
报错 3:浏览器访问192.168.31.19:8081出现 404 Not Found
Nginx 镜像站点仅监听 80 端口,正确访问地址:
http://192.168.31.19排查站点软链接是否创建、
/opt/mirror目录权限、目录内是否存放文件
重新开启镜像站就可以了,
故障处置第一步:磁盘重新分区、修复 /home 挂载
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法