
Linux系統(tǒng)運(yùn)行過(guò)程中可能突然進(jìn)入文件系統(tǒng)只讀狀態(tài),用戶執(zhí)行寫入操作時(shí)終端提示"Read-only file system",表現(xiàn)為無(wú)法創(chuàng)建、修改或刪除文件,甚至部分系統(tǒng)命令因無(wú)法寫入臨時(shí)文件而報(bào)錯(cuò)。此類問(wèn)題通常伴隨系統(tǒng)響應(yīng)緩慢或服務(wù)異常,嚴(yán)重影響服務(wù)器穩(wěn)定性,需及時(shí)定位并修復(fù)。
導(dǎo)致Linux系統(tǒng)文件系統(tǒng)只讀狀態(tài)的核心原因是文件系統(tǒng)完整性受損,常見誘因包括:
1. 非正常關(guān)機(jī):如突然斷電、系統(tǒng)崩潰或強(qiáng)制重啟,導(dǎo)致文件系統(tǒng)元數(shù)據(jù)(如inode、塊位圖等)未正確更新;
2. 硬件故障:磁盤壞道、控制器錯(cuò)誤或存儲(chǔ)設(shè)備連接異常,引發(fā)文件系統(tǒng)讀寫錯(cuò)誤;
3. 日志損壞:ext4等文件系統(tǒng)的journal日志文件因I/O異常損壞,系統(tǒng)自動(dòng)切換為只讀模式以避免進(jìn)一步數(shù)據(jù)損壞;
4. 配置錯(cuò)誤:`/etc/fstab`中文件系統(tǒng)掛載參數(shù)誤設(shè)為`ro`(只讀),導(dǎo)致系統(tǒng)啟動(dòng)時(shí)以只讀模式掛載分區(qū)。
文件系統(tǒng)修復(fù)過(guò)程中可能存在數(shù)據(jù)丟失風(fēng)險(xiǎn),尤其是當(dāng)文件系統(tǒng)損壞較為嚴(yán)重時(shí)。操作前務(wù)必通過(guò)`rsync`、`tar`等工具對(duì)重要數(shù)據(jù)進(jìn)行完整備份,并對(duì)關(guān)鍵分區(qū)創(chuàng)建快照(若存儲(chǔ)設(shè)備支持)。對(duì)于生產(chǎn)環(huán)境服務(wù)器,建議在低峰期執(zhí)行修復(fù)操作,并提前制定回滾方案。
通過(guò)`mount`命令查看當(dāng)前系統(tǒng)掛載狀態(tài),重點(diǎn)關(guān)注文件系統(tǒng)類型為`ext4`、`xfs`等,且掛載選項(xiàng)中包含`ro`(只讀)的分區(qū)。例如:
```bash
mount | grep "ro,"
```
輸出示例可能包含:`/dev/vdb1 on /home type ext4 (ro,relatime,data=ordered)`,其中`/dev/vdb1`即為異常只讀分區(qū)。同時(shí),需檢查`/etc/fstab`中對(duì)應(yīng)分區(qū)的掛載參數(shù),確認(rèn)是否誤配置為`ro`,避免修復(fù)后因配置錯(cuò)誤再次出現(xiàn)只讀狀態(tài)。
執(zhí)行`umount`命令卸載只讀分區(qū):
```bash
umount /dev/vdb1
```
若提示"device is busy",表明有進(jìn)程正在占用該分區(qū)。可通過(guò)以下方式定位并終止占用進(jìn)程:
- 使用`fuser -m /home`查看占用分區(qū)的進(jìn)程PID列表(`/home`為掛載點(diǎn));
- 使用`fuser -mk /home`強(qiáng)制終止占用進(jìn)程(`-k`參數(shù)發(fā)送SIGKILL信號(hào));
- 或通過(guò)`lsof | grep /home`查看具體打開的文件,針對(duì)性停止相關(guān)服務(wù)(如`systemctl stop nginx`)。
使用`fsck`(File System Consistency Check)工具對(duì)異常分區(qū)進(jìn)行強(qiáng)制修復(fù)。根據(jù)文件系統(tǒng)類型選擇對(duì)應(yīng)參數(shù):
- 對(duì)于ext4文件系統(tǒng):
```bash
fsck -fvy /dev/vdb1
```
參數(shù)說(shuō)明:`-f`強(qiáng)制檢查(即使分區(qū)已掛載且無(wú)錯(cuò)誤)、`-v`顯示詳細(xì)修復(fù)過(guò)程、`-y`自動(dòng)修復(fù)所有問(wèn)題(避免交互式確認(rèn))。
- 對(duì)于xfs文件系統(tǒng):需使用`xfs_repair`命令:
```bash
xfs_repair -L /dev/vdb1
```
修復(fù)過(guò)程中需密切關(guān)注終端輸出,若提示"inode corrupt"或"block bad"等嚴(yán)重錯(cuò)誤,建議先備份數(shù)據(jù)后再繼續(xù)修復(fù)。
修復(fù)完成后,重新掛載分區(qū)為讀寫模式:
```bash
mount -o remount,rw /home
```
或通過(guò)`mount -a`重新掛載`/etc/fstab`中所有未掛載的分區(qū)。隨后通過(guò)`mount | grep /home`確認(rèn)掛載選項(xiàng)已變?yōu)閌rw`(讀寫),并測(cè)試文件寫入功能(如`touch /home/test.txt`)。若之前停止了相關(guān)服務(wù),需重新啟動(dòng)(如`systemctl start httpd`),并觀察系統(tǒng)日志確認(rèn)服務(wù)正常運(yùn)行。
修復(fù)后建議使用`dmesg`或`journalctl`查看系統(tǒng)日志,確認(rèn)無(wú)磁盤I/O錯(cuò)誤持續(xù)報(bào)出。對(duì)于頻繁出現(xiàn)文件系統(tǒng)問(wèn)題的服務(wù)器,需檢查磁盤健康狀態(tài)(如`smartctl -a /dev/sdb`),必要時(shí)更換故障磁盤。同時(shí),通過(guò)`systemctl enable --now fstrim`啟用trim工具(SSD環(huán)境)或定期執(zhí)行`fsck -t ext4 -M /dev/vdb1`(定期檢查),降低文件系統(tǒng)損壞風(fēng)險(xiǎn)。