Obsługa zachowania migawki ZFS w przypadku modyfikacji, przenoszenia i zmiany nazw plików


2

Biorąc pod uwagę, że ZFS jest opisywany bardziej jako baza danych niż system plików, uzasadnione wydaje się oczekiwanie, że będzie on zachowywał się podobnie do systemu zarządzania wersjami, inteligentnie zarządzając modyfikacjami plików, przeniesieniami i nazwami. Pytania dotyczą w szczególności migawek, jednak migawki mają wiele wspólnego z klonami i

  1. Kiedy plik jest modyfikowany w ZFS po migawce, czy migawka będzie miała ten sam rozmiar i tylko różnice, czy cały plik?
  2. Kiedy plik zostanie przeniesiony do ZFS po migawce, czy migawka pozostanie zasadniczo zerowa?
  3. Czy po zmianie migawki nazwa pliku w ZFS zostanie zmieniona na zero?
  4. Czy po utworzeniu migawki w pliku, w której znajduje się dowiązanie do pliku, pozostanie zasadniczo pusta?

  5. Sugeruje się, że BTRFS jest zaprojektowany tak, aby robić w zasadzie te same rzeczy, co ZFS, czy zatem można by oczekiwać takich samych zachowań w tych warunkach?

  6. Kiedy komputer z systemem Windows uzyskuje dostęp do udziału ZFS zdalnie przez SAMBA, czy powyższe zachowanie jest prawdziwe, czy też SAMBA stanowi podzbiór standardowych instrukcji dysku, tzn. Ruch staje się kopią + usunięciem?

  7. Czy możliwe jest ogólne udzielenie odpowiedzi na powyższe pytania, czy też wszystkie odpowiedzi dotyczą konkretnego wdrożenia?

Zgodnie z prośbą komentatora następujący test jest wykonywany na opisanych operacjach:

Informacje o systemie:

  • Jądro CentOS 7 3.10.0
  • ZFS v0.6.5.9-1

.

                  `zpool list`           `zfs list`
      POOL        SIZE  ALLOC   FREE    USED   AVAIL  REFER

Utwórz pulę: zpool create -m /test/mnt FILE-TEST /test/1.img /test/2.img

      FILE-TEST   224M  80.5K    224M    73K    192M    19K

Migawka: zfs snapshot FILE-TEST@1

      FILE-TEST   224M   122K    224M    73K    192M    19K
      FILE-TEST@1                          0       -    19K

Utwórz plik: echo ‘test’ > /test/mnt/test.txt

      FILE-TEST   224M   132K    224M    95K    192M    21K
      FILE-TEST@1                        17K       -    19K

