如何将根文件系统重新挂载为只读权限?挂载提示忙的解决办法
解决根目录挂载只读时提示“mount: / is busy”的问题
嗨,这个问题我在日常运维里碰到过好多次了!提示“/ is busy”本质上就是当前还有进程在读写根目录下的文件或子目录,导致挂载点无法切换成只读模式。下面给你分情况给出解决方案,包括你提到的允许重启的方案:
一、不重启的临时解决方法
找出并终止占用进程
先搞清楚到底是哪些进程在占用根目录,用这两个命令二选一就行:# 用lsof列出所有访问/的进程 sudo lsof / # 用fuser更直观地显示进程信息 sudo fuser -vm /输出结果里会列出进程ID(PID)和对应的程序名。如果是普通服务(比如nginx、apache这类),可以用
sudo systemctl stop <服务名>优雅关闭;如果是无关紧要的用户进程,直接sudo kill <PID>就行。等所有占用进程都停掉后,再重新执行sudo mount -o remount,ro /试试。
注意:如果是系统核心进程(比如systemd、init这类)占用,那基本没法手动终止,这时候就得考虑重启了。切换到单用户模式
单用户模式下系统只会启动最基础的进程,几乎不会有进程占用根目录。操作步骤大概是:- 重启系统,在GRUB启动菜单(如果是UEFI可能需要按特定键调出,比如F12、Esc)里选中你要启动的内核,按
e进入编辑模式。 - 找到以
linux开头的行,把末尾的ro改成rw init=/bin/bash,或者添加single参数(不同发行版略有差异,比如Debian/Ubuntu用single,CentOS/RHEL用init 1)。 - 按
Ctrl+X或者F10启动,进入单用户shell后,直接执行sudo mount -o remount,ro /即可。完成后可以执行exec /sbin/init回到正常系统,或者直接重启。
- 重启系统,在GRUB启动菜单(如果是UEFI可能需要按特定键调出,比如F12、Esc)里选中你要启动的内核,按
二、允许重启的稳妥方案
如果可以重启,那直接修改挂载配置文件是最省心的:
- 编辑
/etc/fstab文件:sudo nano /etc/fstab - 找到根目录对应的挂载行,通常是类似这样的:
把/dev/sda1 / ext4 defaults 0 1defaults替换成ro,或者在后面加上,ro,改成:/dev/sda1 / ext4 ro 0 1 # 或者保留其他默认选项:/dev/sda1 / ext4 defaults,ro 0 1 - 保存退出后,执行
sudo reboot重启系统。开机后根目录就会自动以只读模式挂载,完全不会有“busy”的问题。
小提醒
如果只是临时需要只读模式,重启后要恢复读写的话,记得重启后再修改/etc/fstab把ro改回rw,或者临时执行sudo mount -o remount,rw /切换回来。
内容的提问来源于stack exchange,提问作者Yves
相关产品推荐
相关产品推荐

