Фон
Какой "правильный" метод использования rsync для резервного копирования данных? Причина, по которой я спрашиваю о "правильном" методе, заключается в том, что мой прошлый опыт использования rsync привел к проблемам, связанным с разрешениями, маской файла/папки и временными метками. Поэтому этот вопрос направлен на то, чтобы понятькак использовать rsync для резервного копирования данных, не сталкиваясь с проблемами, связанными с разрешениями, маской файла/папки или временными метками, особенно когда rsync используется в системе Windows.
Еще одна причина задать этот вопрос — убедиться, что я не вмешиваюсь в своюпредыдущий выпускгде я не мог получить доступ ни к одному файлу на моем внешнем диске, который был скопирован с помощью rsync через cygwin. Это был кошмар, потому что я фактически потерял данные на своем основном ПК и пытался восстановить их из резервной копии.
Ниже приведены похожие проблемы, с которыми я столкнулся при использовании rysnc:
- Невозможно получить доступ к файлам на внешнем диске, резервная копия которых была создана с помощью rsync.Резервное копирование на основе Rsync и Cygwin в Windows приводит к ошибкам отказа в доступе
- Невозможно сохранить временную меткуhttps://unix.stackexchange.com/questions/61586/how-to-tell-rsync-to-preserve-time-stamp-on-files-when-source-tree-has-a-mounted
- rsync - mkstemp не удалось решить проблемуhttps://stackoverflow.com/questions/11039559/rsync-mkstemp-failed-permission-denied-13
Мое понимание использования rsync среднее, и я ссылался на руководства, перечисленные ниже. Однако, моя самая большая путаница в использовании rsync происходит из-за разрешений, маскировки файлов/папок, Posix и т. д.
Требования/Предположения
- Я хочу использовать rsync в контексте «резервного копирования», а НЕ в контексте «синхронизации». Часто другие пользователи, задающие вопросы, связанные с rsync, могут быть заинтересованы в «синхронизации» данных, чтобы гарантировать, что у них есть рабочая копия файлов на другом ПК в синхронизации. Однако мое намерение заключается не в «синхронизации», а просто в «резервном копировании», чтобы, если что-то случится с моим ПК, я мог получить последнюю резервную копию и восстановить ее.
- Исходные файлы, которые необходимо создать резервную копию, могут существовать в любой операционной системе (например, Windows, Ubuntu, MacOS), но в первую очередь в Windows.
- В Windows rsync используется с использованием подсистемы Windows для Linux (WSL), а НЕ через cygwin.
- Местом назначения резервной копии может быть внешний диск, отформатированный как NTFS, FAT32 или exFAT, или это может быть сетевой диск (например, общий ресурс Samba).
- Это не обязательно, но к месту назначения можно подключиться с помощью SSH.
Мой текущий метод и проблемы
Я использую rsync через подсистему Windows для Linux (WSL) в Windows 10. Ниже приведены примеры проблем, с которыми я столкнулся:
Пример 1:Не работает
rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
Этот метод приводит к тому, что файлы НЕ переносятся и возникают ошибки, подобные приведенным ниже:
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
и
rsync: mkstemp "/mnt/my_usb_mount/ProjectA/src/.mydata.json.6cfTCf" failed: Operation not permitted (1)
Пример 2:Частично работает
rsync -avhP --no-p --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
или
rsync -avhP --no-p --chmod=ugo=rwX --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
Этот метод использования rysnc приводит к тому, что файлы передаются, но временная метка (создание, изменение, доступ) устанавливается на время передачи. Если я снова запущу команду rsync, все файлы будут определены как измененные и будут повторно переданы из-за неправильной временной метки. Кроме того, я получаю ошибки, подобные следующим:
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
Пример 3:Работает правильно.
sudo rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
Этот метод работает отлично, однако я не понимаю, почему я должен использовать sudo
? Это потому, что я использую rsync на Windows через WSL? Мне нужно было бы использовать , sudo
если бы я делал резервную копию файлов с ПК Linux (например, Ubuntu)?
Хотя пример 3 является рабочим решением, у меня все еще есть много вопросов:
- Как узнать, когда
sudo
это необходимо? - Когда я использую
--no-p
или--chmod=ugo=rwX
- Что делать, если у меня нет разрешений на использование
sudo
? - Будет ли это работать, если я создаю резервную копию файлов на сетевом диске?
- Что делать, если я использую SSH?
- При использовании rsync из Windows через WSL, столкнусь ли я когда-нибудь со странными проблемами с правами доступа или маской файла/папки, поскольку яранее иметь?
решение1
Ntfs и fat не заботятся о разрешениях Linux, вы должны сделать резервную копию на разделе ext4
или сделайте резервную копию и сожмите ее в tar.gz, а затем распакуйте ее в системный файл Linux и восстановите ее