实战:用 Rsync 实现服务器间的高效增量同步与备份

1. 引言

在现代 IT 基础设施管理中,数据同步与备份是确保业务连续性和数据安全的关键环节。Rsync(Remote Synchronization)作为一款强大的文件同步工具,以其高效的增量传输算法和灵活的配置选项,成为系统管理员的首选工具之一。

1.1 Rsync 的核心优势

  • 增量同步:仅传输发生变化的部分,大幅减少带宽消耗
  • 保持权限:完整保留文件属性、权限和时间戳
  • 压缩传输:内置压缩功能,优化网络利用率
  • 灵活配置:支持多种传输模式和过滤规则
  • 可靠性:支持断点续传和完整性校验

2. 环境准备与安装

2.1 系统要求

确保所有参与同步的服务器均满足以下要求:

  • Linux 操作系统(CentOS、Ubuntu 等)
  • SSH 访问权限
  • 足够的磁盘空间

2.2 Rsync 安装

创建安装脚本文件:install_rsync.sh

bash 复制代码
#!/bin/bash

# 安装 Rsync 的通用脚本
# 适用于大多数 Linux 发行版

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

echo "开始安装 Rsync..."

# 检测系统类型并安装
if [ -f /etc/redhat-release ]; then
    # CentOS/RHEL 系统
    sudo yum update -y
    sudo yum install -y rsync
elif [ -f /etc/debian_version ]; then
    # Ubuntu/Debian 系统
    sudo apt-get update
    sudo apt-get install -y rsync
else
    echo "不支持的 Linux 发行版"
    exit 1
fi

# 验证安装
rsync_version=$(rsync --version | head -n1)
echo "安装成功: $rsync_version"

# 创建必要的目录结构
sudo mkdir -p /var/log/rsync
sudo touch /var/log/rsync/sync.log
sudo chmod 666 /var/log/rsync/sync.log

echo "Rsync 安装完成"

运行安装脚本:

bash 复制代码
chmod +x install_rsync.sh
./install_rsync.sh

3. Rsync 基础配置

3.1 SSH 密钥认证配置

为实现无密码同步,需要配置 SSH 密钥认证。

创建 SSH 密钥配置脚本:setup_ssh_keys.sh

bash 复制代码
#!/bin/bash

# SSH 密钥配置脚本
# 在源服务器上执行

set -e

echo "设置 SSH 密钥认证..."

# 生成 SSH 密钥对(如果不存在)
if [ ! -f ~/.ssh/id_rsa ]; then
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
    echo "SSH 密钥对已生成"
fi

# 显示公钥内容
echo "请将以下公钥内容添加到目标服务器的 authorized_keys 文件中:"
echo "=========================================================="
cat ~/.ssh/id_rsa.pub
echo "=========================================================="

# 设置正确的权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

echo "SSH 密钥设置完成"

在目标服务器上添加公钥:

bash 复制代码
# 将源服务器的公钥添加到 ~/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2E...你的公钥内容..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3.2 测试 SSH 连接

创建连接测试脚本:test_connection.sh

bash 复制代码
#!/bin/bash

# 测试 SSH 连接脚本

read -p "请输入目标服务器IP地址: " remote_host
read -p "请输入目标服务器用户名: " remote_user

echo "测试 SSH 连接到 $remote_user@$remote_host..."

# 测试连接
ssh -o BatchMode=yes -o ConnectTimeout=5 $remote_user@$remote_host "echo 'SSH 连接成功!'"

if [ $? -eq 0 ]; then
    echo "✓ SSH 连接测试成功"
else
    echo "✗ SSH 连接测试失败"
    exit 1
fi

4. Rsync 同步流程详解

以下是 Rsync 同步过程的完整流程图:

