Proxmox VE 新硬盘添加与配置 💾 本指南详细介绍如何在 PVE 系统中添加新硬盘,包括分区、格式
Proxmox VE 新硬盘添加与配置 💾
本指南详细介绍如何在 PVE 系统中添加新硬盘,包括分区、格式化、挂载和自动挂载配置,以及如何将其集成到 PVE 存储系统中。🚀
📖 导航目录
🔍 一、查看现有硬盘
1. 查看所有硬盘信息
1
2
3
4
5
6
7
8
|
# 查看所有块设备的信息,包括挂载点和文件系统
lsblk -f
# 查看更详细的设备树
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE,LABEL,UUID
# 只显示磁盘设备(排除分区和循环设备)
lsblk -d -o NAME,SIZE,TYPE,MODEL,SERIAL
|
2. 详细硬盘信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 显示所有硬盘的详细分区信息
fdisk -l
# 查看特定硬盘详情
fdisk -l /dev/sda
# 使用 parted 查看更详细的信息
parted -l
# 查看硬盘型号和序列号
hdparm -i /dev/sda | grep -E "Model|Serial"
# 检查硬盘健康状态
smartctl -a /dev/sda | grep -E "Model|Serial|Temperature|Reallocated|Pending|Uncorrectable"
|
3. 识别新硬盘
1
2
3
4
5
6
7
8
9
|
# 比较插入新硬盘前后的设备列表
ls /dev/sd* > /tmp/before.txt
# 插入硬盘后
ls /dev/sd* > /tmp/after.txt
diff /tmp/before.txt /tmp/after.txt
# 或者查看内核日志识别新设备
dmesg | grep -i sd
tail -f /var/log/syslog | grep -i attached
|
🛠️ 二、硬盘分区
1. 进入 fdisk 分区工具
1
2
|
# 对新硬盘进行分区(以 /dev/sdb 为例)
fdisk /dev/sdb
|
2. fdisk 常用命令
在 fdisk 交互界面中:
命令 |
说明 |
中文解释 |
m |
显示帮助菜单 |
列出所有可用命令 |
p |
打印当前分区表 |
显示现有分区情况 |
n |
创建新分区 |
新建一个分区 |
p |
创建主分区 |
创建主分区(最多4个) |
e |
创建扩展分区 |
创建扩展分区 |
l |
列出分区类型 |
显示所有可用的分区类型 |
d |
删除分区 |
删除指定分区 |
t |
改变分区类型 |
修改分区类型 |
w |
保存并退出 |
保存更改并退出 |
q |
不保存退出 |
放弃更改并退出 |
3. 创建分区步骤
1
2
3
4
5
6
7
|
# 在 fdisk 中的操作顺序:
1. 输入 `n` # 创建新分区
2. 输入 `p` # 选择主分区
3. 按回车 # 使用默认分区号 (1)
4. 按回车 # 使用默认起始扇区
5. 按回车 # 使用所有可用空间
6. 输入 `w` # 保存并退出
|
4. 使用 parted 进行高级分区
1
2
3
4
5
6
7
8
|
# 对于大于2TB的硬盘,使用 parted
parted /dev/sdb
# 在 parted 中的操作:
(parted) mklabel gpt # 创建 GPT 分区表
(parted) mkpart primary 0% 100% # 创建占用整个磁盘的分区
(parted) print # 打印分区信息
(parted) quit # 退出
|
5. 使用脚本自动化分区
1
2
3
4
5
6
7
8
9
10
11
12
|
# 使用 sfdisk 进行自动化分区
echo 'type=83' | sfdisk /dev/sdb
# 或者创建更复杂的分区方案
cat > partition.sfdisk << EOF
label: gpt
,10G,LVM
,20G
,+
EOF
sfdisk /dev/sdb < partition.sfdisk
|
💽 三、格式化硬盘
1. 格式化分区
1
2
3
4
5
6
7
8
|
# 格式化为 ext4 文件系统
mkfs -t ext4 /dev/sdb1
# 或者使用更详细的命令
mkfs.ext4 /dev/sdb1
# 对于大容量硬盘,可以使用更大的inode比例
mkfs.ext4 -i 2048 /dev/sdb1
|
2. 格式化选项(可选)
1
2
3
4
5
6
7
8
9
10
11
|
# 添加卷标
mkfs.ext4 -L "pve_data" /dev/sdb1
# 设置保留块比例为 0%(最大化可用空间)
mkfs.ext4 -m 0 /dev/sdb1
# 使用特定块大小(性能优化)
mkfs.ext4 -b 4096 /dev/sdb1
# 强制格式化(即使设备已挂载)
mkfs.ext4 -F /dev/sdb1
|
3. 其他文件系统格式
1
2
3
4
5
6
7
8
|
# 格式化为 XFS 文件系统(适合大文件)
mkfs.xfs -f /dev/sdb1
# 格式化为 Btrfs 文件系统(高级特性)
mkfs.btrfs -f /dev/sdb1
# 格式化为 NTFS 文件系统(Windows 兼容)
mkfs.ntfs -f /dev/sdb1
|
4. 验证格式化
1
2
3
4
5
6
7
8
9
10
11
|
# 检查文件系统
blkid /dev/sdb1
# 查看详细信息
tune2fs -l /dev/sdb1 | head -20
# 检查文件系统完整性
fsck -f /dev/sdb1
# 查看磁盘空间使用情况(格式化后)
df -h /dev/sdb1
|
📂 四、挂载硬盘
1. 创建挂载点
1
2
3
4
5
6
7
8
|
# 创建挂载目录
mkdir -p /mnt/sdb1
# 或者使用更有意义的名称
mkdir -p /mnt/pve-data
# 创建多层目录结构
mkdir -p /mnt/storage/{backup,iso,template,images}
|
2. 手动挂载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 挂载分区到目录
mount -t ext4 /dev/sdb1 /mnt/sdb1
# 使用特定挂载选项
mount -t ext4 -o noatime,nodiratime /dev/sdb1 /mnt/sdb1
# 验证挂载
df -h /mnt/sdb1
# 查看详细挂载信息
mount | grep sdb1
# 检查目录权限
ls -ld /mnt/sdb1
|
3. 设置权限
1
2
3
4
5
6
7
8
9
10
11
12
|
# 设置合适的权限
chmod 755 /mnt/sdb1
chown root:root /mnt/sdb1
# 创建常用子目录并设置权限
mkdir -p /mnt/sdb1/{backup,iso,template,images}
chmod 755 /mnt/sdb1/*
chown root:root /mnt/sdb1/*
# 为特定用户或组设置权限
chown -R nobody:nogroup /mnt/sdb1/backup
chmod 770 /mnt/sdb1/backup
|
🔄 五、配置开机自动挂载
1. 编辑 fstab 文件
1
2
3
4
5
6
7
8
9
|
# 备份原有 fstab 文件
cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d)
# 添加自动挂载配置到 /etc/fstab
echo '/dev/sdb1 /mnt/sdb1 ext4 defaults,nofail,x-systemd.device-timeout=15s 0 0' >> /etc/fstab
# 或者使用 UUID(推荐)
UUID=$(blkid -s UUID -o value /dev/sdb1)
echo "UUID=$UUID /mnt/sdb1 ext4 defaults,nofail,x-systemd.device-timeout=15s 0 0" >> /etc/fstab
|
2. fstab 参数解释
1
2
3
4
5
6
7
8
|
# 配置项说明:
# /dev/sdb1 或 UUID=... - 设备路径或唯一标识
# /mnt/sdb1 - 挂载点
# ext4 - 文件系统类型
# defaults - 默认挂载选项
# nofail - 启动时如果设备不存在也不报错
# x-systemd.device-timeout=15s - 设备超时时间
# 0 0 - dump 和 fsck 选项
|
3. 其他有用的挂载选项
1
2
3
4
5
6
7
8
|
# 性能优化选项
defaults,noatime,nodiratime,data=writeback
# 安全选项
defaults,nosuid,nodev,noexec
# 网络文件系统选项
defaults,_netdev,auto
|
4. 测试 fstab 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 测试 fstab 配置是否正确
mount -a
# 如果出现错误,检查并修复
mount -a 2>&1 | grep -i error
# 验证自动挂载
umount /mnt/sdb1
systemctl daemon-reload
systemctl restart local-fs.target
# 检查启动时挂载
systemctl status local-fs.target
|
🗑️ 六、取消挂载
1. 安全卸载
1
2
3
4
5
6
7
8
9
10
11
12
|
# 卸载分区
umount /dev/sdb1
# 或者通过挂载点卸载
umount /mnt/sdb1
# 检查是否卸载成功
df -h | grep sdb1
# 查看哪些进程正在使用挂载点
lsof /mnt/sdb1
fuser -vm /mnt/sdb1
|
2. 强制卸载(如果需要)
1
2
3
4
5
6
7
8
9
10
11
|
# 如果设备忙,强制卸载
umount -f /mnt/sdb1
# 或者使用 lazy unmount
umount -l /mnt/sdb1
# 终止使用挂载点的进程
fuser -km /mnt/sdb1
# 然后再次尝试卸载
umount /mnt/sdb1
|
3. 从 fstab 中移除配置
1
2
3
4
5
6
7
|
# 移除 fstab 中的挂载配置
sed -i '/\/mnt\/sdb1/d' /etc/fstab
# 或者备份并编辑文件
cp /etc/fstab /etc/fstab.modified
vi /etc/fstab.modified
mv /etc/fstab.modified /etc/fstab
|
⚙️ 七、高级配置
1. 使用 UUID 挂载(推荐)
1
2
3
4
5
6
7
8
9
10
|
# 获取分区的 UUID
blkid /dev/sdb1
# 使用 UUID 替换设备路径
UUID=$(blkid -s UUID -o value /dev/sdb1)
echo "UUID=$UUID /mnt/sdb1 ext4 defaults,nofail 0 0" >> /etc/fstab
# 验证 UUID 挂载
umount /mnt/sdb1
mount -U $UUID /mnt/sdb1
|
2. 挂载选项优化
1
2
3
4
5
6
7
8
9
10
|
# 性能优化挂载选项
cat >> /etc/fstab << EOF
/dev/sdb1 /mnt/sdb1 ext4 defaults,noatime,nodiratime,data=writeback,commit=60 0 0
EOF
# 重新挂载应用新选项
mount -o remount /mnt/sdb1
# 检查当前挂载选项
mount | grep sdb1
|
3. 创建符号链接
1
2
3
4
5
6
7
8
9
10
|
# 创建方便的符号链接
ln -sf /mnt/sdb1 /pve-data
# 验证链接
ls -la /pve-data
# 为不同用途创建多个链接
ln -sf /mnt/sdb1/backup /pve-backup
ln -sf /mnt/sdb1/iso /pve-iso
ln -sf /mnt/sdb1/template /pve-template
|
4. 配置磁盘调度器
1
2
3
4
5
6
7
8
9
10
11
12
|
# 查看当前调度器
cat /sys/block/sdb/queue/scheduler
# 修改调度器(例如改为 deadline)
echo deadline > /sys/block/sdb/queue/scheduler
# 永久修改调度器
echo 'ACTION=="add|change", KERNEL=="sdb", ATTR{queue/scheduler}="deadline"' > /etc/udev/rules.d/60-ioscheduler.rules
# 重新加载 udev 规则
udevadm control --reload-rules
udevadm trigger
|
🔧 八、PVE 存储配置
1. 添加为 PVE 存储(Web 界面)
- 登录 PVE Web 管理界面
- 选择数据中心 → 存储
- 点击"添加" → “目录”
- 填写信息:
- ID: sdb1-storage(唯一标识符)
- 目录: /mnt/sdb1
- 内容: 选择需要的类型(磁盘镜像、ISO、备份等)
- 节点: 选择可用节点或所有节点
- 点击"添加"
2. 命令行添加存储
1
2
3
4
5
6
7
8
9
10
11
|
# 使用命令行添加存储
pvesm add dir sdb1-storage --path /mnt/sdb1 --content images,iso,backup
# 添加特定类型的存储
pvesm add dir sdb1-images --path /mnt/sdb1/images --content images
pvesm add dir sdb1-iso --path /mnt/sdb1/iso --content iso
pvesm add dir sdb1-backup --path /mnt/sdb1/backup --content backup
# 验证存储添加
pvesm status
pvesm list
|
3. 配置存储选项
1
2
3
4
5
6
7
8
9
10
11
|
# 设置存储选项
pvesm set sdb1-storage --maxfiles 0 # 不限制文件数
# 查看存储配置
pvesm config sdb1-storage
# 启用共享存储
pvesm set sdb1-storage --shared 1
# 设置存储权限
pvesm set sdb1-storage --nodes node1,node2
|
4. 使用存储
1
2
3
4
5
6
7
8
9
10
11
12
|
# 创建虚拟机并使用新存储
qm create 100 --name test-vm --storage sdb1-storage
# 上传 ISO 镜像到存储
qm importdisk 100 /path/to/iso.iso sdb1-storage
# 备份虚拟机到新存储
vzdump 100 --storage sdb1-backup
# 查看存储使用情况
pvesm status
df -h /mnt/sdb1
|
⚠️ 九、注意事项
1. 安全警告
1
2
3
4
5
6
7
8
9
10
11
12
|
# 不要挂载系统关键目录
# 确保有足够的权限
# 定期检查磁盘健康
# 检查磁盘健康
smartctl -a /dev/sdb
# 监控磁盘温度
smartctl -A /dev/sdb | grep -i temperature
# 定期检查文件系统
fsck -n /dev/sdb1
|
2. 性能考虑
1
2
3
4
5
6
7
8
9
10
|
# 对于 SSD 硬盘,使用适当的挂载选项
echo noop > /sys/block/sdb/queue/scheduler # SSD 调度器
echo 0 > /proc/sys/vm/dirty_background_ratio
echo 0 > /proc/sys/vm/dirty_ratio
# 启用 TRIM(SSD 专用)
fstrim /mnt/sdb1
# 定期清理缓存
sync && echo 3 > /proc/sys/vm/drop_caches
|
3. 备份重要数据
1
2
3
4
5
6
7
8
|
# 在操作前备份重要数据
tar -czf /root/fstab-backup-$(date +%Y%m%d).tar.gz /etc/fstab
# 备份分区表
sfdisk -d /dev/sdb > /root/sdb-partition-backup.txt
# 定期备份存储配置
pvesm status > /root/pve-storage-status-$(date +%Y%m%d).txt
|
4. 监控和维护
1
2
3
4
5
6
7
8
9
10
11
|
# 设置磁盘监控
echo '#!/bin/bash
USAGE=$(df /mnt/sdb1 | awk "NR==2{print $5}" | sed "s/%//")
if [ $USAGE -gt 90 ]; then
echo "警告: 磁盘空间不足 ${USAGE}%" | logger -t disk-monitor
fi' > /usr/local/bin/disk-alert.sh
chmod +x /usr/local/bin/disk-alert.sh
# 添加到计划任务
echo "*/30 * * * * /usr/local/bin/disk-alert.sh" >> /etc/crontab
|
💡 十、完整操作示例
新硬盘初始化脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/bin/bash
# PVE 新硬盘初始化脚本
set -e
DISK="/dev/sdb"
MOUNT_POINT="/mnt/pve-data"
STORAGE_ID="pve-data"
echo "正在初始化新硬盘 $DISK..."
# 1. 检查磁盘是否存在
if [ ! -b $DISK ]; then
echo "错误: 磁盘 $DISK 不存在!"
exit 1
fi
# 2. 分区
echo "创建分区..."
echo -e "n\np\n1\n\n\nw" | fdisk $DISK
partprobe $DISK
sleep 2
# 3. 格式化
echo "格式化分区..."
mkfs.ext4 -m 0 -L "pve_data" ${DISK}1
# 4. 创建挂载点
echo "创建挂载点..."
mkdir -p $MOUNT_POINT
# 5. 临时挂载
echo "临时挂载..."
mount ${DISK}1 $MOUNT_POINT
# 6. 创建子目录
mkdir -p $MOUNT_POINT/{images,iso,backup,template}
# 7. 配置自动挂载
echo "配置自动挂载..."
UUID=$(blkid -s UUID -o value ${DISK}1)
echo "UUID=$UUID $MOUNT_POINT ext4 defaults,nofail,x-systemd.device-timeout=15s 0 0" >> /etc/fstab
# 8. 添加为 PVE 存储
echo "添加为 PVE 存储..."
pvesm add dir $STORAGE_ID --path $MOUNT_POINT --content images,iso,backup
# 9. 设置权限
chmod 755 $MOUNT_POINT
chown root:root $MOUNT_POINT
echo "新硬盘初始化完成!"
echo "挂载点: $MOUNT_POINT"
echo "存储 ID: $STORAGE_ID"
df -h $MOUNT_POINT
pvesm status
|
使用脚本
1
2
3
4
5
6
7
8
9
10
11
|
# 下载脚本
curl -O https://example.com/pve-disk-init.sh
# 赋予执行权限
chmod +x pve-disk-init.sh
# 运行脚本(谨慎操作!)
./pve-disk-init.sh
# 或者直接运行
bash pve-disk-init.sh
|
验证脚本执行结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 检查挂载
df -h /mnt/pve-data
# 检查 fstab 配置
grep "pve-data" /etc/fstab
# 检查 PVE 存储
pvesm status
pvesm list
# 测试自动挂载
umount /mnt/pve-data
mount -a
df -h /mnt/pve-data
|
🎯 提示: 在生产环境中操作前,请确保已经备份重要数据,并确认操作的是正确的硬盘设备。建议先在测试环境中验证脚本和操作流程。
通过以上步骤,您应该能够成功在 PVE 中添加和配置新硬盘。如果遇到任何问题,可以参考相关日志文件或寻求社区帮助。