6

Возможно ли rsync для реальной файловой системы (удаленной) с архивом tar (локальной)? Если так, то как?

Проблема в том, что мне нужно правильно сделать резервную копию настроек пользователя / группы / разрешений, и, хотя у меня есть доступ с правами root на удаленном компьютере, я бы хотел избежать запуска с правами root на локальной машине.

Моим первым (и самым главным) вариантом использования было бы обновление удаленной встроенной цели (ARM9) из .tar, созданного Buildroot. У меня нет "реальной вещи" на диске (я могу создать копию, будучи root), и я хотел бы избежать передачи целых rootfs для обновления нескольких файлов.

2 ответа2

1

Правильный ответ, кажется, состоит в том, чтобы распаковать архив tar с помощью fakeroot (чтобы не стать пользователем root), а затем использовать rsync. Возможно, перепакуйте архив, если это необходимо.

К сожалению, все не так просто, потому что плохое взаимодействие между ssh и fakeroot. Я подробно опишу, что я сделал, чтобы помочь тому, кто будет искать.

Теория проста:

  1. создать временный каталог
  2. распаковать в него архив tar
  3. rysnc по мере необходимости
  4. если что-то изменилось локально, перепакуйте в новый архив tar
  5. уборка

Для сохранения всех пользователей / групп / разрешений шаги 2..4 должны быть выполнены в fakeroot.

Catch is rsync использует ssh для связи (и я этого хочу!) и, таким образом, будучи "fakerooted", он пытается открыть корневые учетные данные (в /root/.ssh/), что плохо. Следующий набор опций работает для меня.

#!/bin/bash

target=myHost
here=$(pwd)

# 1. create a temp directory
cd /tmp
mkdir TMPfs
cd TMPfs

fakeroot bash <<- EOF
    # 2. unpack tar archive into it
    tar xf $here/archive.tar
    # 3. rysnc as needed (ssh options are *the* relevant thing)
    rsync -av -e "ssh -i $HOME/.ssh/id_rsa -oUserKnownHostsFile=$HOME/.ssh/known_hosts" . root@$target:/
    # 4. if something changed locally repack int a new tar archive (not needed here)
EOF

# 5. cleanup
rm -rf *
cd ..
rmdir TMPfs

Я все еще получаю сообщение об ошибке «Не удалось создать каталог« /root/.ssh ».» но это, кажется, доброкачественно (никакие файлы не созданы / используются там).

0

Я на самом деле не пробовал это, но это должно работать.

Использование 'archivemount' (источник из :)

http://www.cybernoia.de/software/archivemount/

и «архив», включенный во многие дистрибутивы (suse, redhat и т. д.)...

Или готовый из:

https://rpmfind.net/linux/rpm2html/search.php?query=archivemount

Вы можете смонтировать tar-архив с помощью средства fusermount в linux.

Оттуда, вы должны быть в состоянии использовать Rsync непосредственно к конечной системе.

Я написал простой транзитный пакетный файл для проверки прохождения через rsync:

#!/bin/bash
# ussh -- use root@ssh to target system
exec ssh  root@"$@"

затем, в качестве теста, использовал rsync для передачи dir 'test1' в 'ishtar', вызывая его /tmp /test2 для цели:

RSYNC_RSH=$PWD/Ussh rsync -uva /tmp/test1/ ishtar:/tmp/test2

Он попросит вас ввести пароль для входа пользователя root в систему sys, или вы можете настроить целевую систему на прием имени пользователя root через сертификат, чтобы пароль не требовался.

Казалось бы, это наиболее эффективный способ сделать то, что вы хотите (вам может понадобиться изменить параметры rsync, чтобы не копировать время dir и тому подобное), но вы искали именно этот тип?

-Астара

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .