Jak powielić plik bez kopiowania jego danych za pomocą btrfs?

14

Nie mam doświadczenia z btrfs, ale reklamowane jest, aby móc duplikować pliki.

W mojej aplikacji musiałbym powielić całe drzewa katalogów.

Z tego, czego się nauczyłem, btrfs usuwa duplikaty tylko w niektórych skanach postowych, a nie natychmiast. Nawet samo użycie cpnie wydaje się wyzwalać żadnego usuwania duplikatów (przynajmniej dfpokazuje zwiększone użycie dysku w rozmiarze skopiowanych plików).

Czy mogę uniknąć przenoszenia danych w ogóle i nakazać btrfsbezpośrednie skopiowanie pliku w innym miejscu, zasadniczo klonując jego metadane?

Zasadniczo, podobnie jak hardlink, ale z niezależnymi metadanymi (uprawnienia, czasy modyfikacji, ...).

Udo G.
źródło
7
cp --reflink=always.
mikeserv
3
Pamiętaj, że to nie jest coś w rodzaju linku twardego. Gdy to zrobisz cp --reflink=always, wynik z perspektywy użytkownika będzie dwoma całkowicie niezależnymi plikami pod każdym względem. Fakt, że bazowy system plików wyodrębnia to poprzez kopiowanie przy zapisie, jest jedynie szczegółem implementacji. Nie dostajesz „twardego linku, ale z niezależnymi metadanymi”. Według mojej wiedzy btrfs nie wykonuje jeszcze żadnej automatycznej deduplikacji. Myślę, że to plan na przyszłość, ale nie jestem tego pozytywny.
ormaaj
@ormaaj - hardlink nie miałby niezależnych metadanych . i Udo poprosił o szczegóły dotyczące wdrożenia . po wykonaniu odnośnika do pliku zasadniczo klonuje się jego metadane . jest to tylko wtedy, gdy odniesienia zmieniają się niezależnie, że pliki się rozchodzą - i na tym właśnie polega deduplikacja!
mikeserv
1
@mikeserv Er, jestem pewien, że deduplikacja ma inny sens. Deduplikacja bierze już istniejące nadmiarowe kopie danych i ponownie je ujednolica. COW to sposób na zminimalizowanie duplikacji, nie jest to deduplikacja.
ormaaj,
@ormaaj - myślę, że to dziwna rzecz do powiedzenia: deduplikacja nie polega na minimalizowaniu duplikacji.
mikeserv

Odpowiedzi:

12

Istnieją dwie opcje:

  1. cp --reflink=always
  2. cp --reflink=auto

Drugi jest prawie zawsze lepszy niż pierwszy. Użycie autooznacza powrót do robienia prawdziwej kopii, jeśli system plików nie obsługuje reflinkowania (na przykład ext4 lub kopiowania do udziału NFS). Jeśli chodzi o pierwszą opcję, jestem prawie pewien, że całkowicie zawiedzie i przestanie kopiować.

Jeśli używasz tego jako części skryptu, który musi być solidny w obliczu nieidealnych warunków, autobędzie ci lepiej.

eestrada
źródło
czy jesteś Eric Estrada?
mikeserv
2
@ Mikeserv Lol, no. Nazywam się Ethan. To byłoby jednak zabawne; Eric Estrada: aktor za dnia, sysadmin w nocy. Wierzcie lub nie, po raz pierwszy od ponad dekady korzystam z internetowego uchwytu, o eestradaktóry ktoś mnie kiedykolwiek pytał.
eestrada,
2
jasne, Eric. w każdym razie dobra odpowiedź.
mikeserv