Android 常用文件系统命令

Android 常用文件系统命令

当系统正在对某个文件系统的区域进行写入操作时(读的话没关系),突然断电,会造成文件系统对应区域的损坏(如写入脏数据), 而e2fsck算法就是用来恢复受损的文件系统,目的是:系统能够重启后,一切正常。当然,有损坏,想原样修复,当然不能100%保证,所以,就遇到了某些系统文件丢失,或者文件属性发生变化的事情。 文件损坏会报错structure needs cleaning(结构需要清理)。

Android车机系统的重启,默认是从通过QNX直接给Android掉电,没有走Android的正常重启流程;所以会造成Android系统一些分区的损坏,这需要了解一些文件系统的常用命令,来进行文件分区的查看,修复操作。整理一些常用的文件系统命令。

1.常用命令解析

1.1 mkfs.ext4

bash 复制代码
mkfs.ext4 参数

-b block-size 块大小(1k,2k,4k)
-c 坏块测试
-l filename从文件读坏块列表
-C cluster-size 簇大小 (大块分配持性)
-D 使用direct I/O
-E 扩展属性
   mmp_update_interval=MMP更新时间间隔,必需小于300s
   stride=条块大小(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表不完全清0
   test_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 保留空间以便未来块组描述表增长。用于resize2fs
         sparse_super 创建少量的超缓块拷贝
         uninit_bg   创建文件系统时不初始化所有的块组,加速创建时间,和e2fsck时间、
-O^has_journal   不启用日志

1.2 resize2fs命令

bash 复制代码
resize2fs可用于调整ext2、ext3或ext4文件系统的大小。它可以用来扩容或缩小位于设备上的已卸载的文件系统。

参数:
    -f      :强制执行 resize 操作
    [device]:分区名;
    [size]  :可以加也可以不加。如果加上 size 的話,加上一个单位例如 M,G。

1.3 e2fsck命令

指令:e2fsck

bash 复制代码
使用权限 : 超级使用者
使用方式 : 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 命令

bash 复制代码
参数 :
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 是否正常,如果有异常便自动修复,并且设定若有问答,均回答[是] :

bash 复制代码
e2fsck -a -y /dev/hda5

2.2 fsck使用示例

  1. 检查 msdos 档案系统的 /dev/hda5 是否正常,如果有异常便自动修复 :
bash 复制代码
fsck -t msdos -a /dev/hda5
  1. 修复Android的ext4分区

整个操作会删除挂载点所有文件,需要注意备份

1 首先df -t 查看出错的挂载点对应的文件系统和文件系统类型

2 然后umount这个文件系统 比如:umount /dev/sda1

3 然后根据文件系统类型不同操作不同,比如ext4:

bash 复制代码
fsck.ext4 /dev/sda1

4 最后重启reboot

相关推荐
长亭外的少年4 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
建群新人小猿7 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神8 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
兰琛8 小时前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Y多了个想法9 小时前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
NotesChapter10 小时前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快11 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl11 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
麦田里的守望者江11 小时前
KMP 中的 expect 和 actual 声明
android·ios·kotlin
Dnelic-12 小时前
解决 Android 单元测试 No tests found for given includes:
android·junit·单元测试·问题记录·自学笔记