rsync - czy tworzy plik tymczasowy podczas przesyłania?

37

O ile widzę, rsync nie tworzy pliku w katalogu docelowym, dopóki nie zostanie ukończony.

To musi oznaczać, że tworzy gdzieś plik w katalogu tymczasowym i po zakończeniu kopiuje plik do katalogu docelowego.

Po pierwsze, czy to prawda?

Jeśli to prawda, czy możliwe jest, aby rsync nie korzystał z katalogu tymczasowego i zamiast tego tworzył plik w katalogu docelowym i po prostu zapisywał go do momentu zakończenia?

Gepard
źródło

Odpowiedzi:

46

Tak, tworzy plik tymczasowy.

Zgodnie ze stroną podręcznika man możesz określić katalog, w którym plik temp jest przechowywany za pomocą parametru -T jak w

-T, --temp-dir = DIR tworzy pliki tymczasowe w katalogu DIR

Odpowiedź na drugą część twojego pytania można również znaleźć tutaj:

--w miejscu

Ta opcja zmienia sposób, w jaki rsync przesyła plik, gdy dane pliku wymagają aktualizacji: zamiast domyślnej metody tworzenia nowej kopii pliku i przenoszenia go na miejsce po zakończeniu, rsync zapisuje zaktualizowane dane bezpośrednio do miejsca docelowego plik.

superuser0
źródło
4
Ważna uwaga! Pytanie zakłada, że ​​rsync „kopiuje plik na miejsce”, podczas gdy dokumentacja rsync określa, że ​​rsync faktycznie „przenosi go na miejsce”, co jest ISTOTNĄ RÓŻNICĄ . Dzięki temu plik pojawi się w docelowej lokalizacji w sposób atomowy . Jest to przydatne, aby zapobiec warunkom wyścigu, w których inna aplikacja czeka na pojawienie się pliku docelowego i natychmiast otwiera go do odczytu, ale plik nie jest kopiowany.
Ogre Psalm33
15

Tworzy plik tymczasowy, domyślnie w katalogu docelowym i nazwie .<FILE_NAME>.<RANDOM_STRING>. Tak więc, jeśli kopiujesz foo.txt, utworzy plik tmp o nazwie .foo.txt.GV4H3( GV4H3jest losowym ciągiem, który będzie się różnił przy każdym uruchomieniu). Możesz kontrolować to zachowanie za pomocą następujących rsyncopcji:

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

Zapoznaj się z odpowiednimi częściami strony podręcznika rsyncman (poniżej znajduje się tylko niewielki fragment dużej sekcji na temat używania --partial-dir).

terdon
źródło
5

rsync tworzy pliki tymczasowe w katalogu docelowym. Ten plik ma nazwę źródłową, ale z rozszerzeniem. Może być tak:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

Rozszerzenie jest usuwane po zweryfikowaniu, że plik jest dokładną kopią źródła. Podczas procesu zmiany nazwy własności ustawiane są uprawnienia i czas modyfikacji. Możliwe więc, że nie widzisz pliku z powodu uprawnień. Upewnij się, że masz wystarczające uprawnienia, aby zobaczyć wszystkie pliki oraz te, które nie są Twoją własnością, aby zobaczyć pliki tymczasowe.

Szymon, Szymek
źródło
Proces tworzy pliki z uprawnieniami użytkownika, który je uruchamia . W tym przypadku nie można zobaczyć plików z powodu uprawnień.
Ярослав Рахматуллин
@ ЯрославРахматуллин rsync można również uruchomić w trybie demona. Lub może być zaplanowany jako koleżanka. Tak czy inaczej możliwe jest, że użytkownik, pod którym działa rsync, nie jest użytkownikiem, który chce zobaczyć plik tymczasowy. W takim przypadku możliwe jest, że jest to kwestia pozwolenia.
Simon
1
Plik tymczasowy może zaczynać się od „.”. W tym przypadku jest to .foo.bar.hzmkjt7.
interskh