Ubuntu Server 新手教程:扩展系统盘 + 挂载 NTFS 数据盘(Windows 通用)

6 阅读6分钟

Ubuntu Server 新手教程:扩展系统盘 + 挂载 NTFS 数据盘(Windows 通用)

适合 Linux 新手,一步步教会你如何充分利用硬盘空间

背景问题

安装 Ubuntu Server 时,如果使用默认分区设置,可能会出现:

  • 128GB 硬盘只用了 58GB,剩余空间浪费
  • 额外的大容量机械硬盘不知道如何使用
  • 希望机械硬盘能在 Windows 和 Ubuntu 之间通用

本文将完整解决这些问题。

最终效果

  • 系统盘从 58GB 扩展到 115GB(充分利用)
  • 1TB 机械硬盘格式化为 NTFS,挂载到 /data
  • 硬盘可以在 Windows 电脑上直接读写
  • 开机自动挂载大容量机械硬盘,无需手动操作

第一部分:检查当前状态

# 查看磁盘分区情况
lsblk

# 查看磁盘使用情况
df -h

# 查看 LVM 逻辑卷信息(如果使用 LVM)
sudo lvdisplay

第二部分:扩展系统盘(LVM)

下面命令扩展的是整个根目录 /,不是指定某个文件夹。 类比:

土地总面积:119GB
已盖房子:58GB(当前系统用的)
空闲土地:58GB(没盖房子的空地)

lvextend 命令的作用

  • 把房子扩建到整个土地大小(58GB → 116GB)
  • 房子内部空间(/dev、/home、/etc等)自动变大
  • 房子的门牌号还是 /(根目录)

2.1 扩展逻辑卷

# 使用所有剩余空间扩展逻辑卷
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

2.2 扩展文件系统

# 调整文件系统大小(ext4 格式)
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

2.3 验证扩展结果

df -h /
# 应该看到根分区从 58G 变成约 115G

第三部分:挂载 NTFS 数据盘(Windows 通用)

NTFS 是 Linux 和 Windows 都能识别的文件格式,所以不用担心数据盘在 Windows 系统中无法使用的问题。

3.1 安装 NTFS 支持驱动

sudo apt update && sudo apt install ntfs-3g -y

3.2 创建分区

sudo fdisk /dev/sda

在 fdisk 中依次输入(每行按回车):

n     # 新建分区
p     # 主分区
1     # 分区编号 1
回车   # 默认起始位置
回车   # 默认结束位置(使用全部空间)
w     # 写入并退出

3.3 格式化为 NTFS

sudo mkfs.ntfs -f /dev/sda1

3.4 创建挂载点并挂载

# 创建挂载目录
sudo mkdir -p /data

# 临时挂载
sudo mount -t ntfs-3g /dev/sda1 /data

# 设置用户权限
sudo chown -R $USER:$USER /data

3.5 测试读写

echo "Hello from Ubuntu Server" > /data/test.txt && cat /data/test.txt

3.6 获取 UUID 并设置开机自动挂载

# 获取硬盘 UUID
sudo blkid /dev/sda1

# 备份 fstab 配置文件
sudo cp /etc/fstab /etc/fstab.backup

# 添加开机挂载配置(请替换 UUID)
echo 'UUID=你的UUID /data ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0' | sudo tee -a /etc/fstab

# 验证配置
sudo mount -a

3.7 重启测试

sudo reboot
# 重启后运行 df -h /data 确认挂载成功

验证最终结果

lsblk
df -h

预期输出:

sda                   931.5G
└─sda1                931.5G  /data
sdb                   119.2G
└─sdb3                116.2G
  └─ubuntu--vg-ubuntu--lv 116.2G  /

/dev/sda1             932G   94M  932G   1% /data
/dev/mapper/ubuntu--vg-ubuntu--lv  115G  6.7G  103G   7% /

常见问题

Q: 扩展系统盘时提示 "No free space"?

sudo vgdisplay  # 查看卷组剩余空间

Q: 挂载后无法写入文件?

sudo chown -R $USER:$USER /data

Q: 如何安全拔出硬盘?

sudo umount /data  # 先卸载
# 然后再拔硬盘

Q: 硬盘插到 Windows 上不识别?

确保格式化为 NTFS(本文已采用),Windows 原生支持。


命令速查表

用途命令
查看磁盘lsblk
查看空间df -h
查看 UUIDsudo blkid /dev/sda1
手动挂载sudo mount /dev/sda1 /data
手动卸载sudo umount /data
查看 LVMsudo lvdisplay

扩展

一键脚本(带详细注释)

保存为 setup-storage.sh

#!/bin/bash
# ============================================================
# 脚本名称: setup-storage.sh
# 功能: 扩展 Ubuntu Server 系统盘 + 挂载 NTFS 数据盘
# 适用: Ubuntu Server (LVM 分区 + 额外硬盘)
# 作者: 自动生成
# 版本: 1.0
# ============================================================

set -e  # 遇到错误立即退出

# 颜色定义(让输出更好看)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的消息
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 确认操作
confirm() {
    read -p "$1 [y/N]: " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        print_error "操作已取消"
        exit 1
    fi
}

# ============================================================
# 第一部分:检查当前环境
# ============================================================

print_info "开始检查系统环境..."

# 检查是否为 root 或 sudo 权限
if [[ $EUID -ne 0 ]]; then
    print_warning "需要 sudo 权限,后续命令将使用 sudo"
fi

# 检查是否使用 LVM
if ! command -v lvdisplay &> /dev/null; then
    print_error "未检测到 LVM,此脚本需要 LVM 分区方案"
    exit 1
fi

