你們好,我是高勝寒,本文是Linux運維-按部就班學運維-基礎篇的第53篇文章。node
今天咱們來聊聊,文件系統的修復:
文件系統損壞,可能是因爲忽然斷電或者設備讀寫數據異常等緣由致使的文件系統損壞。linux
也遇到過文件系統變爲只讀,通常是由於多機寫入時同步機制出現問題,或者單機寫入時斷電。運維
常見使用的修復命令爲: fsckide
本文采用的系統爲:日誌
[root@xinsz08-15 ~]# cat /etc/redhat-release CentOS release 6.9 (Final)[root@xinsz08-15 ~]# uname -r2.6.32-696.el6.x86_64
增長了一塊硬盤方便作實驗用blog
這種狀況咱們能夠修改/etc/fstab文件,將受損的文件的開機自動掛載先註釋掉,而後使用rw的方式進行掛載。圖片
mount -o remount rw /dev/sdb1 /mntrem
實驗步驟:同步
a. 建立一個1G的分區
b. 對分區進行格式化
c. 破壞文件系統並從新掛載
d. 修復超級快
e.查看修復成功的效果it
[root@xinsz08-15 ~]# fdisk /dev/sdb
上面截圖是分區了一個1G大小的sdb1分區
[root@xinsz08-15 ~]# mkfs.ext4 /dev/sdb1[root@xinsz08-15 ~]# ll /dev/sdb*brw-rw---- 1 root disk 8, 16 7月 1 22:59 /dev/sdb brw-rw---- 1 root disk 8, 17 7月 1 23:01 /dev/sdb1[root@xinsz08-15 ~]# mkdir /sdb1[root@xinsz08-15 ~]# mount /dev/sdb1 /sdb1 ##掛載分區[root@xinsz08-15 ~]# df -hFilesystem Size Used Avail Use% Mounted on /dev/sda2 20G 5.5G 13G 31% / tmpfs 491M 72K 491M 1% /dev/shm /dev/sda1 190M 35M 146M 20% /boot /dev/sdb1 988M 1.3M 935M 1% /sdb1
查看是否能夠寫入內容
[root@xinsz08-15 ~]# cp /etc/passwd /sdb1/[root@xinsz08-15 ~]# cd /sdb1/[root@xinsz08-15 sdb1]# lslost+found passwd[root@xinsz08-15 sdb1]#
[root@xinsz08-15 ~]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4記錄了4+0 的讀入 記錄了4+0 的寫出 2048字節(2.0 kB)已複製,0.00266775 秒,768 kB/秒[root@xinsz08-15 ~]# df -hFilesystem Size Used Avail Use% Mounted on /dev/sda2 20G 5.5G 13G 31% / tmpfs 491M 72K 491M 1% /dev/shm /dev/sda1 190M 35M 146M 20% /boot /dev/sdb1 64Z 64Z 986M 100% /sdb1
能夠看到 /dev/sdb1的大小變成了64Z ,咱們看看還可否寫入
[root@xinsz08-15 sdb1]# touch aaatouch: 沒法建立"aaa": 輸入/輸出錯誤[root@xinsz08-15 sdb1]# pwd/sdb1
能夠看到已經沒法寫入了,如今咱們進入下一步開始修復,使用fsck命令
[root@xinsz08-15 ~]# umount /dev/sdb1 #切記必定要先卸載在修復[root@xinsz08-15 ~]# fsck -y -t ext4 /dev/sdb1fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010)fsck.ext4: 超級塊無效, trying backup blocks... 超級塊 needs_recovery flag is clear, but 日誌 has data. Recovery flag not set in backup 超級塊, so running 日誌 anyway. /dev/sdb1: 正在修復日誌 第一步: 檢查inode,塊,和大小 第二步: 檢查目錄結構 第3步: 檢查目錄鏈接性 Pass 4: Checking reference counts 第5步: 檢查簇概要信息 Free 塊s count wrong for 簇 #1 (32702, counted=32701).處理? 是 Free 塊s count wrong (252369, counted=252368). 處理? 是 Free inodes count wrong for 簇 #0 (7365, counted=7364).處理? 是 Free inodes count wrong (66373, counted=66372). 處理? 是 /dev/sdb1: ***** 文件系統已修改 ***** /dev/sdb1: 12/66384 files (0.0% non-contiguous), 12696/265064 blocks[root@xinsz08-15 ~]#
能夠看到文件系統已修復的提示,咱們從新掛載來試一下
[root@xinsz08-15 ~]# mount /dev/sdb1 /sdb1 ##掛載[root@xinsz08-15 ~]# df -hFilesystem Size Used Avail Use% Mounted on /dev/sda2 20G 5.5G 13G 31% / tmpfs 491M 72K 491M 1% /dev/shm /dev/sda1 190M 35M 146M 20% /boot /dev/sdb1 988M 1.3M 935M 1% /sdb1[root@xinsz08-15 ~]# cd /sdb1[root@xinsz08-15 sdb1]# touch aaa #能夠看到已經可以從新建立文件[root@xinsz08-15 sdb1]# lsaaa lost+found passwd[root@xinsz08-15 sdb1]#
做用: 用來檢查和維護不一致的文件系統,若系統斷電或者磁盤發生異常,能夠使用fsck 來檢查和修復
常見的參數
參數 | 做用 |
---|---|
a | 自動修復文件系統,不詢問任何問題 |
A | 依照/etc/fstab配置文件內容,檢查文件內所列的所有文件系統 |
P | 與-A搭配使用,會檢查全部的文件系統 |
-r | 互動模式,讓用戶確認 |
-t | 指定要檢查的文件系統類型 |
-V | 顯示指令執行的過程 |
-y | 關閉互動模式 |
-f | 強制檢查 |
-C | 顯示完整的檢查進度 |
-p | 自動修復文件系統的錯誤 |
[root@xinsz08-15 sdb1]# fsck /dev/sdb1
[root@xinsz08-15 sdb1]# fsck -f /dev/sdb1
[root@xinsz08-15 sdb1]# fsck -t ext4 -a /dev/sdb1
特別說明的是儘可能不要使用 -f -y 這樣的強制自動修復功能,或者fsck 提示大量的inode錯誤,就不要強制修復了,須要以只讀的方式仔細查看修復過程。
我是高勝寒,一個在教培行業不忘初心的人。歡迎點贊收藏,咱們下篇文章見!