Przenoszenie systemu plików ZFS z jednej puli do drugiej

18

Rozszerzam serwer Solaris 10 U8 o dodatkową pulę pamięci oprócz root rpool.

Jaki jest najbardziej efektywny / prosty / niezawodny sposób przenoszenia określonych systemów plików ZFS z rpool do tej nowej puli pamięci?

Czy można to zrobić online, czy powinienem najpierw zamknąć usługi przy użyciu tych pul?

Asgeir S. Nilsen
źródło

Odpowiedzi:

15

Pytanie o wyłączenie usług zasadniczo zależy od samych usług:

  • Czy aktywnie piszą do systemu plików, który planujesz przenieść?
  • Czy przechowują trwałe dane, które chcesz zachować.

W każdym razie wysłanie systemu plików ZFS może zająć dużo czasu. Można zminimalizować niedostępność usług, utrzymując je online przez większość czasu w ten sposób:

  • utwórz migawkę
  • wyślij tę migawkę w sposób wcześniej sugerowany, ale zachowując wszystkie usługi aktywne
  • po odebraniu fs w drugiej puli wyłącz ograniczenia usług krytycznych do tego systemu plików. Upewnij się, że nowy system plików w puli docelowej nie został zmodyfikowany, ponieważ zmiany i tak zostaną odrzucone później.
  • utwórz drugą migawkę (np. snapshot2)
  • wysyłaj drugą migawkę stopniowo, to będzie znacznie szybciej niż poprzedni transfer. na przykład:

    zfs wyślij -i rpool / filesystem @ snapshot rpool / filesystem @ snapshot2 | zfs odbiera -F destinationpool / system plików

  • po zakończeniu przenieś punkt montowania systemu plików ze starego zestawu danych do nowego. na przykład:

    zfs set mountpoint=/application/directory.old rpool/filesystem
    

    zfs set mountpoint = / application / katalog destination / system plików

Musisz się upewnić, że żaden proces nie jest związany /application/filesystem(np. Dostęp do plików lub posiadanie go jako bieżącego katalogu), aby to osiągnąć.

  • włącz ponownie usługi i gotowe.
jlliagre
źródło
10

Nie sądzę, że można to zrobić online, ale mój proces polegałby na zamknięciu niezbędnych usług, zrobieniu migawki i skorzystaniu z wysyłania / odbierania ZFS w celu przeprowadzenia migracji. Coś jak:

zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem

Edytować:

Jeśli zainstalujesz polecenie „widok potoku” (pv), możesz monitorować stan transferu za pomocą:

zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
ewwhite
źródło
10

Powtarzam wiele z tego, co powiedział jlliagre, ale z dodatkami do potomnych systemów plików. (Przeważnie więc mam odniesienie, gdy zapomnę.)

Jeśli masz pod-systemy plików, będziesz chciał użyć -rflagi w poleceniu migawki zfs i flagi -rlub -Rw zfs sendpoleceniu. Wielkie litery -Rprzenoszą wszystkie właściwości , migawki i klony.

Aby przenieść całą pulę:

zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool

następnie, aby zsynchronizować zmiany dla krótszego okresu migracji, zamknij aplikacje, zamknij sambę, nfs

zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool

Jeśli tworzysz wiele migawek pośrednich dla migracji, przeczytaj stronę podręcznika na temat zfs send -Iprzełącznika.

Dan Buhler
źródło
3
W moich eksperymentach wydawało się, że dokładnym poleceniem jest: zfs send -R Pool0 @ moving | zfs odbiera -dF Pula 1
TinkerTank
4

Przyniesie ci również korzyść w użyciu narzędzia takiego jak „mbuffer” w potoku; najwyraźniej wydajność wysyłania / odbierania ZFS znacznie się poprawia, jeśli oba końce mogą przeważnie przesyłać strumieniowo dane w sposób ciągły, a bez mbuffera (lub czegoś podobnego) uzyskuje się efekt ping-ponga, w którym jeden ciągle blokuje się na drugim.

Adam Thompson
źródło
Pamiętaj, że jest to bardzo stare pytanie (ponad 5 lat), a Twoja odpowiedź raczej nie doda niczego do tak starego pytania.
Catherine MacInnes
1
To świetna rada i używam jej również do ruchów w basenie.
Dan Buhler