graph TD A[开始同步任务] --> B[扫描源目录文件] B --> C[生成文件校验和] C --> D[与目标目录比较] D --> E{发现差异?} E -->|是| F[仅传输差异部分] E -->|否| G[跳过文件] F --> H[更新目标文件] G --> I[验证文件完整性] H --> I I --> J[记录同步日志] J --> K[发送完成通知] K --> L[结束同步任务] style A fill:#2d5c8a,color:#ffffff style L fill:#2d5c8a,color:#ffffff style F fill:#4caf50,color:#ffffff style H fill:#4caf50,color:#ffffff style I fill:#ff9800,color:#ffffff style J fill:#ff9800,color:#ffffff

5. 基础同步实战

5.1 本地文件同步

创建本地同步脚本:local_sync.sh

bash 复制代码
#!/bin/bash

# 本地目录同步脚本

set -e

# 配置变量
SOURCE_DIR="/home/user/source"
BACKUP_DIR="/home/user/backup"
LOG_FILE="/var/log/rsync/local_sync.log"

echo "$(date): 开始本地同步" >> $LOG_FILE

# 执行 rsync 同步
rsync -avh \
    --progress \
    --delete \
    --exclude='*.tmp' \
    --exclude='.git/' \
    $SOURCE_DIR/ $BACKUP_DIR/ >> $LOG_FILE 2>&1

# 检查执行结果
if [ $? -eq 0 ]; then
    echo "$(date): 本地同步完成" >> $LOG_FILE
    echo "同步完成!查看日志: $LOG_FILE"
else
    echo "$(date): 本地同步失败" >> $LOG_FILE
    echo "同步失败!查看日志: $LOG_FILE"
    exit 1
fi

5.2 远程服务器同步

创建远程同步脚本:remote_sync.sh

bash 复制代码
#!/bin/bash

# 远程服务器同步脚本

set -e

# 配置变量
REMOTE_USER="backupuser"
REMOTE_HOST="192.168.1.100"
REMOTE_PORT="22"
SOURCE_DIR="/data/important"
BACKUP_DIR="/backup/primary"
LOG_FILE="/var/log/rsync/remote_sync.log"

# 同步选项
RSYNC_OPTIONS="-avzhP \
    --progress \
    --delete \
    --exclude='cache/*' \
    --exclude='temp/*' \
    --exclude='*.log' \
    --log-file=$LOG_FILE"

echo "$(date): 开始远程同步到 $REMOTE_USER@$REMOTE_HOST" >> $LOG_FILE

# 执行远程同步
rsync $RSYNC_OPTIONS \
    -e "ssh -p $REMOTE_PORT" \
    $SOURCE_DIR/ $REMOTE_USER@$REMOTE_HOST:$BACKUP_DIR/

# 验证同步结果
if [ $? -eq 0 ]; then
    echo "$(date): 远程同步成功完成" >> $LOG_FILE
    
    # 统计同步结果
    echo "=== 同步统计 ===" >> $LOG_FILE
    tail -n 10 $LOG_FILE | grep -E "sent|received" >> $LOG_FILE
else
    echo "$(date): 远程同步失败" >> $LOG_FILE
    exit 1
fi

echo "远程同步完成!详细日志: $LOG_FILE"

6. 高级备份策略

6.1 增量备份与轮转

创建智能备份脚本:smart_backup.sh

bash 复制代码
#!/bin/bash

# 智能备份脚本 - 支持增量备份和轮转

set -e

# 配置变量
SOURCE_DIR="/data/production"
BACKUP_BASE="/backup"
REMOTE_HOST="backup.server.com"
REMOTE_USER="backup"
LOG_FILE="/var/log/rsync/backup_$(date +%Y%m%d).log"

# 备份类型配置
BACKUP_TYPE="incremental"  # incremental 或 full
RETENTION_DAYS=30

# 创建备份目录结构
YEAR=$(date +%Y)
MONTH=$(date +%m)
DAY=$(date +%d)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

BACKUP_PATH="$BACKUP_BASE/$YEAR/$MONTH/$DAY"
LATEST_LINK="$BACKUP_BASE/latest"

# 远程备份目录
REMOTE_BACKUP_PATH="/backup/$(hostname)/$YEAR/$MONTH/$DAY"

echo "==========================================" >> $LOG_FILE
echo "开始备份: $(date)" >> $LOG_FILE
echo "源目录: $SOURCE_DIR" >> $LOG_FILE
echo "备份路径: $BACKUP_PATH" >> $LOG_FILE
echo "==========================================" >> $LOG_FILE

# 创建本地备份目录
mkdir -p $BACKUP_PATH

# 根据备份类型执行相应操作
case $BACKUP_TYPE in
    "full")
        echo "执行完整备份..." >> $LOG_FILE
        LINK_DEST=""
        ;;
    "incremental")
        echo "执行增量备份..." >> $LOG_FILE
        if [ -L $LATEST_LINK ]; then
            LINK_DEST="--link-dest=$LATEST_LINK"
            echo "基于上一个备份: $(readlink $LATEST_LINK)" >> $LOG_FILE
        else
            LINK_DEST=""
            echo "首次完整备份(增量基准)" >> $LOG_FILE
        fi
        ;;
    *)
        echo "错误的备份类型: $BACKUP_TYPE" >> $LOG_FILE
        exit 1
        ;;
esac

# 执行本地备份
rsync -avh \
    --progress \
    --delete \
    $LINK_DEST \
    --exclude='*.tmp' \
    --exclude='/cache/' \
    --log-file=$LOG_FILE \
    $SOURCE_DIR/ $BACKUP_PATH/

# 更新 latest 符号链接
ln -sfn $BACKUP_PATH $LATEST_LINK

# 执行远程同步
echo "开始远程同步..." >> $LOG_FILE
rsync -avzh \
    -e "ssh" \
    --progress \
    --delete \
    $BACKUP_BASE/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BACKUP_PATH/ >> $LOG_FILE 2>&1

# 清理旧备份
echo "清理超过 $RETENTION_DAYS 天的备份..." >> $LOG_FILE
find $BACKUP_BASE -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null || true

echo "备份完成: $(date)" >> $LOG_FILE
echo "备份日志: $LOG_FILE"

6.2 备份验证脚本

创建备份验证脚本:verify_backup.sh

bash 复制代码
#!/bin/bash

# 备份验证脚本

set -e

# 配置变量
SOURCE_DIR="/data/production"
BACKUP_DIR="/backup/latest"
LOG_FILE="/var/log/rsync/verify.log"

echo "$(date): 开始备份验证" >> $LOG_FILE

# 生成源目录校验和
echo "生成源目录文件列表..." >> $LOG_FILE
find $SOURCE_DIR -type f -exec sha256sum {} \; | sort > /tmp/source_checksums.txt

# 生成备份目录校验和
echo "生成备份目录文件列表..." >> $LOG_FILE
find $BACKUP_DIR -type f -exec sha256sum {} \; | sort > /tmp/backup_checksums.txt

# 比较校验和
echo "比较文件校验和..." >> $LOG_FILE
diff /tmp/source_checksums.txt /tmp/backup_checksums.txt > /tmp/checksum_diff.txt

if [ $? -eq 0 ]; then
    echo "$(date): ✓ 备份验证成功 - 所有文件一致" >> $LOG_FILE
    echo "备份验证成功!"
else
    echo "$(date): ✗ 备份验证失败 - 发现差异:" >> $LOG_FILE
    cat /tmp/checksum_diff.txt >> $LOG_FILE
    echo "备份验证失败!查看日志: $LOG_FILE"
    exit 1
fi

# 清理临时文件
rm -f /tmp/source_checksums.txt /tmp/backup_checksums.txt /tmp/checksum_diff.txt

7. 自动化与监控

7.1 Cron 定时任务配置

创建 Cron 配置脚本:setup_cron.sh

bash 复制代码
#!/bin/bash

# 设置 Rsync 定时任务

set -e

# 备份脚本路径
BACKUP_SCRIPT="/usr/local/bin/smart_backup.sh"
VERIFY_SCRIPT="/usr/local/bin/verify_backup.sh"

# 确保脚本有执行权限
chmod +x $BACKUP_SCRIPT
chmod +x $VERIFY_SCRIPT

# 添加定时任务
echo "设置 Rsync 定时任务..."

