問題問題來源
node
因爲磁盤fsck檢查異常,致使系統掛載以只讀模式掛載根分區。linux
若是fsck檢查後以只讀模式掛載/分區,極可能fsck已經沒法修復分區了shell
#開機啓動會出現fsck對/分區fsck檢測ubuntu
Checking all file systems. [/sbin/fsck.ext4 (1) -- /] fsck.ext4 -a /dev/xvda3 /dev/xvda3 contains a file system with errors, check forced. /dev/xvda3: Inodes that were part of a corrupted orphan linked list found. /dev/xvda3: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p options) [FAILED] *** An error occurred during the file system check. *** Dropping you to a shell; the system will reboot *** when you leave the shell. Give root password for maintenance (or type Control-D to continue):
-----------------------------------------------引用他文起-----------------------------------------------------------------------------------------安全
一、系統沒法進行磁盤的讀寫操做(touch,cp,chmod)等等bash
二、服務器沒法啓動(也是由於沒法建立文件)服務器
三、只有涉及到系統磁盤的寫操做,都會報錯"Read-only file system"ide
問題緣由:spa
一、系統沒有正常關機,致使虛擬磁盤出現文件系統錯誤;code
二、機器硬盤故障致使硬盤只讀
通常狀況是因爲系統發現磁盤硬件(Riad卡,硬盤)故障或文件系統中文件被損壞後而採起的保護機制致使的。爲了保護數據不破壞分區中已有內容,Linux在掛載文件系統是就只用read-only只讀方式加載。
(此段引用自- http://wangjun51.blog.51cto.com/6124567/1559470)
-----------------------------------------------引用他文結束----------------------------------------------------------------------------------------
#此時輸入密碼進入系統就會以只讀模式掛載根分區
cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 devtmpfs /dev devtmpfs rw,relatime,size=465516k,nr_inodes=116379,mode=755 0 0 devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /dev/shm tmpfs rw,relatime 0 0 /dev/xvda3 / ext4 ro,relatime,barrier=1,data=ordered 0 0 /proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0 /dev/xvda3 / ext4 ro,relatime,barrier=1,data=ordered 0 0
在readonly的狀況下,/分區能夠進行remount
mount -o rw,remount / ]# cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 devtmpfs /dev devtmpfs rw,relatime,size=465516k,nr_inodes=116379,mode=755 0 0 devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /dev/shm tmpfs rw,relatime 0 0 /dev/xvda3 / ext4 rw,relatime,barrier=1,data=ordered 0 0 /proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
#此時系統就能夠正常讀寫,爲了確保數據安全,沒有作備份的,能夠先對重要數據進行備份
1. 查看/etc/fstab
UUID=d642f775-751f-44f8-b1b8-416af4440e40 / ext4 defaults 1 1
2. 查看/proc/mounts
rootfs / rootfs ro 0 0
3. 卸載根分區(這步證明沒有必要)
umount /
4. 從新掛載根分區
mount -o rw,remount /
#若是掛載成功此時就能夠先保存下重要資料了
5. 此時從新掛載後,就能夠修改/etc/fstab了
UUID=d642f775-751f-44f8-b1b8-416af4440e40 / ext4 defaults 1 0
知識點:
#-o <選項>指定掛載文件系統時的選項 rw 讀寫 remount 從新掛載 #第一個數字"1"該選項被"dump"命令使用來檢查一個文件系統應該以多快頻率進行轉儲,若不須要轉儲就設置該字段爲0 #第二個數字"2"該字段被fsck命令用來決定在啓動時須要被掃描的文件系統的順序,根文件系統"/"對應該字段的值應該爲1,其餘文件系統應該爲2。若該文件系統無需在啓動時掃描則設置該字段爲0
重點: 正是由於正常狀況下第二個數字爲1,根分區啓動是會被fsck掃描,當根分區出現異常時,就會被以只讀模式掛載。
6. 重啓系統
# fsck -y /dev/xvda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) /dev/xvda3 is mounted. e2fsck: Cannot continue, aborting. #若是文件系統被掛載,極可能沒法執行fsck
If you just usefsckto check the volume you can run
fsck -nf /dev/xvda3 n -> dry-run: will not do any change (just checking) f -> force : sometimes it sayscleanbut you can force a new check 結果: # fsck -nf /dev/xvda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Warning! /dev/xvda3 is mounted. Warning: skipping journal recovery because doing a read-only filesystem check. Pass 1: Checking inodes, blocks, and sizes Inodes that were part of a corrupted orphan linked list found. Fix? no Inode 132428 was part of the orphaned inode list. IGNORED. Inode 665432 was part of the orphaned inode list. IGNORED. Inode 665642 was part of the orphaned inode list. IGNORED. Deleted inode 665645 has zero dtime. Fix? no Deleted inode 665685 has zero dtime. Fix? no Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: -557404 -562648 -562702 -562781 -562827-562869 -562920 -562963 -563046 -563090 -563138 -563184 -563747 -563787 -563832-2631031 -(2698588--2698614) -(2714719--2714745) -(2723791--2724297) Fix? no Free blocks count wrong (4222558,counted=4220120). Fix? no Inode bitmap differences: -132428 -665432 -665642 -665645 -665685 Fix? no Directories count wrong for group #81 (262,counted=261). Fix? no Free inodes count wrong (1166629,counted=1166581). Fix? no /dev/xvda3: ********** WARNING: Filesystemstill has errors ********** /dev/xvda3: 67947/1234576 files (0.2%non-contiguous), 706722/4929280 blocks
If you want to fix filesystem errors, first unmountyour partition: umount /dev/xvda3
# umount /dev/svda3 # fsck -nf /dev/xvda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Inodes that were part of a corrupted orphanlinked list found. Fix? no Inode 132428 was part of the orphaned inodelist. IGNORED. Inode 665432 was part of the orphaned inodelist. IGNORED. Inode 665642 was part of the orphaned inodelist. IGNORED. Deleted inode 665645 has zero dtime. Fix? no Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: -557404 -562648 -562702 -562781 -562827-562869 -562920 -562963 -563046 -563090 -563138 -563184 -563747 -563787 -563832-2631031 -(2714719--2714745) -(2723791--2724297) Fix? no Inode bitmap differences: -132428 -665432 -665642 -665645 Fix? no Directories count wrong for group #81 (262,counted=261). Fix? no /dev/xvda3: ********** WARNING: Filesystemstill has errors ********** /dev/xvda3: 67971/1234576 files (0.2%non-contiguous), 708714/4929280 blocks
進行修復
#fsck /dev/xvda3 .................................. /dev/xvda3: ***** FILE SYSTEM WAS MODIFIED***** /dev/xvda3: ***** REBOOT LINUX ***** /dev/xvda3: 67990/1234576 files (0.2%non-contiguous), 708579/4929280 blocks #能夠在read only下修復 #掛載狀況下沒法修復 #/分區修復,要使用系統安裝引導,進入修復模式,不要掛載文件系統
#此時發現,應該是思路問題,umount並未卸載/分區
# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda3 19G 2.3G 16G 14% / # cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 devtmpfs /dev devtmpfsrw,relatime,size=465516k,nr_inodes=116379,mode=755 0 0 devpts /dev/pts devptsrw,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /dev/shm tmpfs rw,relatime 0 0 /dev/xvda3 / ext4ro,relatime,barrier=1,data=ordered 0 0 /proc/bus/usb /proc/bus/usb usbfsrw,relatime 0 0
#根分區沒有被卸載
#umount / #根本沒有起到效果
#能夠確定fsck能夠只reda only掛載下執行
#umount / umount: /: device is busy. (In somecases useful info about processes that use the deviceis found by lsof(8) or fuser(1))
注意進入時不要選擇掛載原系統!
此時執行fsck即可成功