2009-11-07 11 views
7

खोने के बिना लिनक्स पर सहेजती है मैं एक पर्ल-आधारित फ़ाइल सिंक्रनाइज़ेशन टूल पर काम कर रहा हूं। यह फ़ाइलों को एक अस्थायी निर्देशिका में डाउनलोड करता है (जो वास्तविक फाइल के रूप में एक ही फाइल सिस्टम पर होने की गारंटी है) और फिर अस्थायी फ़ाइलों को पुरानी जगहों पर स्थानांतरित करता है, मेटाडेटा को अनुमतियों, स्वामित्व और एसीएल को संरक्षित करता है। मैं सोच रहा हूं कि लिनक्स पर आखिरी कदम कैसे प्राप्त किया जाए।परमाणु फ़ाइल मेटाडाटा

मैक ओएस एक्स पर, कम से कम सी में, मैं exchangedata फ़ंक्शन का उपयोग करूंगा। यह तर्क के रूप में दो फ़ाइल नाम लेता है और सभी मेटाडेटा (एमटाइम के अलावा) को छोड़कर, उनकी सामग्री को स्वैप करता है। यह गारंटी देता है कि ऑपरेशन परमाणु है- सभी पाठक या तो पुरानी फ़ाइल या नया देखेंगे, कभी भी बीच में कुछ नहीं। दुर्भाग्यवश, मुझे नहीं लगता कि यह लिनक्स पर उपलब्ध है।

मुझे पता है कि rename परमाणु रूप से चलता है, लेकिन यह मेटाडेटा को संरक्षित नहीं करता है। दूसरी तरफ, मैं फ़ाइल खोल सकता हूं और डेटा को नए की सामग्री के साथ ओवरराइट कर सकता हूं, जो सभी मेटाडेटा को सुरक्षित रखेगा लेकिन परमाणु ऑपरेशन नहीं होगा। इस समस्या से निपटने के लिए कोई सुझाव?

+2

आप किस तरह के मेटाडेटा को संरक्षित करने के लिए इतना कठिन काम कर रहे हैं? यूनिक्स में मालिक/समूह/सभी के लिए मालिक/समूह और अनुमतियां हैं। क्या यह इतना बदलता है कि यह आपके लिए एक मुद्दा होगा? –

+0

कई लिनक्स फाइल सिस्टम विस्तारित विशेषताओं और एसीएल का भी समर्थन करते हैं, और एक अप्रतिबंधित उपयोगकर्ता के पास अस्थायी फ़ाइल के उपयोगकर्ता और समूह को पुराने व्यक्ति को बदलने की आवश्यक अनुमति नहीं हो सकती है। असल में, यहां बहुत सारी सूक्ष्मता शामिल है, और मैं सोच रहा हूं कि इसे संभालने के लिए कुछ पहले से मौजूद है या नहीं। –

उत्तर

6

एकमात्र दृष्टिकोण जो मैं यहां देख रहा हूं वह उस फ़ाइल से मेटाडेटा को पढ़ना है जिसे आप बदल रहे हैं, अस्थायी फ़ाइल पर लागू करें, और फिर पुरानी फ़ाइल पर अस्थायी फ़ाइल का नाम बदलें। (rename स्रोत फ़ाइल विशेषताओं को बरकरार रखता है, जाहिर है।)

+0

हालांकि यह जानना मुश्किल है कि सभी उचित मेटाडेटा क्या है। फ़ाइल विशेषताएँ, विस्तारित विशेषताओं, एसीएल, सुरक्षा लेबल, फ़ाइल क्षमताओं, और अन्य फाइल सिस्टम- या सिस्टम-विशिष्ट चीजें हैं ... – ephemient

+2

यह प्रारंभ करने के लिए चीजों की एक अच्छी सूची की तरह लगता है। "अच्छा दुश्मन महान है।" – jrockway

+0

हाँ, अगर कोई पूरा समाधान नहीं है (जो अब तक प्रतीत नहीं होता है), तो कम से कम आंशिक रूप से समस्या प्राप्त करना कुछ भी नहीं है। यहां तक ​​कि 'rsync' में मेटाडेटा का सीमित सेट भी है जो इसे जानता/परवाह करता है। – ephemient

4

फ़ाइल-विशिष्ट है, लेकिन ...

XFS_IOC_SWAPEXT ioctl XFS पर दो फ़ाइल वर्णनकर्ता के विस्तार स्वैप।

#include <xfs/xfs.h> 
#include <xfs/xfs_dfrag.h> 

xfs_swapext_t sx = { 
    ..., 
    .sx_fdtarget = fd1, 
    .sx_fdtmp = fd2, 
    ... 
}; 
xfs_swapext(fd1, &sx); 

उदाहरण के उपयोग के लिए xfs_fsr के सूत्रों देखें।

संबंधित मुद्दे