[[!meta copyright="Copyright © 2011, 2013 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] [[!tag open_issue_porting]] $ git-new-workdir ~/tmp/binutils/git /media/hd1s1/tmp/master master error: unable to create file gas/testsuite/gas/arm/attr-mfpu-vfpv3-d16.d (Interrupted system call) Checking out files: 100% (12315/12315), done. Already on 'master' $ cd /media/hd1s1/tmp/master $ git status # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: gas/testsuite/gas/arm/attr-mfpu-vfpv3-d16.d # no changes added to commit (use "git add" and/or "git commit -a") $ git checkout -f $ git status # On branch master nothing to commit (working directory clean) ([[Git issue|git-core-2]] is known.) $ git-new-workdir ~/tmp/binutils/git /media/hd1s2/tmp/master master error: unable to create file bfd/elf32-dlx.c (Interrupted system call) error: unable to create file bfd/sunos.c (Interrupted system call) error: unable to create file gas/testsuite/gas/arm/attr-mfpu-vfpv3-d16.d (Interrupted system call) error: unable to create file gas/testsuite/gas/mmix/regx-op.d (Interrupted system call) error: unable to create file gas/testsuite/gas/tic6x/reloc-bad-4.s (Interrupted system call) error: unable to create file gold/testsuite/script_test_2.t (Interrupted system call) error: unable to create file ld/testsuite/ld-mmix/loc7m.d (Interrupted system call) error: unable to create file ld/testsuite/ld-powerpc/tlsexe.g (Interrupted system call) Checking out files: 100% (12315/12315), done. Already on 'master' $ cd /media/hd1s2/tmp/master $ git status # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: bfd/elf32-dlx.c # modified: bfd/sunos.c # modified: gas/testsuite/gas/arm/attr-mfpu-vfpv3-d16.d # modified: gas/testsuite/gas/mmix/regx-op.d # modified: gas/testsuite/gas/tic6x/reloc-bad-4.s # modified: gold/testsuite/script_test_2.t # modified: ld/testsuite/ld-mmix/loc7m.d # modified: ld/testsuite/ld-powerpc/tlsexe.g # no changes added to commit (use "git add" and/or "git commit -a") $ git checkout -f $ git status # On branch master nothing to commit (working directory clean) Now you'd expect these directories to have identical content, but: $ diff -x .git -ru /media/hd1s{1,2}/tmp/master/ > /tmp/diff $ ls -l /tmp/diff -rw-r--r-- 1 thomas thomas 613677 10. Jun 19:12 /tmp/diff $ grep '^[^ @+-]' < /tmp/diff diff -x .git -ru /media/hd1s1/tmp/master//ld/configure /media/hd1s2/tmp/master//ld/configure (Note that this isn't a file that Git had issues with.) Try again: $ diff -x .git -ru /media/hd1s{1,2}/tmp/master/ > /tmp/diff_ $ ls -l /tmp/diff* -rw-r--r-- 1 thomas thomas 613677 10. Jun 19:12 /tmp/diff -rw-r--r-- 1 thomas thomas 613677 10. Jun 19:17 /tmp/diff_ $ cmp /tmp/diff{,_}; echo $? 0 At least it's consistent. Force a reload: # settrans -ag /media/hd1s1 # settrans -ag /media/hd1s2 Try again: $ diff -x .git -ru /media/hd1s{1,2}/tmp/master/ > /tmp/diff__ $ ls -l /tmp/diff* -rw-r--r-- 1 thomas thomas 613677 10. Jun 19:12 /tmp/diff -rw-r--r-- 1 thomas thomas 613677 10. Jun 19:17 /tmp/diff_ -rw-r--r-- 1 thomas thomas 613677 10. Jun 19:30 /tmp/diff__ $ cmp /tmp/diff{,__}; echo $? 0 Consistent; thus very likely corrupt on-disk. After a few tries, the pattern generally is that for the files where there are differences, once the file regularely ends, its content appears once more. That is, the files' content appears once (regularely), and then the same again. Some more copying: $ (cd /media/hd1s1/tmp/ && cp -a master master_) $ (cd /media/hd1s2/tmp/ && cp -a master master_) $ diff -x .git -ru /media/hd1s1/tmp/master{,_}/ > /tmp/diff1 $ diff -x .git -ru /media/hd1s2/tmp/master{,_}/ > /tmp/diff2 $ ls -l /tmp/diff{1,2} -rw-r--r-- 1 thomas thomas 0 10. Jun 19:46 /tmp/diff1 -rw-r--r-- 1 thomas thomas 0 10. Jun 19:46 /tmp/diff2 No further difference. $ git-new-workdir git master master $ diff -x .git -ur tar_master/ master/ > master.diff $ rm -rf ar_master* && (cd git/ && git archive master) | (mkdir ar_master && cd ar_master/ && tar -x) && diff -x .git -ru tar_master/ ar_master/ > ar_master.diff; ls -l ar_master.diff $ (cd git/ && git archive master) | md5sum # 2011-06-13 -> [[git-core-2]]