# 每天凌晨2点执行完整备份
(crontab -l 2>/dev/null; echo "0 2 * * 1 $BACKUP_SCRIPT") | crontab -

# 每天凌晨3点执行增量备份
(crontab -l 2>/dev/null; echo "0 3 * * 2-7 $BACKUP_SCRIPT") | crontab -

# 每周日凌晨4点验证备份
(crontab -l 2>/dev/null; echo "0 4 * * 0 $VERIFY_SCRIPT") | crontab -

# 显示当前定时任务
echo "当前定时任务:"
crontab -l

echo "定时任务设置完成"

7.2 监控与告警脚本

创建监控脚本:monitor_backup.sh

bash 复制代码
#!/bin/bash

# 备份监控和告警脚本

set -e

# 配置变量
LOG_DIR="/var/log/rsync"
ALERT_EMAIL="admin@company.com"
MAX_LOG_AGE=24  # 小时

# 检查最近的备份日志
RECENT_LOGS=$(find $LOG_DIR -name "backup_*.log" -mtime -1)

if [ -z "$RECENT_LOGS" ]; then
    SUBJECT="警告: 未发现最近备份日志"
    MESSAGE="在 $LOG_DIR 中未找到最近 $MAX_LOG_AGE 小时内的备份日志,请检查备份任务状态。"
    echo "$MESSAGE" | mail -s "$SUBJECT" $ALERT_EMAIL
    exit 1
fi

# 检查最新备份状态
LATEST_LOG=$(ls -t $LOG_DIR/backup_*.log | head -n1)

if grep -q "备份完成" "$LATEST_LOG"; then
    echo "备份状态: 正常"
    
    # 提取备份统计信息
    echo "=== 最新备份统计 ==="
    tail -n 20 $LATEST_LOG | grep -E "sent|received|Number of files"
else
    SUBJECT="紧急: 备份任务失败"
    MESSAGE="最新备份任务可能失败,请立即检查日志: $LATEST_LOG"
    echo "$MESSAGE" | mail -s "$SUBJECT" $ALERT_EMAIL
    echo "备份状态: 失败 - 已发送告警"
    exit 1
fi

# 检查磁盘空间
DISK_USAGE=$(df -h $LOG_DIR | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 90 ]; then
    SUBJECT="警告: 备份磁盘空间不足"
    MESSAGE="备份目录磁盘使用率: ${DISK_USAGE}%,请及时清理。"
    echo "$MESSAGE" | mail -s "$SUBJECT" $ALERT_EMAIL
fi

echo "监控检查完成: $(date)"

8. 高级配置与优化

8.1 Rsync 守护模式配置

创建 Rsync 服务端配置:rsyncd.conf

bash 复制代码
# Rsync 守护进程配置文件
# 位置: /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[backup]
    path = /data/backup
    comment = Main backup directory
    read only = no
    auth users = backupuser
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.1.0/24
    hosts deny = *
    list = yes

[webdata]
    path = /var/www/html
    comment = Web data backup
    read only = yes
    exclude = cache/ temp/ logs/
    dont compress = *.gz *.zip *.jpg *.png

创建认证文件:setup_rsync_daemon.sh

bash 复制代码
#!/bin/bash

# 设置 Rsync 守护模式

set -e

echo "设置 Rsync 守护进程..."

# 创建认证文件
echo "backupuser:password123" | sudo tee /etc/rsyncd.secrets
sudo chmod 600 /etc/rsyncd.secrets

# 创建备份目录
sudo mkdir -p /data/backup
sudo chown nobody:nobody /data/backup

# 复制配置文件
sudo cp rsyncd.conf /etc/

# 启动 Rsync 守护进程
if command -v systemctl >/dev/null; then
    # Systemd 系统
    sudo systemctl enable rsync
    sudo systemctl start rsync
    sudo systemctl status rsync
else
    # SysV init 系统
    sudo service rsync start
    sudo service rsync status
fi

echo "Rsync 守护进程设置完成"

8.2 性能优化脚本

创建性能优化脚本:optimize_rsync.sh

bash 复制代码
#!/bin/bash

