有一句话说得特别好:

“如果你必须通过重启才能解决问题,那说明你还没真正理解问题。”

当然,重启有时候确实能临时解决一些问题,但也有很多情况,系统崩了再重启,只会让事情更糟。今天我们就来聊两个 Linux 管理员经常会遇到的场景,以及正确的处理方法。

一、日志不转,系统先满:学会用 logrotate

我们先从文件系统说起。
Linux 的目录结构很多,比如 /bin/etc/home 等,但今天我们只关注一个:/var

顾名思义,/var 是“variable(可变)”的缩写,里面存放的是系统运行时变化的数据,比如缓存、队列文件、还有最重要的——系统和应用日志
所有日志基本都集中在 /var/log 下。

问题就出在这里。
如果日志写入太快,而你又没配置好“日志轮转(log rotation)”,/var 空间很容易被撑爆。尤其是当某个程序陷入错误循环时,会疯狂刷错,日志体积瞬间暴涨。

那什么是“日志轮转”呢?
简单来说,就是定期把旧日志打包、压缩、删除,让日志目录不至于爆满。Linux 提供了一个非常好用的工具——logrotate,几乎所有主流发行版都自带。

我们来看个例子(Nginx 的日志轮转配置):

/var/log/nginx/*.log {    hourly    size 256M    rotate 3    copytruncate    dateformat -%s    compress    missingok}

这个配置文件一般在 /etc/logrotate.d/nginx
它的意思是:

  • /var/log/nginx/*.log:要轮转的日志文件(这里用通配符,表示所有 .log 结尾的文件)

  • hourly:每小时检查一次

  • size 256M:如果日志超过 256M,就开始轮转

  • rotate 3:最多保留 3 个历史文件,超出就删掉最老的

  • copytruncate:复制当前日志后清空原文件(适用于不能关闭文件句柄的程序)

  • dateformat -%s:给备份文件加上时间戳(这里用系统秒数)

  • compress:压缩旧日志

  • missingok:如果某个日志文件不存在,跳过即可

如果我们用伪代码描述它,大概就是:

“每小时检查一次 nginx 日志是否超过 256M,如果超过就复制一份带时间戳的备份、压缩旧文件,并清空当前日志;只保留最近三份备份。”

是不是很直观?
如果你不知道该怎么写,直接抄上面这份模板也没问题。更多参数可以用命令 man logrotate 查看。

二、fstab 配错导致系统崩溃?单用户模式救回!

另一个经典的坑:/etc/fstab
作为 Linux 管理员,你迟早会遇到挂载磁盘的问题。而 fstab 这个文件就是系统启动时自动挂载分区的配置清单

举个例子,正常的 fstab 文件看起来像这样:

/dev/mapper/VolGroup-lv_root /               ext4   defaults  1 1UUID=04720a62-47dd-4077-bd8a-6731e31b7abb /boot   ext4   defaults 1 2

每一行其实就是一个挂载配置,共有 6 个字段:

字段
含义
1️⃣ 设备路径
可以是 /dev/mapper/... 或磁盘的 UUID(推荐用 UUID)
2️⃣ 挂载点
设备要挂载到哪个目录
3️⃣ 文件系统类型
比如 ext4xfsswap
4️⃣ 挂载参数
默认写 defaults,也可以指定性能参数(如 noatime
5️⃣ dump 备份级别
一般写 0 即可
6️⃣ fsck 检查顺序
根目录一般为 1,其他分区为 2,不想检查可设为 0

如果你手滑多写了一行不存在的设备,重启时系统就会卡死在挂载阶段。比如:

/dev/mapper/VolGroup-lv_breakme /new/dir ext4 defaults 1 2

这行是合法格式,但因为磁盘并不存在,系统启动时就会报错:

“Cannot find /dev/mapper/VolGroup-lv_breakme to mount /new/dir”

这时系统会让你输入 root 密码进入“维护模式(maintenance mode)”。
但问题是,生产系统的 root 密码往往被安全组锁死,你根本进不去。
这时我们就要用到另一个小技巧——通过 GRUB 进入单用户模式救援系统

步骤如下:

  1. 重启系统,在 GRUB 菜单界面按任意键
    进入启动项选择界面。

    别再一味“重启”了!Linux 管理员必须掌握的两个经典修复技巧
  2. 选中你的系统版本,按 e 编辑
    再按一次 e,进入内核启动参数编辑界面。

  3. 找到以 linux 或 linux16 开头的行
    在最后面加上:

    rw init=/bin/bash

  4. 按 Ctrl + X 或 b 启动系统

这一步其实就是告诉 Linux:
“别跑 init 进程了,直接给我一个 bash 终端。”

注意⚠️

如果你忘记加 rw 参数,系统会以只读模式启动。
这时可以执行:

mount -o remount,rw /

让根目录变为可写。

修复 fstab

进入系统后执行:

vi /etc/fstab

找到那行错误的挂载项,直接注释掉(前面加 #)或者修正路径。
然后输入:

sync

保存修改并重启(必要时可以强制重启)。
系统就能恢复正常启动啦!

小贴士:
如果你忘记 root 密码,也可以用这种方式进入系统后执行:

passwd

直接重置 root 密码。

以上两个问题几乎是所有 Linux 管理员都会遇到的“成长必经之路”:

  • /var 爆满,学会用 logrotate 清理日志;

  • fstab 写错,学会通过 GRUB 进入单用户模式修复。

真正的高手不是“会重启”,而是知道为什么出问题、该怎么修

下次系统出状况时,别急着关机重启,先冷静想想——
也许,只需要几行命令,就能优雅地救回一台“假死”的服务器。

#artContent img{max-width:656px;} #artContent h1{font-size:16px;font-weight: 400;}#artContent p img{float:none !important;}#artContent table{width:100% !important;}