有一句话说得特别好:
“如果你必须通过重启才能解决问题,那说明你还没真正理解问题。”
当然,重启有时候确实能临时解决一些问题,但也有很多情况,系统崩了再重启,只会让事情更糟。今天我们就来聊两个 Linux 管理员经常会遇到的场景,以及正确的处理方法。
我们先从文件系统说起。
Linux 的目录结构很多,比如 /bin、/etc、/home 等,但今天我们只关注一个:/var。
顾名思义,/var 是“variable(可变)”的缩写,里面存放的是系统运行时变化的数据,比如缓存、队列文件、还有最重要的——系统和应用日志。
所有日志基本都集中在 /var/log 下。
问题就出在这里。
如果日志写入太快,而你又没配置好“日志轮转(log rotation)”,/var 空间很容易被撑爆。尤其是当某个程序陷入错误循环时,会疯狂刷错,日志体积瞬间暴涨。
那什么是“日志轮转”呢?
简单来说,就是定期把旧日志打包、压缩、删除,让日志目录不至于爆满。Linux 提供了一个非常好用的工具——logrotate,几乎所有主流发行版都自带。
我们来看个例子(Nginx 的日志轮转配置):
/var/log/nginx/*.log {hourlysize 256Mrotate 3copytruncatedateformat -%scompressmissingok}
这个配置文件一般在 /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 个字段:
|
|
|
|---|---|
|
|
/dev/mapper/... 或磁盘的 UUID(推荐用 UUID) |
|
|
|
|
|
ext4、xfs、swap |
|
|
defaults,也可以指定性能参数(如 noatime) |
|
|
|
|
|
|
如果你手滑多写了一行不存在的设备,重启时系统就会卡死在挂载阶段。比如:
/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 进入单用户模式救援系统。
步骤如下:
-
重启系统,在 GRUB 菜单界面按任意键
进入启动项选择界面。
-
选中你的系统版本,按
e编辑
再按一次e,进入内核启动参数编辑界面。 -
找到以
linux或linux16开头的行
在最后面加上:rw init=/bin/bash -
按
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;}