2012-09-07 143 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