# Rsync 性能优化配置

set -e

echo "优化 Rsync 性能配置..."

# 创建优化配置
cat > /tmp/rsync_optimizations.txt << 'EOF'
# Rsync 性能优化建议

1. 网络优化:
   - 使用 -z 压缩传输
   - 调整 --block-size 参数
   - 使用 -W 禁用增量检测(全量传输时)

2. 文件处理优化:
   - 使用 --inplace 避免临时文件
   - 合理使用 --exclude 减少扫描文件数
   - 考虑使用 --max-size 和 --min-size

3. 系统级优化:
   - 调整 TCP 缓冲区大小
   - 使用更快的加密算法(如 arcfour)
   - 考虑使用 rsync over rsync 守护进程

4. 针对大文件集的优化参数:
   rsync -avzh \
     --progress \
     --delete \
     --partial \
     --inplace \
     --compress \
     --compress-level=6 \
     --bwlimit=50000 \
     --timeout=300 \
     source/ destination/
EOF

echo "性能优化建议已保存到: /tmp/rsync_optimizations.txt"
cat /tmp/rsync_optimizations.txt

9. 故障排除与维护

9.1 常见问题解决脚本

创建故障排除脚本:troubleshoot_rsync.sh

bash 复制代码
#!/bin/bash

# Rsync 故障排除工具

set -e

echo "Rsync 故障排除检查..."
echo "========================"

# 检查 Rsync 是否安装
if command -v rsync >/dev/null; then
    echo "✓ Rsync 已安装: $(rsync --version | head -n1)"
else
    echo "✗ Rsync 未安装"
    exit 1
fi

# 检查 SSH 连接
read -p "测试远程连接?(y/n): " test_ssh
if [ "$test_ssh" = "y" ]; then
    read -p "远程主机: " remote_host
    read -p "用户名: " remote_user
    ssh -o BatchMode=yes $remote_user@$remote_host "echo 'SSH 连接成功'"
fi

# 检查磁盘空间
echo "=== 磁盘空间检查 ==="
df -h | grep -E "(Filesystem|/backup|/data)"

# 检查最近日志
echo "=== 最近 Rsync 日志 ==="
find /var/log/rsync -name "*.log" -mtime -1 -exec tail -n 5 {} \; 2>/dev/null || echo "未找到日志文件"

# 检查定时任务
echo "=== 定时任务检查 ==="
crontab -l | grep -E "(rsync|backup)" || echo "未找到相关定时任务"

# 检查进程
echo "=== 相关进程检查 ==="
ps aux | grep -E "(rsync|backup)" | grep -v grep || echo "未找到相关进程"

echo "故障排除检查完成"

9.2 日志分析脚本

创建日志分析脚本:analyze_logs.sh

bash 复制代码
#!/bin/bash

# Rsync 日志分析工具

set -e

LOG_DIR="/var/log/rsync"
OUTPUT_FILE="/tmp/rsync_analysis_$(date +%Y%m%d).txt"

echo "开始分析 Rsync 日志..."
echo "Rsync 日志分析报告 - $(date)" > $OUTPUT_FILE
echo "=================================" >> $OUTPUT_FILE

# 分析最近7天的日志
for log_file in $(find $LOG_DIR -name "*.log" -mtime -7); do
    echo "" >> $OUTPUT_FILE
    echo "分析文件: $log_file" >> $OUTPUT_FILE
    echo "-------------------------" >> $OUTPUT_FILE
    
    # 统计成功次数
    success_count=$(grep -c "完成\|成功" "$log_file" || true)
    echo "成功次数: $success_count" >> $OUTPUT_FILE
    
    # 统计失败次数
    failure_count=$(grep -c "失败\|错误\|error" "$log_file" || true)
    echo "失败次数: $failure_count" >> $OUTPUT_FILE
    
    # 提取传输统计
    echo "传输统计:" >> $OUTPUT_FILE
    grep -E "sent|received|total size" "$log_file" | tail -n 5 >> $OUTPUT_FILE || echo "无传输统计" >> $OUTPUT_FILE
    
    # 检查最近错误
    recent_errors=$(grep -i "error\|fail" "$log_file" | tail -n 3)
    if [ -n "$recent_errors" ]; then
        echo "最近错误:" >> $OUTPUT_FILE
        echo "$recent_errors" >> $OUTPUT_FILE
    fi
