[Android]设备中的分区信息详解

最近调 RK3288 平台的 TV-BOX,发现 data 分区只有 1000M,但是实际整个 eMMC 是有 8 G 的(eMMC 和 NandFlash 的区别),只有 1G 不到的 Data 空间那 TV BOX 随便下几个 APP 不就没容量了么,于是就去研究了一下 Android 设备里面的分区问题。

两个命令 mount & df

Mount 命令 和 mnt 目录

mount 命令顾名思义,用以在 Linux 上挂载设备(需要Linux 支持设备文件系统格式类型才行)。挂载后会在 /mnt/目录下出现文件夹。
挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有
-t 指定设备的文件系统类型
-o 指定挂载文件系统时的选项
注意:mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。

# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
mount -t vfat -o codepage=936,iocharset=cp936,utf8=0 /dev/hda7 /mnt/f
# codepage指定文件系统的代码页,简体中文中文代码是936
# iocharset指定字符集,简体中文一般用cp936或 gb2312
# 现在的新发行版一般都需要多加一个参数 utf8=0

显示挂载的文件系统 mount
cat /etc/fstab 开机自动加载的FS
cat /etc/mtab 当前已经加载的FS
/etc/fstab 文件:
/etc/fstab 就是在开机引导的时候自动挂载到 linux 的文件系统。
例如这是一个普通的 /etc/fstab:
/dev/device mountpoint type rules dump fsck_order
eg:
/dev/hda2 / ext3 defaults 0 1 /dev/hda3 swap swap defaults 0 0
/dev/hda5 /usr ext3 defaults 0 0
/dev/fdo /mnt/flopy ext3 noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
1. /dev/device就是需要挂载的设备,/hda2就是第一个IDE插槽上的主硬盘的第二个分区。如果是第二个IDE插槽主硬盘的第三个分区,那就是/dev/hdc3,具体可以在linux下使用fdisk -l 查看。
2. mountpoint 就是挂载点。/、 /usr、 swap 都是系统安装时分区的默认挂载点。
如果你要挂载一个新设备,你就要好好想想了,因为这个新设备将作为文件系统永久的一部分,需要根据FSSTND(文件系统标准),以及它的作用,用户需求来决定。比如你想把它做为一个共享资源,放在/home下面就是一个不错选择。
3. type 是指文件系统类形。
4. rules 是指挂载时的规则。auto 开机自动挂载 default 按照大多数永久文件系统的缺省值设置挂载定义 noauto 开机不自动挂载 nouser 只有超级用户可以挂载 ro 按只读权限挂载 rw 按可读可写权限挂载 user 任何用户都可以挂载
请注意光驱和软驱只有在装有介质时才可以进行挂载,因此它是 noauto
5. dump 是指dump系统备份工具。这一项为0,就表示从不备份。如果上次用dump备份,将显示备份至今的天数。
6. fsck_order 指fsck(启动时fsck检查的顺序)。为0就表示不检查,(/)分区永远都是1,其它的分区只能从2开始,当数字相同就同时检查(但不能有两1)。
如果我要把第二个IDE插槽主硬盘上的windows C 区挂到文件系统中,那么数据项是:
/dev/hdc1 /c vfat defaults 0 0
(/c 是事先建立的文件夹,作为c盘的挂载点。)
当你修改了/etc/fstab 后,一定要重新引导系统才会有效

DF 命令

详细的可以 man,或者 http://www.cnblogs.com/peida/archive/2012/12/07/2806483.html 上有讲解。本文中只简单普及下会用到的。

作用

用来查看磁盘文件的可用空间

格式

df [选项] [文件]

常用参数:
-h 方便阅读方式显示
-l 只显示本地文件系统
-T 文件系统类型
选择参数:
–help 显示帮助信息

例子

df -hlT
文件系统 类型 容量 已用 可用 已用% 挂载点
udev devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 1.6G 10M 1.6G 1% /run
/dev/sdb1 ext4 116G 11G 100G 10% /
tmpfs tmpfs 7.8G 352M 7.5G 5% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 ext4 917G 197G 674G 23% /home
tmpfs tmpfs 1.6G 112K 1.6G 1% /run/user/1000

查看分区信息

之前说过,在 Android 设备上,一般都会存在一块 eMMC 存储芯片(或者 Nand Flash)来存放系统和用户数据,甚至部分的引导程序。
在出厂时,各个厂商都会将这块存储芯片分成很多的分区,每个分区内存放不同的内容。具体分区的布局每个厂商或者芯片供应商都会不一样。

我们可以通过 分区文件 来查看目前系统中到底有多少分区:

cat /proc/partitions  

major 这个分区所在设备的主设备号
minor 次设备号。
blocks 这个分区占用了多少块
name 这个分区的名字。

用 df 看分区大小

df 

用 mount 来看分区类型等更多信息

mount


由 mount 和 df 我们可以看到,比如
system 这个分区,是 ext4 类型,有 1.5 G,已经使用了 461M 。

到这里我也就发现我的板子的问题了,其他的几个分区 /dev/、/sys/fs/cgroup/、/mnt/asec、/mnt/obb 分别都分了 1G。
那么接下来要弄清楚两个问题:
1. 这几个分区的意义是什么
2. 在哪里进行分区初始化

Android 文件系统中的分区

  • /dev 设备驱动文件
  • /sys 是 Linux 内核文件
    其中 fs/cgroup 是指的 Linux Control Group, 是Linux内核的一个功能,用来限制、控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)
  • /mnt 是挂载点目录
    其中 mnt/asec 只是一个挂载点。当SD卡挂载于手机时,/mnt/sdcard/.android_secure 目录会被映射到/mnt/asec 目录和 /mnt/secure 目录。其中/mnt/asec 目录中主要是程序的安装目录,包括其执行文件和lib文件等;而/mnt/secure 目录中就存放程序加密后的档案。
    其中 mnt/obb 是 tmpfs 的挂载点,其中存放超过 50 MB 的文件。
  • /system 这个目录是 /dev/block/mtdblock0 的挂载点,在这个下面你可以看到标准 Linux 的 根 目录下的内容,包括 bin,etc,lib 等
  • /cache 这个目录是 /dev/block/mtdblock2 的挂载点,它受限于这个分区的大小
  • /metadata
  • /data 这个目录是 /dev/block/mtdblock1 的挂载点,为用户程序目录,其中存放了我们安装的 apk
    参考文章:http://www.all-things-android.com/content/understanding-android-file-hierarchy

Android 文件系统的分区方法

你可能感兴趣的:(Android)