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 -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 分区工具
2. fdisk 常用命令
在 fdisk 交互界面中:
命令 |
说明 |
中文解释 |
m |
显示帮助菜单 |
列出所有可用命令 |
p |
打印当前分区表 |
显示现有分区情况 |
n |
创建新分区 |
新建一个分区 |
p |
创建主分区 |
创建主分区(最多4个) |
e |
创建扩展分区 |
创建扩展分区 |
l |
列出分区类型 |
显示所有可用的分区类型 |
d |
删除分区 |
删除指定分区 |
t |
改变分区类型 |
修改分区类型 |
w |
保存并退出 |
保存更改并退出 |
q |
不保存退出 |
放弃更改并退出 |
3. 创建分区步骤
1 2 3 4 5 6 7
| 1. 输入 `n` 2. 输入 `p` 3. 按回车 4. 按回车 5. 按回车 6. 输入 `w`
|
4. 使用 parted 进行高级分区
1 2 3 4 5 6 7 8
| parted /dev/sdb
(parted) mklabel gpt (parted) mkpart primary 0% 100% (parted) print (parted) quit
|
5. 使用脚本自动化分区
1 2 3 4 5 6 7 8 9 10 11 12
| 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
| mkfs -t ext4 /dev/sdb1
mkfs.ext4 /dev/sdb1
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
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
| mkfs.xfs -f /dev/sdb1
mkfs.btrfs -f /dev/sdb1
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
| cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d)
echo '/dev/sdb1 /mnt/sdb1 ext4 defaults,nofail,x-systemd.device-timeout=15s 0 0' >> /etc/fstab
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 参数解释
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
| 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
umount -l /mnt/sdb1
fuser -km /mnt/sdb1
umount /mnt/sdb1
|
3. 从 fstab 中移除配置
1 2 3 4 5 6 7
| 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
| blkid /dev/sdb1
UUID=$(blkid -s UUID -o value /dev/sdb1) echo "UUID=$UUID /mnt/sdb1 ext4 defaults,nofail 0 0" >> /etc/fstab
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
echo deadline > /sys/block/sdb/queue/scheduler
echo 'ACTION=="add|change", KERNEL=="sdb", ATTR{queue/scheduler}="deadline"' > /etc/udev/rules.d/60-ioscheduler.rules
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
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
| echo noop > /sys/block/sdb/queue/scheduler echo 0 > /proc/sys/vm/dirty_background_ratio echo 0 > /proc/sys/vm/dirty_ratio
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
set -e
DISK="/dev/sdb" MOUNT_POINT="/mnt/pve-data" STORAGE_ID="pve-data"
echo "正在初始化新硬盘 $DISK..."
if [ ! -b $DISK ]; then echo "错误: 磁盘 $DISK 不存在!" exit 1 fi
echo "创建分区..." echo -e "n\np\n1\n\n\nw" | fdisk $DISK partprobe $DISK sleep 2
echo "格式化分区..." mkfs.ext4 -m 0 -L "pve_data" ${DISK}1
echo "创建挂载点..." mkdir -p $MOUNT_POINT
echo "临时挂载..." mount ${DISK}1 $MOUNT_POINT
mkdir -p $MOUNT_POINT/{images,iso,backup,template}
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
echo "添加为 PVE 存储..." pvesm add dir $STORAGE_ID --path $MOUNT_POINT --content images,iso,backup
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
grep "pve-data" /etc/fstab
pvesm status pvesm list
umount /mnt/pve-data mount -a df -h /mnt/pve-data
|
🎯 提示: 在生产环境中操作前,请确保已经备份重要数据,并确认操作的是正确的硬盘设备。建议先在测试环境中验证脚本和操作流程。
通过以上步骤,您应该能够成功在 PVE 中添加和配置新硬盘。如果遇到任何问题,可以参考相关日志文件或寻求社区帮助。