Zwiększ rozmiar pliku: `head -c 128K /test/mnt/test.txt

      FILE-TEST   224M   678K   223M    490K    192M    148K
      FILE-TEST@1                        17K       -    19K

Migawka: zfs snapshot FILE-TEST@2

      FILE-TEST   224M   267K   224M    239K    192M    148K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                          0       -     48K

Edytuj plik, zmień ostatnie 4 bajty.

      FILE-TEST   224M  1.07M   223M    386K    192M    148K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K

Migawka: zfs snapshot FILE-TEST@3

      FILE-TEST   224M   548K   223M    388K    192M    148K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                          0       -    148K

Zmień nazwę pliku mv test.txt test2.txt

      FILE-TEST   224M   552K   223M    404K    192M    150K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K

Migawka: zfs snapshot FILE-TEST@4

      FILE-TEST   224M  1.06M   223M    645K    191M    150K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                          0       -    150K

Nowy folder: mkdir /test/mnt/subdir

      FILE-TEST   224M   716K   223M    420K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K

Migawka: zfs snapshot FILE-TEST@5

      FILE-TEST   224M   790K   223M    424K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                          0       -    151K

Przenieś plik: mv /test/mnt/test2.txt /test/mnt/subdir/

      FILE-TEST   224M   584K   223M    444K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                        10K       -    151K

Migawka: zfs snapshot FILE-TEST@6

      FILE-TEST   224M   602K   223M    447K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                        10K       -    151K
      FILE-TEST@6                          0       -    151K

Utwórz plik linku twardego: cp -l /test/mnt/subdir/test2.txt /test/mnt/subdir/test3.txt

      FILE-TEST   224M   603K   223M    466K    192M    152K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                        10K       -    151K
      FILE-TEST@6                        12K       -    151K

Uwagi z powyższego:

  • ROZMIAR i BEZPŁATNIE są bardzo stałe i zgodne z zajmowaną przestrzenią plików
  • ALLOC jest losowy
  • REFER na migawkach wydaje się być równy ówczesnemu REFER na puli
  • W przypadku większości operacji USED na migawkach wynosi około 10 KB, z wyjątkiem zmiany pliku, w której USED jest nieco większy niż cały zmieniony rozmiar pliku.
  • UŻYWANY na basenie rośnie w nierównych skokach
  • REFER stopniowo rośnie około 1K na operację
  • Migawki nieprądowe mają niezmieniony rozmiar

Jakie są twoje badania? Czy próbowałeś odpowiedzieć 1-4,6 eksperymentem? Jeśli nie, to dlaczego nie?
Kamil Maciorowski

1
@KamilMaciorowski zadajesz uczciwe pytanie, a ja powinienem był i potencjalnie faktycznie przeprowadziłem te badania. Jednak celem takiej witryny kontroli jakości jest upublicznienie informacji. Oprócz tego moje eksperymenty stanowią pojedynczy punkt danych, który, jeśli odpowiedź na 7.) jest taka, że ​​jest specyficzny dla implementacji, byłby na ogół nieistotny. Jeśli znasz odpowiedzi, możesz uczynić je publicznie dostępnymi i dostępnymi do wyszukiwania tutaj, jednocześnie czerpiąc korzyści z rosnącej liczby punktów. To zwycięstwo dla wszystkich.
J Collins,

„wykonałem to badanie. Jednak celem takiej witryny kontroli jakości jest upublicznienie informacji” - Racja, ale nie udostępniłeś swoich badań publicznie. :) Mój pierwszy komentarz brzmiał: „jakie są twoje badania?”. Gdybym był tobą, wybrałbym „w moim Debianie odpowiedzi na 1-4 to…, ale prawdziwe pytanie to 7, które brzmi… i nie mogę na to odpowiedzieć sam”.
Kamil Maciorowski

@KamilMaciorowski, masz teraz bogactwo danych, które wygenerowałem, zajęło to kilka godzin i nie jestem pewien, czego się nauczyłem ..! Czy chcesz dodać posiadane informacje?
J Collins,

Nie mam nic. W ogóle nie używam ZFS. Głosowałem za pytaniem.
Kamil Maciorowski,

Odpowiedzi:


1
  1. Kiedy plik jest modyfikowany w ZFS po migawce, czy migawka będzie miała ten sam rozmiar i tylko różnice, czy cały plik?

Różne bloki zwiększają rozmiar.

Oznacza to, że jeśli plik składa się ze 100 bloków i zmodyfikujesz pojedynczy bajt (zakładając, że jeden bajt jest mniejszy niż jeden blok), na końcu zostanie dodany jeden nowy blok (łącznie 101), twój stary plik będzie odnosił się do bloków 1 do 100 ( można uzyskać dostęp tylko do odczytu z migawki), a Twój nowy / bieżący plik będzie odnosił się do bloków 1 do 37 i 39 do 101 (lub dowolnej innej kombinacji w zależności od faktycznej operacji modyfikacji).

Gdy tylko zniszczysz migawkę, blok 38 zostanie oznaczony jako wolny i może zostać nadpisany (o ile żadne inne migawki go nie odwołują).

  1. Kiedy plik zostanie przeniesiony do ZFS po migawce, czy migawka pozostanie zasadniczo zerowa?

W tym samym systemie plików tak, oprócz metadanych (na przykład odniesienia należy zmienić).

Pomiędzy systemami plików jest to operacja pełnego kopiowania i usuwania, nawet jeśli systemy plików znajdują się w tej samej puli lub są potomkami.

  1. Czy po zmianie migawki nazwa pliku w ZFS zostanie zmieniona na zero?

Tak, oprócz metadanych (na przykład twoje nowe imię musi być gdzieś zapisane).

  1. Czy po utworzeniu migawki w pliku, w której znajduje się dowiązanie do pliku, pozostanie zasadniczo pusta?

Czy mógłbyś być bardziej szczegółowy tutaj?

  1. Sugeruje się, że BTRFS jest zaprojektowany tak, aby robić w zasadzie te same rzeczy, co ZFS, czy zatem można by oczekiwać takich samych zachowań w tych warunkach?

Nie przypuszczałbym, że robi to wszystko tak samo.

  1. Kiedy komputer z systemem Windows uzyskuje dostęp do udziału ZFS zdalnie przez SAMBA, czy powyższe zachowanie jest prawdziwe, czy też SAMBA stanowi podzbiór standardowych instrukcji dysku, tzn. Ruch staje się kopią + usunięciem?

Masz dwie możliwe implementacje udostępniania plików Windows - albo serwer CIFS opracowany przez Sun dla Solaris i otwarty z OpenSolaris / illumos, albo implementację Samba SMB, która jest używana w prawie wszystkich dystrybucjach GNU / Linux i systemach BSD:

  • Wersja Solaris jest lepiej dostosowana do funkcji ZFS (takich jak ustawianie właściwości udostępniania bezpośrednio w systemach plików, implementacja migawek ZFS jako poprzednich wersji systemu Windows.
  • Z drugiej strony wersja Samba jest bardziej wieloplatformowa i ma bardziej zaawansowane funkcje, takie jak (częściowa) obsługa SMB3, IIRC.

Zakładam, że w drugim przypadku masz prawie to samo, co na innych systemach, chociaż go nie testowałem.

  1. Czy możliwe jest ogólne udzielenie odpowiedzi na powyższe pytania, czy też wszystkie odpowiedzi dotyczą konkretnego wdrożenia?

Możesz na nie odpowiedzieć zgodnie z kodem, który znajduje się na repozytorium illumos / OpenZFS (repozytorium Github), jeśli lubisz czytać kod C, lub możesz odpowiedzieć ogólnie na podstawie stron podręcznika i dokumentacji. Na przykład właściwości REFER, UŻYWANE itd. Są tam szczegółowo wyjaśnione. Najbardziej interesujące strony to man zpool(sprzęt, układy dysków, właściwości puli), man zfs(właściwości systemu plików, migawki, klony), man chmod(tylko Solaris / illumos, listy ACL plików i udziałów) oraz man zdb(debugowanie i analiza).


Odnośnie 4.) i twardej kopii, jeśli masz migawkę pliku, a następnie wykonaj jego kopię za pomocą powiedzmy, cp -l ...aby wygenerować plik z tym samym i-węzłem, to czy różnica przechowywana między migawką a bieżącym systemem plików będzie zasadniczo zerowa , czy będzie to rozmiar nowego pliku. Być może innym pytaniem jest to, czy ZFS jest w pełni świadomy linków twardych, co powinno być oczywistym pytaniem.
J Collins,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.