Featured image of post VPS 存储优化与省钱技巧:少花钱,多办事

VPS 存储优化与省钱技巧:少花钱,多办事

从磁盘使用优化、存储类型选择到数据压缩和缓存策略,全面掌握 VPS 存储省钱之道,让每一分钱都花在刀刃上

引言

你是否遇到过这样的场景:月底账单来了,发现存储费用比预期高出一大截?或者服务器磁盘空间不足,网站开始报错?

存储是 VPS 成本中最容易被忽视的部分。大多数用户只关注 CPU 和内存,却忘了存储费用也会随着数据增长而累积。

在这篇文章中,我将分享 10 个经过实战验证的 VPS 存储优化技巧,帮助你:

  • 减少 30-50% 的存储费用
  • 提高 I/O 性能
  • 避免意外磁盘空间耗尽
  • 建立自动化的存储管理机制

一、磁盘清理:释放被忽视的空间

1. 清理日志文件

日志文件是磁盘空间的头号杀手。大多数服务都会生成大量日志,但很少有人定期清理。

# 查看日志占用空间
sudo du -sh /var/log/*

# 清理旧日志(保留最近 7 天)
sudo find /var/log -name "*.log" -mtime +7 -delete

# 配置 logrotate 自动管理
sudo nano /etc/logrotate.conf

2. 清理包管理器缓存

# Ubuntu/Debian
sudo apt clean
sudo apt autoclean

# CentOS/RHEL
sudo yum clean all

3. 查找大文件

# 查找大于 100MB 的文件
sudo find / -type f -size +100M 2>/dev/null

# 按目录统计空间使用
sudo du -sh /* | sort -hr

二、存储类型选择:性价比最大化

SSD vs HDD 对比

特性SSDHDD
价格较高较低
IOPS高(5000+)低(100-200)
延迟低(0.1ms)高(5-10ms)
适用场景数据库、Web 服务备份、归档

省钱建议:系统盘用 SSD,数据盘用 HDD。这样可以在性能和成本之间取得最佳平衡。

云存储分层

大多数云服务商提供多层存储:

  • 热存储:高性能 SSD,价格最高
  • 温存储:平衡性能和成本
  • 冷存储:低成本,适合备份和归档

实战技巧:将不常用的数据迁移到冷存储,可以节省 60-80% 的存储费用。

三、数据压缩:省下一半空间

压缩现有数据

# 压缩大型日志文件
sudo gzip /var/log/syslog.1

# 压缩备份文件
tar -czvf backup-$(date +%Y%m%d).tar.gz /home/user/data

# 使用 lz4 压缩(更快)
tar -cJvf backup.tar.xz /home/user/data

启用文件系统级压缩

# ZFS 透明压缩
sudo zfs set compression=lz4 rpool/data

# Btrfs 压缩
sudo btrfs filesystem show
sudo btrfs property set /mnt/data compression zstd

效果:ZFS 透明压缩可以将文本数据压缩 2-3 倍,而性能损失几乎可以忽略不计。

四、使用对象存储替代块存储

何时使用对象存储

  • 静态文件(图片、视频、文档)
  • 备份数据
  • 日志归档
  • 内容分发

成本对比

存储类型价格(/GB/月)适用场景
SSD 块存储$0.10-0.20数据库、系统盘
HDD 块存储$0.03-0.05备份、归档
对象存储$0.02-0.03静态文件、备份

省钱技巧:将 /var/www/uploads 迁移到对象存储,年省数百元。

五、监控与告警:防患于未然

磁盘使用监控脚本

#!/bin/bash
# check_disk_usage.sh

THRESHOLD=80

usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

if [ "$usage" -gt "$THRESHOLD" ]; then
    echo "警告:磁盘使用率超过 ${THRESHOLD}%,当前 ${usage}%" | \
        mail -s "VPS 存储告警" admin@example.com
fi

使用监控工具

# 安装并配置 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
sudo ./node_exporter

# 配置告警规则
alert DiskSpaceHigh {
    condition: disk_usage > 85%
    duration: 5m
    action: send_notification
}

六、自动化清理策略

定时清理脚本

# 添加到 crontab
crontab -e

# 每周日凌晨 2 点清理
0 2 * * 0 /usr/local/bin/cleanup.sh

# 每月 1 号清理旧备份
0 3 1 * * /usr/local/bin/cleanup_backups.sh

清理脚本示例

#!/bin/bash
# cleanup.sh

# 清理临时文件
sudo find /tmp -type f -mtime +7 -delete

# 清理旧日志
sudo find /var/log -name "*.log.gz" -mtime +30 -delete

# 清理包缓存
sudo apt clean

echo "清理完成,当前磁盘使用率:$(df -h / | awk 'NR==2 {print $5}')"

七、日志轮转配置

优化 logrotate 配置

# /etc/logrotate.d/custom
/var/log/myapp/*.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    postrotate
        systemctl reload myapp
    endscript
}

关键参数说明

  • weekly:每周轮转
  • rotate 4:保留 4 个备份
  • compress:压缩旧日志
  • delaycompress:延迟一次压缩(便于调试)

八、数据库存储优化

MySQL/MariaDB 优化

-- 启用压缩表
ALTER TABLE large_table ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

-- 清理二进制日志
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);

-- 优化表
OPTIMIZE TABLE large_table;

PostgreSQL 优化

-- 启用 TOAST 压缩
ALTER TABLE large_table ALTER COLUMN description SET STORAGE external;

-- 清理 WAL 文件
SELECT pg_switch_wal();

九、缓存策略:减少重复写入

使用 tmpfs 临时文件

# 挂载 tmpfs 到 /tmp
sudo mount -t tmpfs -o size=2G tmpfs /tmp

# 将频繁读写的目录放到内存
sudo mount -t tmpfs -o size=512M tmpfs /var/cache/myapp

优势

  • I/O 性能提升 10-100 倍
  • 减少 SSD 写入寿命损耗
  • 自动清理,无需手动管理

应用层缓存

# Redis 缓存
sudo apt install redis-server
sudo systemctl enable redis-server

# Memcached 缓存
sudo apt install memcached

十、实际案例:年省 $500+

场景描述

某用户使用 VPS 托管博客和 API 服务:

项目优化前优化后
系统盘100GB SSD50GB SSD
数据盘200GB SSD100GB SSD + 500GB 对象存储
备份策略无压缩LZ4 压缩
日志管理手动清理自动轮转

成本对比

  • 优化前:$30/月(300GB SSD)
  • 优化后:$15/月(150GB SSD + 500GB 对象存储)
  • 年节省:$180

加上性能提升和运维效率改善,实际价值超过 $500。

总结

VPS 存储优化不是一蹴而就的,而是一个持续的过程。关键在于:

  1. 定期清理:建立自动化清理机制
  2. 合理分层:根据数据重要性选择存储类型
  3. 压缩数据:减少不必要的空间浪费
  4. 监控告警:防患于未然
  5. 持续优化:定期审查存储使用情况

记住:省下的每一分钱,都是你的利润


下一步行动

  • 运行 df -h 查看当前磁盘使用情况
  • 配置 logrotate 自动清理日志
  • 将不常用数据迁移到对象存储
  • 设置磁盘使用告警

有问题?欢迎在评论区交流!

📺 看视频版教程 → DuckDB Lab YouTube

Subscribe for more DuckDB & AI automation tutorials