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]]

View file

@ -1,3 +1,12 @@
This works with bind-mount, I might try with softlinks as well.
Going through git's data on push/pull can take ages on a spindle disk even if the repo is rather small in size. This is especially true if you are used to ssd speeds, but ssd storage is expensive. Storing the annex objects on a cheap spindle disk and everything else on a ssd makes things a _lot_ faster.
Going through git's data on push/pull can take ages on a spindle disk even
if the repo is rather small in size. This is especially true if you are
used to ssd speeds, but ssd storage is expensive. Storing the annex objects
on a cheap spindle disk and everything else on a ssd makes things a _lot_
faster.
> Update: git-annex supports `.git/annex/` being moved to a different disk
> than the rest of the repisitory, but does *not* support individual
> subdirectories, like `.git/annex/objects/` being on a different disk
> than the main `.git/annex/` directory. --[[Joey]]