rsync / से tar संग्रह


7

क्या यह संभव है कि राल संग्रह (स्थानीय) के साथ एक वास्तविक फाइलसिस्टम (रिमोट) rsync करें? यदि हां, तो कैसे?

समस्या यह है कि मुझे उपयोगकर्ता / समूह / अनुमति सेटिंग्स का सही ढंग से बैकअप लेने की आवश्यकता है और जब मुझे रिमोट पर रूट एक्सेस करना है तो मैं स्थानीय मशीन पर रूट के रूप में चलने से बचना चाहूंगा।

मेरा पहला (और सबसे महत्वपूर्ण) उपयोग मामला बिल्डरोट द्वारा निर्मित एक .tar से एक दूरस्थ एम्बेडेड लक्ष्य (ARM9) को अद्यतन करने के लिए होगा। मेरे पास डिस्क पर "वास्तविक चीज़" नहीं है (मैं रूट होने के दौरान एक कॉपी का उत्पादन कर सकता हूं) और मैं कुछ फ़ाइलों को अपडेट करने के लिए पूरे रूटफ़्स को स्थानांतरित करने से बचना चाहूंगा।


नहीं, आप rsync के साथ टार आर्काइव में सीधे / से फ़ाइलों को सिंक नहीं कर सकते। कैसे के बारे में सिर्फ एक निर्देशिका पदानुक्रम में टार फाइल निकालने, फिर उस के खिलाफ rsync चल रहा है, और अंत में फिर से एक टार संग्रह में सब कुछ डाल? जो आपको फ़ाइलों को स्थानांतरित करने से बचाएगा, लेकिन निश्चित रूप से TAR फ़ाइलों के साथ कुछ फ़िडलिंग की आवश्यकता होती है।
सामी Laine

@SamiLaine: जैसा कि उस दृष्टिकोण के साथ मेरी समस्या है, मुझे उपयोगकर्ता / समूह / अनुमति सेटिंग्स को संरक्षित करने की आवश्यकता है और यह केवल रूट के लिए संभव है। मैं वर्तमान में फ़ेकरूट का उपयोग कर रहा हूँ, जो मुझे ठीक वही चाहिए जो मुझे चाहिए। मैं अपने समाधान को "उत्तर" के रूप में पोस्ट करूंगा, अगर यह वास्तव में काम करता है।
ZioByte

जवाबों:


1

सही उत्तर फ़ेकोकुट (रूट बनने से बचने के लिए) का उपयोग करके टार संग्रह को अनपैक करने और फिर rsync का उपयोग करने के लिए प्रतीत होता है। यदि आवश्यक हो, तो पुरालेख को संभवतः वापस कर दें।

दुर्भाग्य से चीजें इस आसान नहीं हैं क्योंकि ssh और fakeroot के बीच खराब बातचीत। मैं जो कुछ भी खोज करने में मदद करने के लिए किया था उसका विस्तार करूंगा

सिद्धांत सीधा है:

  1. एक अस्थायी निर्देशिका बनाएँ
  2. इसमें टार संग्रह अनपैक करें
  3. आवश्यकतानुसार rysnc
  4. अगर कुछ स्थानीय रूप से बदल दिया गया है तो एक नया टार संग्रह संग्रह होगा
  5. साफ - सफाई

सभी यूजर / ग्रुप / परमिशन स्टेप्स को संरक्षित करने के लिए 2..4 को fakeroot के तहत किया जाना चाहिए।

पकड़ 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' नहीं बना सका।" लेकिन यह सौम्य प्रतीत होता है (कोई फाइल वहाँ नहीं बनाई / उपयोग की जाती है)।


आपका क्या मतलब है "नकली रूट का उपयोग कर रहे हैं" टार्क अनुमतियाँ एक समस्या हैं? Ie मुझे लगता है कि मैंने मान लिया था कि आप rsync के माध्यम से अपनी फ़ाइलों का एक टार संग्रह किसी अन्य सिस्टम पर अपनी निर्देशिका में स्थानांतरित कर रहे थे। यदि आप अनुमतियों को संरक्षित करने के बारे में बात कर रहे हैं, तो क्या आप यूआईडी / जीआईडी ​​के अलावा अन्य डेटा को कॉपी / संरक्षित भी करते हैं? rsync ACL और अन्य विस्तारित विशेषताओं (मेटाडेटा) को स्थानांतरित कर सकता है, लेकिन अधिकांश वर्तमान / मानक टार प्रोग्राम उस जानकारी को संग्रहीत नहीं करेंगे, इसलिए अनुमान था कि आपको इसकी आवश्यकता नहीं थी। आप टार आर्काइव में क्यों पैकिंग कर रहे हैं? --- अगर कुछ स्थानीय स्तर पर बदलता है, तो सीधे rsync क्यों नहीं?
अस्तारा

