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

相关推荐
BD_Marathon6 小时前
【MySQL】函数
android·数据库·mysql
西西学代码7 小时前
安卓开发---耳机的按键设置的UI实例
android·ui
maki07711 小时前
虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理
android·游戏引擎·vr·虚幻·pico·htc vive·大空间
千里马学框架12 小时前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
fundroid15 小时前
掌握 Compose 性能优化三步法
android·android jetpack
TeleostNaCl16 小时前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
旷野说17 小时前
Android Studio Narwhal 3 特性
android·ide·android studio
maki0771 天前
VR大空间资料 01 —— 常用VR框架对比
android·ue5·游戏引擎·vr·虚幻·pico
xhBruce1 天前
InputReader与InputDispatcher关系 - android-15.0.0_r23
android·ims
领创工作室1 天前
安卓设备分区作用详解-测试机红米K40
android·java·linux