Skip to content

Linux磁盘挂载 ​

目标: 规范化多硬盘服务器的存储挂载,确保数据盘 (HDD) 正确挂载到 /srv/data。 警告: 磁盘操作涉及数据安全,请务必严格按照步骤执行。如果不确定,请先截图询问 AI。

1. 磁盘规划 ​

对于典型的 "SSD (系统) + HDD (数据)" 组合:

物理磁盘分区挂载点用途
SSD (系统盘)/dev/sda1 (通常)/操作系统, Docker Images, 配置文件
HDD (数据盘)/dev/sdb1 (通常)/srv/dataNextcloud 网盘数据, Jellyfin 媒体库, 数据库文件

2. 确认磁盘状态 (观察) ​

在操作前,先看清楚你有哪些盘。

bash
# 1. 查看块设备 (树状图,最直观)
lsblk
# 重点看 SIZE (容量) 和 MOUNTPOINT (挂载点)
# 找那个容量很大 (比如 1T/4T) 且 MOUNTPOINT 为空的设备,记下它的名字 (如 sdb)

# 2. 查看文件系统类型
sudo blkid
# 如果你的 HDD 已经格式化过,这里会显示 TYPE="ext4" 或 "ntfs"

3. 挂载步骤 (实操) ​

3.1 创建挂载点 ​

bash
sudo mkdir -p /srv/data

3.2 格式化磁盘 (仅限新盘!) ​

🛑 危险警告: 格式化会清空磁盘所有数据!

  • 如果你是从旧机器拆下来的盘,不要格式化,直接跳到 3.3!
  • 如果是刚买的全新空盘,执行下面命令。
bash
# 假设你的 HDD 是 /dev/sdb (请根据 lsblk 确认!)
# 格式化为 Linux 标准的 ext4 文件系统
sudo mkfs.ext4 /dev/sdb

3.3 临时挂载 (测试) ​

先试着挂载一下,看看能不能成。

bash
# 挂载 /dev/sdb 到 /srv/data
sudo mount /dev/sdb /srv/data

# 验证
df -h | grep data
# 应该能看到类似: /dev/sdb  1.8T  20K  1.8T   1% /srv/data

3.4 永久挂载 (修改 /etc/fstab) ​

这是最关键的一步。如果不配这个,重启后挂载就没了;配错了,系统可能起不来。

  1. 获取 UUID (唯一标识符,比 /dev/sdb 更靠谱):

    bash
    sudo blkid /dev/sdb
    # 复制输出中的 UUID="xxxx-xxxx-xxxx" 引号里的内容
  2. 备份 fstab (保命操作):

    bash
    sudo cp /etc/fstab /etc/fstab.bak
  3. 编辑 fstab:

    bash
    sudo nano /etc/fstab

    在文件末尾添加一行 (将 xxxx 替换为你的真实 UUID):

    text
    # Data Disk
    UUID=xxxx-xxxx-xxxx   /srv/data   ext4   defaults   0   2
    • 提示: nano 保存是 Ctrl+O, 回车确认, 退出是 Ctrl+X。
  4. 🛑 验证配置 (必做!): 千万不要直接重启! 先执行下面命令测试:

    bash
    sudo mount -a
    • 如果不报错: 恭喜,配置正确。
    • 如果报错: 不要重启! 立即检查 /etc/fstab 拼写,或者用 sudo mv /etc/fstab.bak /etc/fstab 还原备份。

4. 目录权限管理 (Permissions) ​

磁盘挂载好后,默认是 root 权限。为了让你的 Docker 容器和当前用户能读写,需要修改权限。

4.1 核心概念 ​

  • Owner (属主): 文件属于谁 (比如 allen)。
  • Group (属组): 文件属于哪个组 (通常也是 allen)。
  • Mode (模式): 读(r)、写(w)、执行(x)。

4.2 统一权限操作 ​

假设你的登录用户是 allen (请替换为你实际的用户名):

bash
# 1. 确认你的用户名
whoami
# 输出: allen

# 2. 将 /srv/data 的所有权改为你
# -R 表示递归 (连同里面的子文件夹一起改)
sudo chown -R allen:allen /srv/data

# 3. 赋予组写权限 (775)
# 这样不仅你是 owner 能写,同组的进程也能写 (便于 Docker 映射)
sudo chmod -R 775 /srv/data

4.3 验证权限 ​

bash
# 尝试创建一个文件
touch /srv/data/test_write.txt

# 查看文件详情
ls -l /srv/data/test_write.txt
# 应该显示: -rw-rw-r-- 1 allen allen ...

# 删除测试文件
rm /srv/data/test_write.txt

5. 常见问题 (Q&A) ​

  • Q: Docker 容器报错 Permission denied 怎么办?

    • A: 通常是因为容器内的用户 ID (UID) 和宿主机不一致。
    • 快速解法: sudo chmod -R 777 /srv/data/xxx (给所有人都开放权限,内网环境可接受)。
    • 标准解法: 查看容器文档,设置 PUID / PGID 环境变量为你的用户 ID (查看 ID 命令: id)。
  • Q: 开机进不去系统了 (Maintenance Mode)!

    • A: 说明 /etc/fstab 写错了。
    • 输入 root 密码进入终端。
    • 重新挂载根目录为读写: mount -o remount,rw /
    • 编辑 fstab: nano /etc/fstab,把刚刚加的那行删掉或注释掉 (#)。
    • 重启: reboot。

方舟 · Ark