Problem polega na tym, że chcę widzieć błędy podczas przenoszenia pliku, ale nie widzę błędów związanych z problemem uprawnień. Innymi słowy - zależy mi, czy plik nie zostanie w pełni przesłany, ale nie chcę widzieć takich błędów:
mv: nie udało się zachować własności dla `/home/blah/backup/pgsql.tar.gz ': Operacja niedozwolona
Więc chcę coś takiego: mv $backupfile $destination --ignore-permissions
.
Plik kopii zapasowej może mieć rozmiar od 1 MiB do 5 GiB i jest przesyłany przez NFS.
cifs
).Odpowiedzi:
mv
jest niewłaściwym narzędziem do tego zadania; chceszcp
i wtedyrm
. Ponieważ przenosisz plik do innego systemu plików, i tak właśnie dzieje sięmv
to za kulisami, ale oprócz tegomv
próbuje również zachować bity uprawnień do plików oraz informacje o właścicielu / grupie. Jest tak, ponieważmv
zachowałby te informacje, gdyby przenosił plik w tym samym systemie plików imv
próbował zachowywać się w ten sam sposób w obu sytuacjach. Ponieważ nie zależy Ci na zachowaniu bitów uprawnień do plików oraz informacji o właścicielu / grupie, nie używaj tego narzędzia. Użyjcp --no-preserve=mode
irm
zamiast.źródło
cp --no-preserve=mode,ownership $backupfile $destination
sprawdź kod wyjścia, a następnie zrób,rm $backupfile
jeśli wszystko jest w porządku.Gdy przenosisz plik w tym samym systemie plików,
mv
odłącza on plik od jego starej lokalizacji i dołącza go do nowej lokalizacji; metadane, takie jak uprawnienia, pozostają takie same. Gdy przenosisz plik do innego systemu plików,mv
kopiuje go, próbuje replikować jak najwięcej metadanych, jak to możliwe, i usuwa oryginał.Ponieważ przenosisz się do innego systemu plików i nie chcesz replikować dużej ilości metadanych, równie dobrze możesz skopiować plik, a następnie usunąć oryginał.
Zachowuje to do pewnego stopnia uprawnienia do pliku (np. Czytelność na świecie, wykonywalność). Czas modyfikacji pliku nie jest zachowywany. Dzięki GNU
cp
możesz użyć--preserve=…
opcji, aby lepiej kontrolować, które metadane są replikowane dokładniej, np--preserve=mode,timestamps
.Możesz także użyć
rsync
i powiedzieć, co chcesz zachować. Ta opcja-a
oznacza „zachowaj większość metadanych”, w tym właściciela, jeśli działa tylko jako root.źródło
rsync
Rozwiązanie działa doskonale. Próbowałem przenieść moją starą instalację Ubuntu z udziału CIFS. Mój rsync nie zgłosił niepowodzenia przenoszenia pliku, ale go nie przenosił i tylko zgłaszał problemy z uprawnieniami.rsync
rozwiązanie!