done

echo "日志分析完成: $OUTPUT_FILE"
cat $OUTPUT_FILE

10. 完整部署示例

10.1 生产环境部署脚本

创建完整部署脚本:deploy_rsync_system.sh

bash 复制代码
#!/bin/bash

# 完整的 Rsync 备份系统部署脚本

set -e

echo "开始部署完整的 Rsync 备份系统..."
echo "=================================="

# 创建目录结构
echo "创建目录结构..."
sudo mkdir -p /{backup,data,usr/local/bin,var/log/rsync}

# 安装 Rsync
echo "安装 Rsync..."
if [ -f /etc/redhat-release ]; then
    sudo yum install -y rsync
elif [ -f /etc/debian_version ]; then
    sudo apt-get update && sudo apt-get install -y rsync
fi

# 部署所有脚本
echo "部署管理脚本..."
sudo cp smart_backup.sh /usr/local/bin/
sudo cp verify_backup.sh /usr/local/bin/
sudo cp monitor_backup.sh /usr/local/bin/
sudo cp troubleshoot_rsync.sh /usr/local/bin/

# 设置执行权限
sudo chmod +x /usr/local/bin/*.sh

# 设置定时任务
echo "配置定时任务..."
(sudo crontab -l 2>/dev/null | grep -v -E "(smart_backup|verify_backup)" ; cat << 'EOF'
# Rsync 备份任务
0 2 * * * /usr/local/bin/smart_backup.sh
0 4 * * 0 /usr/local/bin/verify_backup.sh
0 6 * * * /usr/local/bin/monitor_backup.sh
EOF
) | sudo crontab -

# 创建日志轮转配置
echo "配置日志轮转..."
sudo cat > /etc/logrotate.d/rsync << 'EOF'
/var/log/rsync/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}
EOF

echo "部署完成!"
echo "========== 部署摘要 =========="
echo "✓ Rsync 已安装"
echo "✓ 管理脚本已部署到 /usr/local/bin/"
echo "✓ 定时任务已配置"
echo "✓ 日志轮转已设置"
echo "=============================="
echo "请根据实际环境修改脚本中的配置变量"

11. 总结

通过本教程,我们构建了一个完整的 Rsync 备份和同步系统,具备以下特性:

  • 完整的安装和配置指南
  • 灵活的同步策略(完整备份 + 增量备份)
  • 自动化运维(定时任务 + 监控告警)
  • 健壮的故障处理(验证 + 日志分析)
  • 性能优化建议

这套系统可以直接在生产环境中部署使用,能够满足大多数企业的数据同步和备份需求。根据实际环境调整配置参数后,即可提供可靠的数据保护解决方案。

11.1 后续维护建议

  1. 定期检查日志文件,确保备份任务正常运行
  2. 监控磁盘空间,及时清理过期备份
  3. 定期验证备份完整性,确保可恢复性
  4. 更新安全配置,定期更换认证密钥
  5. 测试恢复流程,确保灾难恢复可行性

通过遵循这些最佳实践,您可以构建一个可靠、高效的数据保护体系,为业务连续性提供坚实保障。

相关推荐
小糖学代码3 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
shizhan_cloud3 小时前
Shell 函数的知识与实践
linux·运维
Deng8723473483 小时前
代码语法检查工具
linux·服务器·windows
霍夫曼5 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
月熊6 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物6 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
赖small强7 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
IT运维爱好者8 小时前
【Linux】LVM理论介绍、实战操作
linux·磁盘扩容·lvm
LEEE@FPGA8 小时前
ZYNQ MPSOC linux hello world
linux·运维·服务器
郝学胜-神的一滴8 小时前
Linux定时器编程:深入理解setitimer函数
linux·服务器·开发语言·c++·程序人生