【问题标题】:Android filesystem and inodesAndroid 文件系统和 inode
【发布时间】:2012-09-01 14:45:54
【问题描述】:

我最近了解了 Unix inode 及其用途。特别是,我了解到 an.inode 在文件系统中是独一无二的。

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

或者,换一种说法:可以在内部和外部存储之间复制 inode 吗?

非常感谢, P

【问题讨论】:

  • 请注意,Micro SD 卡通常使用 FAT32,这是一种不存储 inode 的文件系统。 Linux 内核在访问 FAT32 时会伪造临时 inode。
  • 我明白了。 “伪造临时inode”是什么意思?有没有办法以类似于 inode 的方式唯一标识 Fat32 上的文件?
  • 它们的路径名足以唯一地识别它们,这与其他文件系统不同,在其他文件系统中,文件可以有任意数量的路径名,甚至根本没有。通过伪造临时 inode,我的意思是文件系统驱动程序正在创建一个随机 inode 编号,当访问新文件时该编号与其他编号不同。当文件系统被卸载(或者可能更早)时,这些数字会被删除。当再次访问文件系统时,会选择新的数字。
  • 我需要数字标识符,这就是我询问 inode 的原因。现在看来我的下一个问题是“究竟什么时候删除了假 inode?”
  • 查看我的回复以获得答案和建议。

标签: android linux filesystems inode


【解决方案1】:

Micro SD 卡通常使用 FAT32,这是一种不存储 inode 的文件系统。当访问新文件时,Linux 内核正在创建一个与其他不同的随机 inode 编号。

在 FAT32 文件系统上,路径名足以唯一标识文件,这与其他文件系统不同,在其他文件系统中,文件可以有任意数量的路径名,甚至根本没有。

这些 FAT32 假 inode 号被丢弃:

  • 卸载文件系统时
  • 操作系统重启时
  • 当存储它们的固定大小缓存已满时

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

如果你真的想避免冲突,我建议使用它们的路径名的哈希值,并结合它们的大小。

【讨论】:

    【解决方案2】:

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

    如果您真正的问题是如何唯一标识文件,则需要 inode 号和设备 ID 号。两者都可以通过 *stat() 系列系统调用来检索,特别是 stat 结构的 st_dev 和 st_ino 字段。

    【讨论】:

    • 但正如 jlliagre 的评论中所指出的,外部存储通常是 FAT32,它没有真正的 inode 编号——它们可能会从挂载变为挂载,甚至可能在刷新 dcache 时(我不确定)。另请注意,Android 现在在没有带有 FUSE 文件系统的可移动存储的设备上“伪造”/sdcard,因此即使底层存储与/ 是相同的 ext4,它的行为更像 FAT32。
    • 我的印象是,仅 inode 编号就足以唯一标识文件系统中的文件?为什么我还需要设备 ID?
    • @protectedmember:设备 id 正是用来整理具有相同 inode 编号但存储在不同文件系统上的文件,这些文件由它们的设备 id 标识。
    • 那么,device id是存储介质的id而不是Android设备本身,内部和外部存储会有自己的id?
    • @protectedmember:是的。有关更多信息,请参见例如pubs.opengroup.org/onlinepubs/9699919799/basedefs/…
    猜你喜欢
    • 2020-06-12
    • 2012-01-02
    • 2015-09-07
    • 2012-12-23
    • 2011-07-24
    • 2020-08-16
    • 2020-01-19
    • 2013-05-10
    • 2018-07-03
    相关资源
    最近更新 更多