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

相关推荐
openinstall全渠道统计3 小时前
免填邀请码工具:赋能六大核心场景,重构App增长新模型
android·ios·harmonyos
双鱼大猫3 小时前
一句话说透Android里面的ServiceManager的注册服务
android
双鱼大猫3 小时前
一句话说透Android里面的查找服务
android
双鱼大猫3 小时前
一句话说透Android里面的SystemServer进程的作用
android
双鱼大猫3 小时前
一句话说透Android里面的View的绘制流程和实现原理
android
双鱼大猫4 小时前
一句话说透Android里面的Window的内部机制
android
双鱼大猫5 小时前
一句话说透Android里面的为什么要设计Window?
android
双鱼大猫5 小时前
一句话说透Android里面的主线程创建时机,frameworks层面分析
android
苏金标5 小时前
android 快速定位当前页面
android
雾里看山8 小时前
【MySQL】内置函数
android·数据库·mysql