# 获取逻辑卷信息
LV_PATH=$(sudo lvdisplay | grep "LV Path" | awk '{print $3}' | head -1)
VG_NAME=$(sudo lvdisplay | grep "VG Name" | awk '{print $3}' | head -1)

if [[ -z "$LV_PATH" ]]; then
    print_error "无法检测到 LVM 逻辑卷"
    exit 1
fi

print_success "检测到逻辑卷: $LV_PATH"
print_success "检测到卷组: $VG_NAME"

# 显示当前磁盘状态
print_info "当前磁盘状态:"
lsblk

# ============================================================
# 第二部分:扩展系统盘
# ============================================================

echo ""
print_info "========== 开始扩展系统盘 =========="

confirm "是否要扩展系统盘(使用所有剩余空间)?"

# 扩展逻辑卷
print_info "正在扩展逻辑卷..."
sudo lvextend -l +100%FREE "$LV_PATH"
print_success "逻辑卷扩展完成"

# 扩展文件系统
print_info "正在扩展文件系统..."
sudo resize2fs "$LV_PATH"
print_success "文件系统扩展完成"

# 验证
print_info "验证扩展结果:"
df -h /

print_success "系统盘扩展完成!"

# ============================================================
# 第三部分:挂载 NTFS 数据盘
# ============================================================

echo ""
print_info "========== 开始配置数据盘 =========="

# 检测数据盘(默认识别 sda)
DATA_DISK="/dev/sda"

if [[ ! -b "$DATA_DISK" ]]; then
    print_error "未检测到 $DATA_DISK 硬盘"
    exit 1
fi

print_info "检测到数据盘: $DATA_DISK"
print_warning "此操作将格式化 $DATA_DISK,所有数据将丢失!"
confirm "是否继续配置数据盘?"

# 安装 NTFS 驱动
print_info "安装 NTFS 驱动..."
sudo apt update
sudo apt install ntfs-3g -y
print_success "NTFS 驱动安装完成"

# 创建分区
print_info "正在创建分区..."
sudo fdisk "$DATA_DISK" << EOF
n
p
1


w
EOF
print_success "分区创建完成"

# 等待分区表更新
sleep 2

# 格式化
print_info "正在格式化为 NTFS..."
sudo mkfs.ntfs -f "${DATA_DISK}1"
print_success "格式化完成"

# 创建挂载点
MOUNT_POINT="/data"
print_info "创建挂载点: $MOUNT_POINT"
sudo mkdir -p "$MOUNT_POINT"

# 挂载
print_info "正在挂载硬盘..."
sudo mount -t ntfs-3g "${DATA_DISK}1" "$MOUNT_POINT"

# 设置权限
print_info "设置权限..."
sudo chown -R "$USER:$USER" "$MOUNT_POINT"
print_success "权限设置完成"

# 测试读写
print_info "测试读写..."
echo "Hello from Ubuntu Server - $(date)" | sudo tee "$MOUNT_POINT/test.txt" > /dev/null
if cat "$MOUNT_POINT/test.txt" | grep -q "Hello"; then
    print_success "读写测试通过"
    sudo rm "$MOUNT_POINT/test.txt"
else
    print_error "读写测试失败"
    exit 1
fi

# 获取 UUID
UUID=$(sudo blkid -s UUID -o value "${DATA_DISK}1")
print_success "硬盘 UUID: $UUID"

# 备份 fstab
print_info "备份 /etc/fstab..."
sudo cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S)

# 添加到 fstab
print_info "配置开机自动挂载..."
echo "UUID=$UUID $MOUNT_POINT ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0" | sudo tee -a /etc/fstab

# 验证 fstab
print_info "验证配置..."
if sudo mount -a 2>&1; then
    print_success "fstab 配置正确"
else
    print_error "fstab 配置错误,正在恢复备份..."
    sudo mv /etc/fstab.backup.* /etc/fstab
    exit 1
fi

# ============================================================
# 第四部分:最终验证
# ============================================================

echo ""
print_info "========== 最终验证 =========="

print_info "磁盘分区状态:"
lsblk

echo ""
print_info "磁盘使用情况:"
df -h | grep -E "(Filesystem|/dev/sda|/dev/mapper)"

echo ""
print_success "=========================================="
print_success "配置完成!"
print_success "=========================================="
echo ""
print_info "配置摘要:"
echo "  - 系统盘: $(df -h / | tail -1 | awk '{print $2}')"
echo "  - 数据盘: $(df -h /data | tail -1 | awk '{print $2}')"
echo "  - 数据盘 UUID: $UUID"
echo "  - 数据盘挂载点: $MOUNT_POINT"
echo ""
print_warning "建议重启服务器验证开机自动挂载: sudo reboot"
print_warning "重启后运行: df -h /data"

# ============================================================
# 可选:重启确认
# ============================================================

echo ""
read -p "是否立即重启?(重启后验证开机挂载) [y/N]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    print_info "系统将在 3 秒后重启..."
    sleep 3
    sudo reboot
else
    print_info "请稍后手动重启验证: sudo reboot"
fi

脚本使用方法

1. 创建脚本文件

nano setup-storage.sh

2. 粘贴上面的脚本内容,保存退出(Ctrl+O, Enter, Ctrl+X)

3. 添加执行权限

chmod +x setup-storage.sh

4. 运行脚本

./setup-storage.sh

5. 按提示确认操作

脚本会:

  • 自动检测 LVM 配置
  • 询问是否扩展系统盘
  • 询问是否格式化数据盘
  • 自动完成所有配置
  • 最后询问是否重启

脚本安全特性

特性说明
set -e遇到错误自动停止
备份 fstab自动备份配置文件
读写测试挂载后自动测试
颜色输出清晰区分信息/成功/警告/错误
二次确认危险操作需要确认