2012-09-07 145 views
1

我最近了解到有关Unix inode及其用途。特别是,我了解到,an.inode在文件系统中是唯一的。Android文件系统和inode

我的问题是:如果用户将Micro SD卡插入其Android设备,该卡是否成为现有文件系统的一部分,还是成为单独的文件系统?

或者换句话说:可以在内部和外部存储器中复制inode吗?

非常感谢, P

+1

注意的Micro SD卡通常使用FAT32,它不存放索引节点的文件系统。访问FAT32时,Linux内核伪造临时inode。 – jlliagre

+0

我明白了。 “伪造临时inode”是什么意思?有没有类似于inode的方式来唯一标识Fat32上的文件? – protectedmember

+0

它们的路径名足以唯一标识它们,与其他文件系统不同的是,文件系统可以有任意数量的路径名,包括根本没有。通过伪造临时inode,我的意思是文件系统驱动程序在访问新文件时创建与其他inode不同的随机inode编号。当文件系统卸载(或者更早)时,这些数字会被删除。当再次访问文件系统时,会挑选新的号码。 – jlliagre

回答

1

的Micro SD卡通常使用FAT32,它不存放索引节点的文件系统。当访问新文件时,Linux内核创建一个随机的inode号码,与其他号码不同。

在FAT32文件系统,路径是足以唯一标识一个文件,不像其他的文件系统中一个文件可以有任意数量的路径名,包括没有。

这些FAT32假inode编号被丢弃:

  • 当文件系统被卸载
  • 当OS重启
  • 时,在那里它们被存储在固定大小的缓存已满

如果您想要一种可靠的方式来识别FAT32上的文件,请不要使用它们的inode。

我会建议使用他们的路径,与它们的大小组合,如果你想成为真正的一定要避免碰撞的哈希值。

+0

完美,非常感谢! – protectedmember

1

这是一个独立的文件系统。所以,是的,内部存储上的文件可以与外部存储上的文件具有相同的inode编号,即使它们是不同的文件。

如果你真正的问题是如何唯一标识一个文件,你既需要的inode编号和设备ID号。两者都可以使用* stat()系列调用,特别是stat结构的st_dev和st_ino字段进行检索。

+0

但随着jlliagre的评论指出,外部存储通常是FAT32,不具有真正的inode编号 - 它们可以从安装更改安装,并dcache的刷新甚至当(我不知道)。另外请注意,Android现在在没有可移动存储的设备上使用FUSE文件系统“伪造”/ sdcard,所以即使底层存储与'/'相同,ext4也更像FAT32。 – ephemient

+0

我的印象是inode数量足以唯一标识文件系统中的文件吗?为什么我还需要设备ID? – protectedmember

+0

@protectedmember:设备ID恰好在那里整理出具有相同inode号的文件,但存储在不同的文件系统上,这些文件系统由其设备ID标识。 – jlliagre