Linux 服务器运维指令流程大全从零开始掌握磁盘、内存与备份这是一份专门为新手小白准备的 Linux 运维速查手册。只要跟着敲一遍命令你就能看懂服务器的磁盘、内存、目录占用还会清理日志、挂载磁盘、扩容甚至自己写一个带日期的数据库自动备份脚本。1. 服务器基础信息一览登录服务器后先摸清家底。# 系统内核版本uname-a# 发行版信息cat/etc/os-release# 或lsb_release-a# CPU 信息lscpu# 只看型号和核心数cat/proc/cpuinfo|grepmodel name|head-1nproc# 查看逻辑 CPU 数量# 内存总量free-h# 磁盘与挂载概览lsblkdf-hT这些命令不会改动任何配置放心敲。2. 查看磁盘空间与挂载情况2.1 df – 文件系统整体占用df最常用能告诉你每个挂载点的总大小、已用、可用、使用率。df-h-h: 人类可读的格式G、M、K输出示例Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 12G 26G 32% / /dev/vdb1 100G 60G 40G 60% /data注意Use%达到 100% 时需要清理或扩容。加-T还能看到文件系统类型ext4、xfs 等df-hT查看 inode 使用小文件过多可能耗尽 inode导致磁盘有空间却写不进去df-i2.2 lsblk – 磁盘与分区树lsblk以树形结构列出所有块设备磁盘、分区NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 40G 0 disk └─vda1 252:1 0 40G 0 part / vdb 252:16 0 100G 0 disk └─vdb1 252:17 0 100G 0 part /data如果某块磁盘没有MOUNTPOINT说明它虽然连上了但还没挂载使用。更详细的分区 UUID 和文件系统lsblk-f2.3 mount 与 /etc/fstab – 挂载状态查看当前所有挂载点及挂载参数mount|column-t查看系统启动时自动挂载的配置修改前一定要备份cat/etc/fstab每一行格式设备/UUID 挂载点 文件系统类型 挂载选项 0 03. 查看单个文件夹大小与目录占用排行3.1 du – 目录空间占用dudisk usage用来统计文件/目录占用多少磁盘空间。查看当前目录下每个子目录的大小最常用du-sh*-s: 只显示总计summary-h: 人类可读*: 当前目录下所有文件和目录查看指定文件夹的总大小du-sh/var/log输出1.2G /var/log如果想看该目录下第一层子目录的各自大小du-sh/var/log/*3.2 找出磁盘空间都被谁吃了从根目录开始用--max-depth控制层级并排序du-h--max-depth1/2/dev/null|sort-hr|head-20--max-depth1: 只统计第一层子目录2/dev/null: 忽略无权限的错误信息sort -hr: 按人类可读的数字倒序排列h 支持 1K、200M 这样的单位排序head -20: 只看前 20 大这样一下子就能看出是/var、/home还是/opt占用巨大。更现代的工具ncdu如果可以联网安装ncdu提供交互式界面直接进入目录浏览按大小排序# 安装Ubuntu/Debiansudoaptinstallncdu# CentOS/RHELsudoyuminstallncdu# 可能需要 EPEL# 使用ncdu /4. 物理磁盘占用的那些坑有时候你会遇到诡异现象df显示磁盘快满了但du统计出来的目录大小总和远小于已用空间。这通常是因为删除了文件但进程还在写导致磁盘空间没有真正释放。文件删除后如果仍有进程持有文件句柄空间不会回收。用lsof查找这些“幽灵”文件lsof|grepdeleted或者更精确lsof-nP|grep(deleted)输出会显示进程名、PID 和文件路径。重启对应进程即可释放空间。此外du默认统计的是文件实际占用磁盘块大小通常比文件大小稍大。如果想看文件本身的尺寸apparent size使用du-sh--apparent-size /var/log日常排查空间不用太纠结这个知道du按块统计即可。5. 内存与 CPU 快速查看内存free-h输出total used free shared buff/cache available Mem: 3.8G 1.2G 800M 100M 1.8G 2.3G Swap: 2.0G 0B 2.0Gavailable才是应用程序真正还能用的内存包含了可回收的 buffer/cache。如果Swap使用了很大比例说明内存不太够。动态监控top# 或更美观的htop# 需安装按q退出。CPU在top中可以看到各个进程 CPU 占用按1显示每个核心负载。查看 CPU 基本信息lscpu查看系统负载最近1、5、15分钟平均负载uptime一般来说负载不超过 CPU 核心数就算正常。6. 磁盘挂载实战含卸载、查看完整流程磁盘挂载和卸载是运维中出现频率最高的操作之一。下面以一个独立的新磁盘为例走完“识别设备 → 分区格式化 → 临时挂载 → 永久挂载 → 验证 → 卸载 → 故障排查”的完整闭环。6.1 识别新磁盘加装硬盘后或云平台挂载云盘后让系统重新扫描物理机可重启云服务器一般自动识别# 查看所有块设备lsblk# 查看内核识别到的磁盘信息sudofdisk-l# 持续监控磁盘事件拔插测试时常用dmesg|tail-20如果磁盘已识别但未显示容量可能需要重新扫描 SCSI 总线# 扫描所有 SCSI 主机云服务器适用forhostin/sys/class/scsi_host/*;doecho- - -|sudotee$host/scan;done再次lsblk就能看到新盘例如/dev/vdc。6.2 分区如果磁盘已有分区且不需要重新分区可跳过此步。# 使用 fdisk 对 /dev/vdc 进行分区sudofdisk/dev/vdc# 交互步骤# n → 新建分区# p → 主分区回车默认编号1# 回车 → 默认起始扇区# 回车 → 默认结束扇区使用全部空间# w → 保存并退出验证分区lsblk /dev/vdc# 应出现 /dev/vdc16.3 格式化文件系统# 格式化为 ext4最通用sudomkfs.ext4 /dev/vdc1# 或 xfsCentOS 7 默认sudomkfs.xfs /dev/vdc1注意格式化会清空磁盘上所有数据请三思而行。检查文件系统类型lsblk-f/dev/vdc1# 或sudoblkid /dev/vdc16.4 临时挂载# 创建挂载点sudomkdir-p/mnt/mydata# 临时挂载sudomount/dev/vdc1 /mnt/mydata# 验证挂载结果df-hT/mnt/mydata6.5 永久挂载写入 /etc/fstab先获取分区的 UUID通用唯一标识比设备名更稳定sudoblkid /dev/vdc1# 输出示例# /dev/vdc1: UUIDa1b2c3d4-... TYPEext4备份 fstab然后编辑sudocp/etc/fstab /etc/fstab.bak.$(date%Y%m%d)sudovim/etc/fstab在文件末尾添加一行UUIDa1b2c3d4-... /mnt/mydata ext4 defaults 0 2字段含义UUID...设备标识也可用/dev/vdc1但 UUID 更可靠/mnt/mydata挂载点ext4文件系统类型defaults挂载选项rw, suid, dev, exec, auto, nouser, async第一个0dump 备份标记0 表示不备份第二个2fsck 检查顺序0 不检查1 根分区2 其他分区测试 fstab 配置是否无误不会真正重启sudomount-a若无错误信息则说明配置正确重启后会自动挂载。6.6 查看挂载详情# 查看当前所有挂载点及参数mount|grep/mnt/mydata# 查看某个挂载点的文件系统类型与空间df-hT/mnt/mydata# 用 findmnt 查看树形挂载关系推荐findmnt /mnt/mydata6.7 卸载磁盘# 卸载挂载点sudoumount/mnt/mydata# 如果提示“target is busy”说明有进程在使用该目录# 查找占用进程sudolsof/mnt/mydata# 或sudofuser-m/mnt/mydata# 强制结束占用进程后卸载谨慎sudofuser-km/mnt/mydatasudoumount/mnt/mydata# 如果仍然无法卸载尝试懒卸载立即断开文件系统使用结束后彻底卸载sudoumount-l/mnt/mydata卸载后如果不再需要自动挂载记得从/etc/fstab中删除或注释掉对应行。6.8 常见排查命令# 查看某个设备是否挂载mount|grep/dev/vdc1# 查看所有 ext4 类型的分区df-text4-h# 查看挂载失败的日志dmesg|tail-30# 模拟 fstab 挂载并显示详细过程sudomount-av7. 磁盘扩容流程新手稳妥版⚠️任何扩容操作前请先备份重要数据如果不确定联系云服务商或专业运维。7.1 云磁盘在线扩容最简单阿里云、腾讯云、AWS 等支持在线扩容云盘。大致流程在控制台对云盘进行扩容例如从 40G 调到 100G。登录服务器让系统识别新容量# 查看磁盘和分区容量是否已变大lsblk扩展分区如果用了分区表和文件系统。如果磁盘直接作为文件系统没有分区如 /dev/vdb直接扩展文件系统# ext4 文件系统sudoresize2fs /dev/vdb# xfs 文件系统sudoxfs_growfs /data# 注意xfs_growfs 后面跟挂载点如果磁盘有分区如 /dev/vdb1可能需要先扩展分区。推荐使用growpart# 安装 growpart通常已内置sudogrowpart /dev/vdb1# 扩展第一个分区# 然后 resize 文件系统sudoresize2fs /dev/vdb1验证df-h/data7.2 LVM 逻辑卷扩容LVM 的好处是可以在线扩容无需重启。基本命令速览# 查看卷组和逻辑卷sudovgdisplaysudolvdisplay# 1. 创建物理卷新磁盘 /dev/vdcsudopvcreate /dev/vdc# 2. 加入卷组假设卷组名叫 vg_datasudovgextend vg_data /dev/vdc# 3. 扩展逻辑卷假设 LV 路径 /dev/vg_data/lv_data增加 10Gsudolvextend-L10G /dev/vg_data/lv_data# 4. 扩展文件系统# ext4sudoresize2fs /dev/vg_data/lv_data# xfssudoxfs_growfs /data# /data 是挂载点每一步操作前后都可以用df -h、lsblk、vgs、lvs查看变化。8. 日志删除与清理8.1 查找大日志文件# 在 /var/log 下找大于 100M 的文件find/var/log-typef-size100M-execls-lh{}\;8.2 安全清空日志内容不要直接rm掉还在被写入的日志文件可能导致进程无法写入需重启服务。最安全的方法是清空内容但保留 inode# 方式1重定向空内容sudo/var/log/syslog# 方式2truncate 截断sudotruncate-s0/var/log/syslog# 方式3使用 tee配合 /dev/nullsudotee/var/log/syslog/dev/null这三个效果相同文件大小变为 0服务依旧可以正常写入。8.3 用 logrotate 自动轮转很多系统日志都已配置了logrotate它会自动切割、压缩、删除旧日志。配置文件主配置/etc/logrotate.conf子配置/etc/logrotate.d/目录下例如查看 nginx 日志的轮转配置cat/etc/logrotate.d/nginx对于自定义的应用日志可以自己添加配置例如/etc/logrotate.d/myapp/var/log/myapp/*.log { daily rotate 7 compress missingok notifempty copytruncate }daily: 每天轮转rotate 7: 保留 7 份compress: 压缩旧日志copytruncate: 复制并清空避免服务中断测试配置是否生效sudologrotate-d/etc/logrotate.conf# 调试模式不做实际操作sudologrotate-f/etc/logrotate.conf# 强制执行一次8.4 清理 systemd 日志如果journald日志占满/var/log/journal可以用以下方式清理# 查看占用大小journalctl --disk-usage# 只保留最近 2 天日志sudojournalctl --vacuum-time2d# 只保留 500M 大小sudojournalctl --vacuum-size500M# 保留最近 1000 条sudojournalctl --vacuum-lines10009. 数据库自动备份脚本通用模板版生产环境中最常用的两种场景Windows 上用mysqldump的批处理以及 Linux 上通用的 Shell 脚本。以下模板直接指定数据库参数备份时会自动在指定目录下创建当天日期文件夹所有备份文件按日期归档简洁可靠。9.1 Windows 批处理版.bat适用环境Windows Server已安装 MySQL 客户端工具且mysqldump可在命令行直接执行。backup_mysql.batecho off chcp 65001 nul setlocal enabledelayedexpansion REM 配置区域按实际修改 set DB_USERroot set DB_PASSyour_password set DB_HOSTlocalhost set DB_PORT3306 set BACKUP_ROOTD:\backup\mysql REM 自动日期目录 set DATE_DIR%date:~0,4%-%date:~5,2%-%date:~8,2% set BACKUP_PATH%BACKUP_ROOT%\%DATE_DIR% if not exist %BACKUP_PATH% mkdir %BACKUP_PATH% REM 需要备份的数据库空格分隔 set DATABASESdb1 db2 db3 REM 日志文件 set LOGFILE%BACKUP_PATH%\backup.log echo [%date% %time%] 备份开始 %LOGFILE% for %%d in (%DATABASES%) do ( set OUT_FILE%BACKUP_PATH%\%%d_%DATE_DIR%.sql.gz echo 正在备份 %%d ... mysqldump -u%DB_USER% -p%DB_PASS% -h%DB_HOST% -P%DB_PORT% --single-transaction --routines --triggers %%d | gzip !OUT_FILE! if errorlevel 1 ( echo [%date% %time%] %%d 备份失败 %LOGFILE% ) else ( echo [%date% %time%] %%d 备份成功 → !OUT_FILE! %LOGFILE% ) ) REM 清理7天前备份文件夹 forfiles /p %BACKUP_ROOT% /d -7 /c cmd /c if isdirTRUE rd /s /q file 2nul echo [%date% %time%] 清理7天前旧备份完成 %LOGFILE% echo [%date% %time%] 备份结束 %LOGFILE%使用说明将上述内容保存为backup_mysql.bat。修改配置区域的数据库账号、密码、主机、端口和要备份的数据库列表。在 Windows 任务计划程序中创建定时任务触发器设置为每天凌晨执行该脚本。需要安装gzip工具可用 GnuWin32 或 7-Zip 替换。如果不想压缩可将| gzip及.gz后缀去掉输出纯 SQL 文件。9.2 Linux Shell 版通用适用于所有发行版mysql_backup.sh#!/bin/bash# 配置区域 DB_USERrootDB_PASSyour_passwordDB_HOSTlocalhostDB_PORT3306BACKUP_ROOT/data/backup/mysql# 空格分隔的数据库列表DATABASESdb1 db2 db3KEEP_DAYS7# 自动日期目录 DATE_DIR$(date%Y-%m-%d)BACKUP_PATH$BACKUP_ROOT/$DATE_DIRmkdir-p$BACKUP_PATH# 日志LOG_FILE$BACKUP_PATH/backup.logecho[$(date%F %T)] 备份开始$LOG_FILEfordbin$DATABASES;doOUT_FILE$BACKUP_PATH/${db}_${DATE_DIR}.sql.gzecho正在备份$db...ifmysqldump -u$DB_USER-p$DB_PASS-h$DB_HOST-P$DB_PORT\--single-transaction--routines--triggers$db|gzip$OUT_FILE;thenecho[$(date%F %T)]$db备份成功 →$OUT_FILE$LOG_FILEelseecho[$(date%F %T)]$db备份失败!$LOG_FILEfidone# 清理旧备份find$BACKUP_ROOT-maxdepth1-typed-mtime$KEEP_DAYS-execrm-rf{}\;echo[$(date%F %T)] 清理${KEEP_DAYS}天前目录完成$LOG_FILEecho[$(date%F %T)] 备份结束$LOG_FILE使用说明将脚本保存为/opt/scripts/mysql_backup.sh。修改配置区域的数据库连接信息与数据库列表。赋予执行权限chmod x /opt/scripts/mysql_backup.sh加入 crontab 定时执行crontab-e# 添加一行每天凌晨2点执行02* * * /opt/scripts/mysql_backup.sh两个模板的特点日期文件夹全自动无需手动干预。备份文件命名包含数据库名和日期可读性好。自动清理旧备份防止磁盘写满。参数明确定义在最前面修改成本极低任何项目都能直接复制使用。如果需要备份所有数据库排除系统库只需将DATABASES变量的赋值逻辑改为动态获取但通用模板为了简洁可靠建议显式列出需要备份的库名。10. 总结与建议日常巡检建议每天快速执行df -h、free -h、uptime看看服务器是否健康。空间排查用du --max-depth配合sort定位大目录用lsof查 deleted 文件。日志处理优先使用logrotate实现自动清理避免手动rm。扩容操作先在测试环境演练生产操作前备份数据和/etc/fstab。数据库备份一定要定期验证备份文件能否正常恢复解压后用mysql xxx.sql做一次模拟恢复。掌握这些命令和脚本你已经具备了服务器日常运维的“救命”能力。遇到问题别慌先看占用、查日志、确认备份再动手操作。参考资料与延伸阅读man df、man du、man lsof、man logrotateLinux 磁盘管理官方文档MySQL 官方备份文档希望这篇指南能帮助你轻松驾驭 Linux 服务器的日常运维。如果觉得有用欢迎收藏和分享
Linux 服务器运维指令流程大全:从零开始掌握磁盘、内存与备份
Linux 服务器运维指令流程大全从零开始掌握磁盘、内存与备份这是一份专门为新手小白准备的 Linux 运维速查手册。只要跟着敲一遍命令你就能看懂服务器的磁盘、内存、目录占用还会清理日志、挂载磁盘、扩容甚至自己写一个带日期的数据库自动备份脚本。1. 服务器基础信息一览登录服务器后先摸清家底。# 系统内核版本uname-a# 发行版信息cat/etc/os-release# 或lsb_release-a# CPU 信息lscpu# 只看型号和核心数cat/proc/cpuinfo|grepmodel name|head-1nproc# 查看逻辑 CPU 数量# 内存总量free-h# 磁盘与挂载概览lsblkdf-hT这些命令不会改动任何配置放心敲。2. 查看磁盘空间与挂载情况2.1 df – 文件系统整体占用df最常用能告诉你每个挂载点的总大小、已用、可用、使用率。df-h-h: 人类可读的格式G、M、K输出示例Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 12G 26G 32% / /dev/vdb1 100G 60G 40G 60% /data注意Use%达到 100% 时需要清理或扩容。加-T还能看到文件系统类型ext4、xfs 等df-hT查看 inode 使用小文件过多可能耗尽 inode导致磁盘有空间却写不进去df-i2.2 lsblk – 磁盘与分区树lsblk以树形结构列出所有块设备磁盘、分区NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 40G 0 disk └─vda1 252:1 0 40G 0 part / vdb 252:16 0 100G 0 disk └─vdb1 252:17 0 100G 0 part /data如果某块磁盘没有MOUNTPOINT说明它虽然连上了但还没挂载使用。更详细的分区 UUID 和文件系统lsblk-f2.3 mount 与 /etc/fstab – 挂载状态查看当前所有挂载点及挂载参数mount|column-t查看系统启动时自动挂载的配置修改前一定要备份cat/etc/fstab每一行格式设备/UUID 挂载点 文件系统类型 挂载选项 0 03. 查看单个文件夹大小与目录占用排行3.1 du – 目录空间占用dudisk usage用来统计文件/目录占用多少磁盘空间。查看当前目录下每个子目录的大小最常用du-sh*-s: 只显示总计summary-h: 人类可读*: 当前目录下所有文件和目录查看指定文件夹的总大小du-sh/var/log输出1.2G /var/log如果想看该目录下第一层子目录的各自大小du-sh/var/log/*3.2 找出磁盘空间都被谁吃了从根目录开始用--max-depth控制层级并排序du-h--max-depth1/2/dev/null|sort-hr|head-20--max-depth1: 只统计第一层子目录2/dev/null: 忽略无权限的错误信息sort -hr: 按人类可读的数字倒序排列h 支持 1K、200M 这样的单位排序head -20: 只看前 20 大这样一下子就能看出是/var、/home还是/opt占用巨大。更现代的工具ncdu如果可以联网安装ncdu提供交互式界面直接进入目录浏览按大小排序# 安装Ubuntu/Debiansudoaptinstallncdu# CentOS/RHELsudoyuminstallncdu# 可能需要 EPEL# 使用ncdu /4. 物理磁盘占用的那些坑有时候你会遇到诡异现象df显示磁盘快满了但du统计出来的目录大小总和远小于已用空间。这通常是因为删除了文件但进程还在写导致磁盘空间没有真正释放。文件删除后如果仍有进程持有文件句柄空间不会回收。用lsof查找这些“幽灵”文件lsof|grepdeleted或者更精确lsof-nP|grep(deleted)输出会显示进程名、PID 和文件路径。重启对应进程即可释放空间。此外du默认统计的是文件实际占用磁盘块大小通常比文件大小稍大。如果想看文件本身的尺寸apparent size使用du-sh--apparent-size /var/log日常排查空间不用太纠结这个知道du按块统计即可。5. 内存与 CPU 快速查看内存free-h输出total used free shared buff/cache available Mem: 3.8G 1.2G 800M 100M 1.8G 2.3G Swap: 2.0G 0B 2.0Gavailable才是应用程序真正还能用的内存包含了可回收的 buffer/cache。如果Swap使用了很大比例说明内存不太够。动态监控top# 或更美观的htop# 需安装按q退出。CPU在top中可以看到各个进程 CPU 占用按1显示每个核心负载。查看 CPU 基本信息lscpu查看系统负载最近1、5、15分钟平均负载uptime一般来说负载不超过 CPU 核心数就算正常。6. 磁盘挂载实战含卸载、查看完整流程磁盘挂载和卸载是运维中出现频率最高的操作之一。下面以一个独立的新磁盘为例走完“识别设备 → 分区格式化 → 临时挂载 → 永久挂载 → 验证 → 卸载 → 故障排查”的完整闭环。6.1 识别新磁盘加装硬盘后或云平台挂载云盘后让系统重新扫描物理机可重启云服务器一般自动识别# 查看所有块设备lsblk# 查看内核识别到的磁盘信息sudofdisk-l# 持续监控磁盘事件拔插测试时常用dmesg|tail-20如果磁盘已识别但未显示容量可能需要重新扫描 SCSI 总线# 扫描所有 SCSI 主机云服务器适用forhostin/sys/class/scsi_host/*;doecho- - -|sudotee$host/scan;done再次lsblk就能看到新盘例如/dev/vdc。6.2 分区如果磁盘已有分区且不需要重新分区可跳过此步。# 使用 fdisk 对 /dev/vdc 进行分区sudofdisk/dev/vdc# 交互步骤# n → 新建分区# p → 主分区回车默认编号1# 回车 → 默认起始扇区# 回车 → 默认结束扇区使用全部空间# w → 保存并退出验证分区lsblk /dev/vdc# 应出现 /dev/vdc16.3 格式化文件系统# 格式化为 ext4最通用sudomkfs.ext4 /dev/vdc1# 或 xfsCentOS 7 默认sudomkfs.xfs /dev/vdc1注意格式化会清空磁盘上所有数据请三思而行。检查文件系统类型lsblk-f/dev/vdc1# 或sudoblkid /dev/vdc16.4 临时挂载# 创建挂载点sudomkdir-p/mnt/mydata# 临时挂载sudomount/dev/vdc1 /mnt/mydata# 验证挂载结果df-hT/mnt/mydata6.5 永久挂载写入 /etc/fstab先获取分区的 UUID通用唯一标识比设备名更稳定sudoblkid /dev/vdc1# 输出示例# /dev/vdc1: UUIDa1b2c3d4-... TYPEext4备份 fstab然后编辑sudocp/etc/fstab /etc/fstab.bak.$(date%Y%m%d)sudovim/etc/fstab在文件末尾添加一行UUIDa1b2c3d4-... /mnt/mydata ext4 defaults 0 2字段含义UUID...设备标识也可用/dev/vdc1但 UUID 更可靠/mnt/mydata挂载点ext4文件系统类型defaults挂载选项rw, suid, dev, exec, auto, nouser, async第一个0dump 备份标记0 表示不备份第二个2fsck 检查顺序0 不检查1 根分区2 其他分区测试 fstab 配置是否无误不会真正重启sudomount-a若无错误信息则说明配置正确重启后会自动挂载。6.6 查看挂载详情# 查看当前所有挂载点及参数mount|grep/mnt/mydata# 查看某个挂载点的文件系统类型与空间df-hT/mnt/mydata# 用 findmnt 查看树形挂载关系推荐findmnt /mnt/mydata6.7 卸载磁盘# 卸载挂载点sudoumount/mnt/mydata# 如果提示“target is busy”说明有进程在使用该目录# 查找占用进程sudolsof/mnt/mydata# 或sudofuser-m/mnt/mydata# 强制结束占用进程后卸载谨慎sudofuser-km/mnt/mydatasudoumount/mnt/mydata# 如果仍然无法卸载尝试懒卸载立即断开文件系统使用结束后彻底卸载sudoumount-l/mnt/mydata卸载后如果不再需要自动挂载记得从/etc/fstab中删除或注释掉对应行。6.8 常见排查命令# 查看某个设备是否挂载mount|grep/dev/vdc1# 查看所有 ext4 类型的分区df-text4-h# 查看挂载失败的日志dmesg|tail-30# 模拟 fstab 挂载并显示详细过程sudomount-av7. 磁盘扩容流程新手稳妥版⚠️任何扩容操作前请先备份重要数据如果不确定联系云服务商或专业运维。7.1 云磁盘在线扩容最简单阿里云、腾讯云、AWS 等支持在线扩容云盘。大致流程在控制台对云盘进行扩容例如从 40G 调到 100G。登录服务器让系统识别新容量# 查看磁盘和分区容量是否已变大lsblk扩展分区如果用了分区表和文件系统。如果磁盘直接作为文件系统没有分区如 /dev/vdb直接扩展文件系统# ext4 文件系统sudoresize2fs /dev/vdb# xfs 文件系统sudoxfs_growfs /data# 注意xfs_growfs 后面跟挂载点如果磁盘有分区如 /dev/vdb1可能需要先扩展分区。推荐使用growpart# 安装 growpart通常已内置sudogrowpart /dev/vdb1# 扩展第一个分区# 然后 resize 文件系统sudoresize2fs /dev/vdb1验证df-h/data7.2 LVM 逻辑卷扩容LVM 的好处是可以在线扩容无需重启。基本命令速览# 查看卷组和逻辑卷sudovgdisplaysudolvdisplay# 1. 创建物理卷新磁盘 /dev/vdcsudopvcreate /dev/vdc# 2. 加入卷组假设卷组名叫 vg_datasudovgextend vg_data /dev/vdc# 3. 扩展逻辑卷假设 LV 路径 /dev/vg_data/lv_data增加 10Gsudolvextend-L10G /dev/vg_data/lv_data# 4. 扩展文件系统# ext4sudoresize2fs /dev/vg_data/lv_data# xfssudoxfs_growfs /data# /data 是挂载点每一步操作前后都可以用df -h、lsblk、vgs、lvs查看变化。8. 日志删除与清理8.1 查找大日志文件# 在 /var/log 下找大于 100M 的文件find/var/log-typef-size100M-execls-lh{}\;8.2 安全清空日志内容不要直接rm掉还在被写入的日志文件可能导致进程无法写入需重启服务。最安全的方法是清空内容但保留 inode# 方式1重定向空内容sudo/var/log/syslog# 方式2truncate 截断sudotruncate-s0/var/log/syslog# 方式3使用 tee配合 /dev/nullsudotee/var/log/syslog/dev/null这三个效果相同文件大小变为 0服务依旧可以正常写入。8.3 用 logrotate 自动轮转很多系统日志都已配置了logrotate它会自动切割、压缩、删除旧日志。配置文件主配置/etc/logrotate.conf子配置/etc/logrotate.d/目录下例如查看 nginx 日志的轮转配置cat/etc/logrotate.d/nginx对于自定义的应用日志可以自己添加配置例如/etc/logrotate.d/myapp/var/log/myapp/*.log { daily rotate 7 compress missingok notifempty copytruncate }daily: 每天轮转rotate 7: 保留 7 份compress: 压缩旧日志copytruncate: 复制并清空避免服务中断测试配置是否生效sudologrotate-d/etc/logrotate.conf# 调试模式不做实际操作sudologrotate-f/etc/logrotate.conf# 强制执行一次8.4 清理 systemd 日志如果journald日志占满/var/log/journal可以用以下方式清理# 查看占用大小journalctl --disk-usage# 只保留最近 2 天日志sudojournalctl --vacuum-time2d# 只保留 500M 大小sudojournalctl --vacuum-size500M# 保留最近 1000 条sudojournalctl --vacuum-lines10009. 数据库自动备份脚本通用模板版生产环境中最常用的两种场景Windows 上用mysqldump的批处理以及 Linux 上通用的 Shell 脚本。以下模板直接指定数据库参数备份时会自动在指定目录下创建当天日期文件夹所有备份文件按日期归档简洁可靠。9.1 Windows 批处理版.bat适用环境Windows Server已安装 MySQL 客户端工具且mysqldump可在命令行直接执行。backup_mysql.batecho off chcp 65001 nul setlocal enabledelayedexpansion REM 配置区域按实际修改 set DB_USERroot set DB_PASSyour_password set DB_HOSTlocalhost set DB_PORT3306 set BACKUP_ROOTD:\backup\mysql REM 自动日期目录 set DATE_DIR%date:~0,4%-%date:~5,2%-%date:~8,2% set BACKUP_PATH%BACKUP_ROOT%\%DATE_DIR% if not exist %BACKUP_PATH% mkdir %BACKUP_PATH% REM 需要备份的数据库空格分隔 set DATABASESdb1 db2 db3 REM 日志文件 set LOGFILE%BACKUP_PATH%\backup.log echo [%date% %time%] 备份开始 %LOGFILE% for %%d in (%DATABASES%) do ( set OUT_FILE%BACKUP_PATH%\%%d_%DATE_DIR%.sql.gz echo 正在备份 %%d ... mysqldump -u%DB_USER% -p%DB_PASS% -h%DB_HOST% -P%DB_PORT% --single-transaction --routines --triggers %%d | gzip !OUT_FILE! if errorlevel 1 ( echo [%date% %time%] %%d 备份失败 %LOGFILE% ) else ( echo [%date% %time%] %%d 备份成功 → !OUT_FILE! %LOGFILE% ) ) REM 清理7天前备份文件夹 forfiles /p %BACKUP_ROOT% /d -7 /c cmd /c if isdirTRUE rd /s /q file 2nul echo [%date% %time%] 清理7天前旧备份完成 %LOGFILE% echo [%date% %time%] 备份结束 %LOGFILE%使用说明将上述内容保存为backup_mysql.bat。修改配置区域的数据库账号、密码、主机、端口和要备份的数据库列表。在 Windows 任务计划程序中创建定时任务触发器设置为每天凌晨执行该脚本。需要安装gzip工具可用 GnuWin32 或 7-Zip 替换。如果不想压缩可将| gzip及.gz后缀去掉输出纯 SQL 文件。9.2 Linux Shell 版通用适用于所有发行版mysql_backup.sh#!/bin/bash# 配置区域 DB_USERrootDB_PASSyour_passwordDB_HOSTlocalhostDB_PORT3306BACKUP_ROOT/data/backup/mysql# 空格分隔的数据库列表DATABASESdb1 db2 db3KEEP_DAYS7# 自动日期目录 DATE_DIR$(date%Y-%m-%d)BACKUP_PATH$BACKUP_ROOT/$DATE_DIRmkdir-p$BACKUP_PATH# 日志LOG_FILE$BACKUP_PATH/backup.logecho[$(date%F %T)] 备份开始$LOG_FILEfordbin$DATABASES;doOUT_FILE$BACKUP_PATH/${db}_${DATE_DIR}.sql.gzecho正在备份$db...ifmysqldump -u$DB_USER-p$DB_PASS-h$DB_HOST-P$DB_PORT\--single-transaction--routines--triggers$db|gzip$OUT_FILE;thenecho[$(date%F %T)]$db备份成功 →$OUT_FILE$LOG_FILEelseecho[$(date%F %T)]$db备份失败!$LOG_FILEfidone# 清理旧备份find$BACKUP_ROOT-maxdepth1-typed-mtime$KEEP_DAYS-execrm-rf{}\;echo[$(date%F %T)] 清理${KEEP_DAYS}天前目录完成$LOG_FILEecho[$(date%F %T)] 备份结束$LOG_FILE使用说明将脚本保存为/opt/scripts/mysql_backup.sh。修改配置区域的数据库连接信息与数据库列表。赋予执行权限chmod x /opt/scripts/mysql_backup.sh加入 crontab 定时执行crontab-e# 添加一行每天凌晨2点执行02* * * /opt/scripts/mysql_backup.sh两个模板的特点日期文件夹全自动无需手动干预。备份文件命名包含数据库名和日期可读性好。自动清理旧备份防止磁盘写满。参数明确定义在最前面修改成本极低任何项目都能直接复制使用。如果需要备份所有数据库排除系统库只需将DATABASES变量的赋值逻辑改为动态获取但通用模板为了简洁可靠建议显式列出需要备份的库名。10. 总结与建议日常巡检建议每天快速执行df -h、free -h、uptime看看服务器是否健康。空间排查用du --max-depth配合sort定位大目录用lsof查 deleted 文件。日志处理优先使用logrotate实现自动清理避免手动rm。扩容操作先在测试环境演练生产操作前备份数据和/etc/fstab。数据库备份一定要定期验证备份文件能否正常恢复解压后用mysql xxx.sql做一次模拟恢复。掌握这些命令和脚本你已经具备了服务器日常运维的“救命”能力。遇到问题别慌先看占用、查日志、确认备份再动手操作。参考资料与延伸阅读man df、man du、man lsof、man logrotateLinux 磁盘管理官方文档MySQL 官方备份文档希望这篇指南能帮助你轻松驾驭 Linux 服务器的日常运维。如果觉得有用欢迎收藏和分享