अन्यथा, आप टार-संग्रह को स्थानांतरित कर सकते हैं और इसे लक्ष्य पर अनपैक कर सकते हैं और --keep-new-files स्विच का उपयोग कर सकते हैं, जो कहता है कि मौजूदा फ़ाइलों को प्रतिस्थापित नहीं करें जो कि टार संग्रह में संस्करण की तुलना में नए हैं। लेकिन अगर आपके पास बस कुछ फाइलें हैं, तो निश्चित रूप से आप सीधे rsync क्यों नहीं करेंगे। यदि आप दोनों सिरों पर फ़ाइलें रखते हैं, तो यह न देखें कि आपको फ़ेकरूट की आवश्यकता क्यों है। इसके विपरीत, यदि दोनों प्रणालियों पर रूट बन सकते हैं, तो बस रूट के रूप में 'rsync' का उपयोग करें। यदि आप ssh का उपयोग करते हैं, तो बस सोर्स सिस्टम (रूट के रूप में) पर एक कुंजी बनाएं, और रिमोट-रूट के ssh में स्टोर करें। फिर आप w / no पासवर्ड लॉगिन कर सकते हैं (यदि ssh उस तरह से कॉन्फ़िगर किया गया है)।
अस्तारा

@Astara: टार बिल्डरो द्वारा पैक के रूप में पूरा रूट-फाइलसिस्टम है; यह आवश्यकतानुसार GID / UID / अनुमतियों के साथ पूरा होता है और निर्माण प्रणाली द्वारा ही GNUtar संग्रह में पैक किया जाता है। मैं वास्तव में इसके साथ मध्यस्थता नहीं करना चाहता। चूंकि यह काफी बड़ा हो सकता है और लक्ष्य बहुत दूरस्थ हो सकता है इसलिए मैं न्यूनतम स्थानांतरण समय के साथ लक्ष्य को अपडेट करने के लिए rsync का उपयोग कर रहा हूं। सिस्टम फ़ाइलों को अधिलेखित करने के लिए मुझे लक्ष्य पर रूट बनने की आवश्यकता होगी, लेकिन विकास प्रणाली पर ऐसा नहीं हो सकता है।
ZioByte

BTW, rsync डिफ़ॉल्ट रूप से 'rsh' का उपयोग करता है जिसकी सुरक्षा कम होती है लेकिन इसमें सुरक्षा की आवश्यकताएं भी कम होती हैं।
अस्तारा

0

मैंने वास्तव में यह कोशिश नहीं की है, लेकिन यह काम करना चाहिए।

'आर्कमाउंट' (स्रोत से :) का उपयोग कर

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

और कई विकृतियों (suse, redhat, आदि) में शामिल एक 'लिबेरक्टिव' ...

या पहले से निर्मित:

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

आप linux में fusermount सुविधा का उपयोग करके एक टार-संग्रह माउंट कर सकते हैं।

वहां से, आपको सीधे अंतिम सिस्टम में rsync का उपयोग करने में सक्षम होना चाहिए

मैंने rsync के passthrough का परीक्षण करने के लिए एक साधारण पस्च्राउट बैचफाइल लिखा:

#!/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

यह आपको लक्ष्य sys के रूट लॉगऑन के पासवर्ड के लिए पूछेगा, या आप किसी प्रमाणपत्र के माध्यम से रूट लॉगिन को स्वीकार करने के लिए लक्ष्य प्रणाली को सेटअप कर सकते हैं, इसलिए किसी पासवर्ड की आवश्यकता नहीं होगी।

यह होता प्रतीत तुम क्या चाहते करने के लिए सबसे कारगर तरीका होना करने के लिए (आप rsync विकल्पों को संशोधित करने के लिए इस तरह dir बार और चीजों को कॉपी नहीं की आवश्यकता हो सकती है), लेकिन इस बात के लिए आप देख रहे थे के प्रकार है?

