support .git/annex on a different disk than the rest of the repo

The only fully supported thing is to have the main repository on one disk,
and .git/annex on another. Only commands that move data in/out of the annex
will need to copy it across devices.

There is only partial support for putting arbitrary subdirectories of
.git/annex on different devices. For one thing, but this can require more
copies to be done. For example, when .git/annex/tmp is on one device, and
.git/annex/journal on another, every journal write involves a call to
mv(1). Also, there are a few places that make hard links between various
subdirectories of .git/annex with createLink, that are not handled.

In the common case without cross-device, the new moveFile is actually
faster than renameFile, avoiding an unncessary stat to check that a file
(not a directory) is being moved. Of course if a cross-device move is
needed, it is as slow as mv(1) of the data.
This commit is contained in:
Joey Hess 2011-11-28 15:26:27 -04:00
parent ff2d9c8283
commit 6869e6023e
9 changed files with 81 additions and 11 deletions

View file

@ -14,12 +14,19 @@ But when trying to add files i get:
I have tried both using bind-mount and with a sym-link.
> I don't think this was a reversion; the forum post doesn't really
> indicate it ever worked.
>
> Grepping for `renameFile` and `createLink` will find all the places
> in git-annex that assume one filesystem. These would have to be changed
> to catch errors and fall back to expensive copying.
>
> Putting a separate repository on the file server could work better
> depending on what you're trying to do. --[[Joey]]
>> I've added support for putting `.git/annex` on a separate filesystem
>> from the rest of the git repository.
>>
>> Putting individual subdirectories like `.git/annex/objects` on separate
>> filesystems from other subdirectories is not fully supported; it may
>> work but it may be slow and a few things (like `git annex migrate`) are
>> known to fail due to using hard links. I don't think this is worth
>> supporting. [[done]]
>> --[[Joey]]