LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1277|回复: 9

[已解决]fat32盘上建立一个小写文件名的文件,然后删除,然后再建立一个同名的大写文件,结

[复制链接]
发表于 2008-11-10 17:42:16 | 显示全部楼层 |阅读模式
今天尝试了一下将文档用SCM备份到U盘的方法,分别尝试了SVN和git,SVN比较正常,但是用git clone的时候出错:

  1. #cd /media/disk/baks
  2. #git clone file:///home/clinif/test/
  3. Initialized empty Git repository in /media/disk/baks/test/.git/
  4. remote: Counting objects: 3, done.
  5. remote: Compressing objects: 100% (2/2), done.
  6. remote: Total 3 (delta 0), reused 0 (delta 0)
  7. Receiving objects: 100% (3/3), done.
  8. error: Unable to create /media/disk/baks/test/.git/HEAD
  9. error: Couldn't set HEAD
  10. fatal: Cannot update the ref 'HEAD'.
复制代码

在其它位置(LINUX盘)用上面的命令就没有问题,所以怀疑是FAT32文件系统的问题,但是在网上搜了一下,都说只要没有符号链接、大小写重名文件的话git 完全可以在fat32盘上使用,我那个test文件夹里就touch了一个空文件a.txt哦……
请用过git的朋友来指点一下吧!谢谢
 楼主| 发表于 2008-11-11 21:39:43 | 显示全部楼层
这个问题现在有点诡异了……
貌似与git无关,而是……如果在FAT32分区里任意一个文件夹里建立一个小写文件名的文件(例如a),然后删除它,再建立一个同名的大写文件(例如A),这个时候往往会出错,而且我测试了十多次,出错相当随机,大概有这几种情况:

  1. 1.(一切正常,但很少)
  2. #rm a
  3. #ls
  4. #touch A
  5. #ls
  6. A

  7. 2.(无法建立文件)
  8. #rm a
  9. #ls
  10. #touch A
  11. touch: 无法触碰 “HEAD”: 文件已存在
  12. #ls

  13. 3.(更诡异)
  14. #rm a
  15. #ls
  16. #touch A
  17. #ls
  18. ls: 无法访问 a: 没有那个文件或目录
  19. a
  20. #rm a
  21. rm: 无法删除 “a”: 没有那个文件或目录
复制代码


我觉得这个问题应该是Linux读写FAT32格式分区的毛病,特别是在创建大写文件名的时候,只创建一次往往没问题,如果你删除了又建立了一个同名但大小写不同的文件出错的概率就大到接近100%(我测试的10多次中情况1只出现了一次),大家有没有遇到过类似的现象哦……有没有什么解决的途径呢?那个HEAD文件是git自动建立的类似于索引的东西吧好像,肯定是每次同步都要创建的,这样以来不出错才怪……
回复 支持 反对

使用道具 举报

发表于 2008-11-11 22:50:56 | 显示全部楼层
你说你为何要fat32分区。应该和fat32不区分大小写有关系
回复 支持 反对

使用道具 举报

发表于 2008-11-11 23:15:04 | 显示全部楼层
查看mount的一个参数shortname,有lower|win95|winnt|mixed等选择,具体看man,或许这正是你的问题所在。
回复 支持 反对

使用道具 举报

发表于 2008-11-12 13:34:38 | 显示全部楼层
Post by jarryson;1907337
你说你为何要fat32分区。应该和fat32不区分大小写有关系

貌似文件系统是支持区分的,我曾经弄了两个大小写不同的“同名”文件到FAT32分区中,在Windows中也能看见这两个文件,不过在Windows中同时复制/剪贴这两个文件时只有一个正确复制/剪贴,提示找不到文件。于是我猜测是对输入的文件名进行了大小写转换,所以你复制时明明是两个不同的文件名,却被处理成同一个文件名,然后用这个文件名匹配了两个文件中的一个(至于是哪一个我没有进一步测试),第一个文件正常操作,到第二个时就会提示找不到文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-12 13:37:00 | 显示全部楼层
@jarryson:因为其实我是想git clone到手机的SD卡里,方便,但是手机只能识别FAT32呗……

@druggo:哈,多谢,的确就是这个问题!我用了shortname=winnt就可以了。

另外还找到一个和这个问题有关的“Bug报告”(http://lkml.indiana.edu/hypermail/linux/kernel/0503.3/1450.html),就是有人认为mount默认选项是lower,很容易出问题,建议将默认改成mixed……
而且还想到以前看过的一篇有意思的文章,大意是:NTFS格式有选项可以和POSIX兼容,所以ntfs3g的作者就索性实现了这一点,结果是……可以通过ntfs3g在同一个目录里建立一个a.txt和A.txt,后果是:到了WINDOWS下访问这个盘就郁闷了……

另想问一下:有没有哪里可以自行设定mount vfat时候的默认参数?在HAL里设定可以实现自动挂载时的参数调整,但如果手动mount呢,能否设定?望知道的朋友告知一下哈。
回复 支持 反对

使用道具 举报

发表于 2008-11-12 13:46:44 | 显示全部楼层
难道不是U盘的问题?!
U盘这东西很容易出问题的,特别是早期到版本和一些小厂的产品。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-12 13:50:27 | 显示全部楼层
@LongerZ:我是将SD卡插在读卡器里当U盘用的,Sandisk的正品卡,目前还没出错过呢。感觉现在买U盘不如买SD卡,价格都差不多,SD卡还可以在手机、数码相机之类的东西上用,质量似乎还比U盘整体要好一点点。
回复 支持 反对

使用道具 举报

发表于 2008-11-12 14:57:05 | 显示全部楼层
问题解决了,你应该修改标题加上“已解决”。
默认挂在参数,如果是gnome,可以用gconf-editor修改system-》storage-》xxx
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-12 15:16:29 | 显示全部楼层
Post by druggo;1907560
问题解决了,你应该修改标题加上“已解决”。
默认挂在参数,如果是gnome,可以用gconf-editor修改system-》storage-》xxx


嗯,谢谢提醒。;)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表