diff --git a/doc/bugs/use_reflink_to_export_to_directory_special_remote.mdwn b/doc/bugs/use_reflink_to_export_to_directory_special_remote.mdwn new file mode 100644 index 0000000000..759c751235 --- /dev/null +++ b/doc/bugs/use_reflink_to_export_to_directory_special_remote.mdwn @@ -0,0 +1,42 @@ +I'm using version `10.20230321-gb624394c7` on Arch Linux and BTRFS. +I'd love to have the directory special remote using `cp --reflink=auto` to export to a directory on the same file system. + +My use case is using syncthing as a way to export (parts of my repo) to my phone. +I'm deliberately not using `adb` as this needs my phone to be connected to the computer somehow. +I basically want to do what's described on [syncthing special remote](/todo/syncthing_special_remote/#index2h2) under “Copying objects”. + +The main drawback, as also noted in the linked document, is that all files are duplicated. +As I'm using BTRFS it would really help if the `export` were to use `cp --reflink=auto` instead of its own copying mechanism. +I've read [here](/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/) that you suggested (albeit 7 years ago) using a shared clone instead. +However, this does not work for me as syncthing does not synchronize symlinks to Android (they are ignored even if they point to something). +(Trying with a shared repo and `adjust --unlock-present` gives merge problems when dropping files from the directory.) + +Nearly two years ago, you wrote [here](/todo/import_from_directory_does_not_use_cp_--reflink__63___/) that you “Implemented CoW for directory special remote, comprehensively”. +It seems to me that this is only true for importing files which, as I checked, actually uses cow. + +Since I want to manage relatively many files of decent size (music, audio books, pictures, videos / movies) it would be much better if the tree export would also use reflink. +Maybe having this as an option, for the cost of not having a nice progress bar, would be something worth considering. + +A test script to show that an export does indeed use cow is the following: + +```bash +mkdir export import +git init repo +cd repo +git annex init +git annex initremote import type=directory directory=../import encryption=none importtree=yes +git annex initremote export type=directory directory=../export encryption=none exporttree=yes +git config remote.import.annex-tracking-branch main +git config remote.export.annex-tracking-branch main + +for i in {1..100}; do + dd if=/dev/urandom bs=1M count=10 of=../import/file$i +done + +git annex sync --content +``` +After running, a `btrfs filesystem du ...` tells me that the `repo` and `import` files point to the same file, whereas `export` does not. + +--- + +In general: Thank you so much for this wonderful piece of software, I'm using it for years now and manage virtually everything with it (audio, video, pictures, important documents, papers, …).