Android 常用文件系統命令
當系統正在對某個文件系統的區域進行寫入操作時(讀的話沒關系),突然斷電,會造成文件系統對應區域的損壞(如寫入臟數據), 而e2fsck算法就是用來恢復受損的文件系統,目的是:系統能夠重啟后,一切正常。當然,有損壞,想原樣修復,當然不能100%保證,所以,就遇到了某些系統文件丟失,或者文件屬性發生變化的事情。 文件損壞會報錯structure needs cleaning(結構需要清理)。
Android車機系統的重啟,默認是從通過QNX直接給Android掉電,沒有走Android的正常重啟流程;所以會造成Android系統一些分區的損壞,這需要了解一些文件系統的常用命令,來進行文件分區的查看,修復操作。整理一些常用的文件系統命令。
1.常用命令解析
1.1 mkfs.ext4
mkfs.ext4 參數-b block-size 塊大小(1k,2k,4k)
-c 壞塊測試
-l filename從文件讀壞塊列表
-C cluster-size 簇大小 (大塊分配持性)
-D 使用direct I/O
-E 擴展屬性mmp_update_interval=MMP更新時間間隔,必需小于300sstride=條塊大小(RAID組中每個條帶單元chunk大小)stripe_width=條帶大小 (單位為block),(在數據定時,塊分配器盡可能的防止產生read-modify-write)resize=保留在線調整時的空間大小lazy_itable_init=0/1 inode表不完全初始化 (掛載時由內核在后臺初始化) // 40TG mount后50M寫初始化55分鐘 (格式化時:20s,強制初始化時:7min) (mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 )lazy_journal_init=0/1日志inode表不完全清0test_fs設置文件系統體驗標志-F(force 強制)
-f fragment-size 指定片段大小
-g blocks-per-group 指定每一個塊組內塊的數量
-G number-of-groups 指定塊組數量(在元數據負載重時可以提高元數據性能)
-i bytes-per-inode 指定 bytes/inode 比率
-I inode-size 指定inode大小
-j 創建一個ext3日志。默認創建合適大小的日志區
-J 創建指定屬性的日志。逗號分隔。 (size=1024塊 內部日志大小,device= 外部日志設備 )size= journal-size 內部日志大小,單位為M,最小為1024個文件系統塊,(最大為10240000個文件系統塊或文件系統的一半)device = external-journal 外部日志塊設備(設備名,標簽,UUID)外部日志必需先創建:mke2fs -b 4096 -O journal_dev external-journal (/dev/ramhda)mkfs.ext4 -J device= external-journal (/dev/ramhda) -F /dev/mapper/vggxxxxxxx
-L 設置volume 標簽,最長為16個byte
-m 指定保留空間百分比,為root用戶
-M 設置最后掛載目錄
-n 不真正創建文件系統,只是顯示創建的信息
-S 只寫超級塊和塊組描述符。(當超級塊和備份超級塊錯誤后,可以用來恢復數據。因為它不會touching inode表和bitmap)
-O feature 指定創建文件系統時的持性(/etc/mke2fs.conf)bigalloc 使能大塊分配(cluster-size)dir_index 使用哈希B樹加速目錄查找extents 使用extents替代間接塊filetype在目錄項中存儲文件類型信息flex_bg 允許為每一個塊組元數據(分配bitmap和inode表)存放在任何位置has_journal 創建ext3日志(-j)journal_dev 在給定的設備上創建外部ext3日志large_file 支持>2G的文件(現代內核會自動打開)quota 創建quota inodes(inode#3為用戶配額,inode#4為組配額) ,并在超級塊中設置。(掛載后自己啟用quota)resize_inode 保留空間以便未來塊組描述表增長。用于resize2fssparse_super 創建少量的超緩塊拷貝uninit_bg 創建文件系統時不初始化所有的塊組,加速創建時間,和e2fsck時間、
-O^has_journal 不啟用日志
1.2 resize2fs命令
resize2fs可用于調整ext2、ext3或ext4文件系統的大小。它可以用來擴容或縮小位于設備上的已卸載的文件系統。參數:-f :強制執行 resize 操作[device]:分區名;[size] :可以加也可以不加。如果加上 size 的話,加上一個單位例如 M,G。
1.3 e2fsck命令
指令:e2fsck
使用權限 : 超級使用者
使用方式 : e2fsck [-pacnydfvFV] [-b superblock] [-B blocksize] [-l|-L bad_blocks_file] [-C fd] device
參數 :device : 預備檢查的硬碟 partition,例如:/dev/sda1-a : 對 partition 做檢查,若有問題便自動修復,等同 -p 的功能-b : 設定存放 superblock 的位置-B : 設定單位 block 的大小-c : 檢查該partition 是否有壞軌-C file : 將檢查的結果存到 file 中以便查看-d : 列印 e2fsck 的 debug 結果-f : 強制檢查-F : 在開始檢查前,將device 的 buffer cache 清空,避免有錯誤發生-l bad_blocks_file : 將有壞軌的block資料加到 bad_blocks_file 里面-L bad_blocks_file : 設定壞軌的block資料存到 bad_blocks_file 里面,若無該檔則自動產生-n : 將檔案系統以[唯讀]方式開啟-p : 對 partition 做檢查,若有問題便自動修復-v : 詳細顯示模式-V : 顯示出目前 e2fsck 的版本-y : 預先設定所有檢查時的問題均回答[是]
大部份使用 e2fsck 來檢查硬碟 partition 的情況時,通常都是情形特殊,因此最好先將該 partition umount,然后再執行 e2fsck 來做檢查,若是要非要檢查 / 時,則請進入 singal user mode 再執行。
1.4 fsck 命令
參數 :
filesys : device 名稱(eg./dev/sda1),mount 點 (eg. / 或 /usr)
-t : 給定檔案系統的型式,若在 /etc/fstab 中已有定義或 kernel 本身已支援的則不需加上此參數
-s : 依序一個一個地執行 fsck 的指令來檢查
-A : 對/etc/fstab 中所有列出來的 partition 做檢查
-C : 顯示完整的檢查進度
-d : 列印 e2fsck 的 debug 結果
-p : 同時有 -A 條件時,同時有多個 fsck 的檢查一起執行
-R : 同時有 -A 條件時,省略 / 不檢查
-V : 詳細顯示模式
-y : 預先設定所有檢查時的問題均回答[是]
-a : 如果檢查有錯則自動修復
-r : 如果檢查有錯則由使用者回答是否修復 參數 :
filesys : device 名稱(eg./dev/sda1),mount 點 (eg. / 或 /usr)
-t : 給定檔案系統的型式,若在 /etc/fstab 中已有定義或 kernel 本身已支援的則不需加上此參數
-s : 依序一個一個地執行 fsck 的指令來檢查
-A : 對/etc/fstab 中所有列出來的 partition 做檢查
-C : 顯示完整的檢查進度
-d : 列印 e2fsck 的 debug 結果
-p : 同時有 -A 條件時,同時有多個 fsck 的檢查一起執行
-R : 同時有 -A 條件時,省略 / 不檢查
-V : 詳細顯示模式
-y : 預先設定所有檢查時的問題均回答[是]
-a : 如果檢查有錯則自動修復
-r : 如果檢查有錯則由使用者回答是否修復
注意 :
此指令可與 /etc/fstab 相互參考操作來加以了解。
1.5 e2fsck與fsck的區別
e2fsck只是針對ext2、ext3、ext4等ext系列文件系統的工具,fsck支持檢查各種不同的文件系統,包含ext系列文件系統。
2.使用示例
2.1 e2fsck使用示例
檢查 /dev/hda5 是否正常,如果有異常便自動修復,并且設定若有問答,均回答[是] :
e2fsck -a -y /dev/hda5
2.2 fsck使用示例
-
檢查 msdos 檔案系統的 /dev/hda5 是否正常,如果有異常便自動修復 :
fsck -t msdos -a /dev/hda5
-
修復Android的ext4分區
整個操作會刪除掛載點所有文件,需要注意備份
1 首先df -t 查看出錯的掛載點對應的文件系統和文件系統類型
2 然后umount這個文件系統 比如:umount /dev/sda1
3 然后根據文件系統類型不同操作不同,比如ext4:
fsck.ext4 /dev/sda1
4 最后重啟reboot