-Astara


जैसे ही मुझे थोड़ा सा समय मिलेगा, मैं इसकी जाँच करूँगा, क्योंकि यह वर्तमान पद्धति की तुलना में बहुत अधिक कुशल है; सिर्फ एक चिंता: अगर मैं वास्तव में टार आर्काइव को "माउंट" करता हूं और सामान्य उपयोगकर्ता के रूप में "इसका उपयोग करता हूं" तो क्या मुझे "केवल रूट से पठनीय" सभी फाइलों तक पहुंचने से इनकार नहीं किया जाएगा? एक रूटफ़्स में से कई हैं, यहां तक ​​कि लॉग फाइल (परिभाषा के अनुसार खाली) को छोड़कर।
ZioByte

आपके द्वारा उल्लिखित पहुंच समस्या एक मुद्दा नहीं होनी चाहिए। यदि छवि में रूट-रीड-ओनली फाइलें हैं, तो 'बिल्डरोॉट' (उपयोगकर्ता द्वारा बनाया गया, सही होगा?) पहले स्थान पर टार-इमेज में डालने के लिए फाइलें कैसे पढ़ें?
अस्तारा

मुझे डर है कि आप जटिलता को नहीं समझते हैं;) बिल्डरोट रूट फाइल सिस्टम की नकल करते हुए एक पूरी निर्देशिका तैयार करता है, लेकिन जाहिर है, वर्तमान उपयोगकर्ता के स्वामित्व के साथ। जब सब कुछ तैयार हो जाता है तो यह उचित स्वामी और अनुमतियों के साथ टार संग्रह तैयार करने के लिए fakeroot (देखें: wiki.debian.org/FakeRoot ) के तहत एक पास करता है । यह ठीक है (रिवर्स में) क्या मैं वर्तमान में, लक्षित करने के लिए जहाँ मैं uid / gid / अनुमतियों को पुन: कर सकते हैं क्योंकि वहाँ मैं सब कुछ जहाज के लिए कर रहा हूँ कर रहा हूँ जड़। लूपबैक के माध्यम से टार बढ़ते हुए एक अच्छा विचार है, लेकिन मुझे rsync चलाने के लिए जड़ बनना होगा :(
ZioByte

जो सच है: बिल्डरोट एक वास्तविक-रूट से एक टार-इमेज बनाता है, या बिल्डरोट एक पेड़ से एक टार-इमेज बनाता है जो पूरी तरह से उपयोगकर्ता के स्वामित्व में है? क्या बिल्डरोट उपयोगकर्ता-ट्री में फ़ाइलों के स्वामित्व को अनुकरण करने के लिए 'फ़ेकरूट' का उपयोग करता है, इसलिए बिल्ड छवि "" रूट (या अन्य उपयोगकर्ताओं) के स्वामित्व वाली फ़ाइलों को देखता है जब यह टार छवि बना रहा है? यदि ऐसा है, तो 'रूट' (जहाँ सभी फ़ाइलें उपयोगकर्ता के स्वामित्व में हैं) बनाने के लिए उपयोग किए जाने वाले मूल उपयोगकर्ता ट्री से rsync नहीं है, लेकिन 'rsync' के तहत fakeroot का उपयोग करें, इसलिए rsync फ़ाइलों को देखेगा "सही" फ़ाइल परमिट + मालिकाना?
अस्तारा

@ZioByte: यदि आप रूट-परमिट के साथ एक टारक बनाने के लिए फ़ेकरूट का उपयोग करते हैं, तो आपने "संरक्षित-छवि" का एक प्रकार बनाया है, जिसे रूट / परमिट (w) / ओ रूट निजी और (एक ही तरह से) नहीं निकाला जा सकता है, यदि आप इसे एक संग्रह के रूप में माउंट करते हैं तो यह पूरी तरह से सुलभ नहीं होगा। आपको पुरालेख को "संरक्षित" करने से पहले फ़ाइलों को एक्सेस करने की आवश्यकता है, फिर rsync के तहत फ़ेकरूट चलाएं, इसलिए rsync को लगता है कि यह रूट-स्वामित्व वाली फ़ाइलों को स्थानांतरित कर रहा है - कि दूरस्थ rsync (जो रूट के तहत चल रहा है) w / निकलेगा उचित अनुमति।
अस्तारा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.