Widzieliśmy, jak OS wykonuje optymalizację kopiowania przy zapisie podczas uruchamiania procesu. Powodem jest to, że przez większość czasu rozwidlenie jest wykonywane przez exec, więc nie chcemy ponosić kosztów alokacji stron i niepotrzebnego kopiowania danych z przestrzeni adresowej dzwoniącego.
Dzieje się tak również podczas wykonywania CP na systemie Linux z systemami plików ext4 lub xfs (kronikowanie). Jeśli tak się nie stanie, to dlaczego nie?
linux
filesystems
ext4
xfs
copy-on-write
Mridul Verma
źródło
źródło
Odpowiedzi:
Szukane słowo kluczowe to
reflink
. Niedawno został zaimplementowany w XFS.EDYCJA: implementacja XFS została początkowo oznaczona EKSPERYMENTALNA. To ostrzeżenie zostało usunięte w wersji 4.16 jądra, kilka miesięcy po napisaniu powyższego :-).
źródło
Ze
cp
strony podręcznika :Działa to w systemach plików, które obsługują Copy-on-Write ( reflink ), obecnie głównie BTRFS. Implementacja odnośnika XFS jest w fazie rozwoju [1] [2] .
źródło
Linux ma wywołanie systemowe, które pozwala procesom przestrzeni użytkownika powiedzieć jądrze, aby wykonało kopię podczas zapisu kopii plików. FICLONERANGE i FICLONE używane jako opcje ioctl pozwalają na kopiowanie przy zapisie kopii plików i zakresów w plikach do wykonania.
Jest to używane przez cp --reflink do tworzenia kopii, w których system plików obsługuje to.
źródło
O ile nie wprowadzisz wywołania systemowego
cp
(lub przynajmniej skopiowania bloku), system operacyjny ma trudności z ustaleniem, że dane, którecp
program będzie zapisywał, są takie same, jak dane, które właśnie odczytał z innego bloku. Co więcej, będziesz mieć dodatkowe koszty zarządzania scenariuszem „kilka plików ma te same bloki”. Duże podobne pliki, które różnią się tylko kilkoma blokami, zdarzają się rzadko. Tak więc ogólnie taniej jest po prostu skopiować te bloki, a następnie dodać to obciążenie administracyjne do wszystkich plików.Teraz, jeśli „skopiujesz” pliki (ich wiele), dodając kolejny klon / migawkę systemu plików, powiedzmy, BTRFS, sytuacja wygląda inaczej: Teraz „skopiowałeś” wszystkie pliki w systemie plików i wszelkie zmiany w będą one kopiowane przy zapisie. Istnieje, ale nie w ext4.
„Journalling” to całkowicie niezależna koncepcja, liczą się struktury administracyjne plików.
źródło