zfs बच्चे में रूट फाइल सिस्टम का नाम बदलें / स्थानांतरित करें


9

इसी तरह का सवाल मौजूद है, लेकिन समाधान (उपयोग mv) भयानक है क्योंकि इस मामले में यह "कॉपी" के रूप में काम करता है, फिर "शुद्ध" चाल के बजाय "हटा दें"।

इसलिए, मैंने एक पूल बनाया:

zpool create tank /dev/loop0

और मेरे डेटा को सीधे किसी अन्य स्टोरेज से rsynced किया ताकि मेरा डेटा अब अंदर हो /tank

zfs list
NAME      USED  AVAIL  REFER  MOUNTPOINT
tank      591G  2.10T   591G  /tank

अब मैंने महसूस किया है कि मुझे अपने डेटा को /tankसीधे फाइल सिस्टम में नहीं बल्कि एक चाइल्ड फाइल सिस्टम में होना चाहिए ।

तो मैं मौजूदा रूट फाइल सिस्टम को कैसे स्थानांतरित या नाम दूं ताकि यह पूल के भीतर एक बच्चा बन जाए?

सरल नाम काम नहीं करेगा:

zfs rename tank tank/mydata
cannot rename to 'tank/mydata': datasets must be within same pool

(Btw, क्यों यह शिकायत करता है कि डेटासेट एक ही पूल के भीतर नहीं हैं, यदि वास्तव में मेरे पास केवल एक पूल है?)

मुझे पता है कि ऐसे समाधान हैं जिनमें सभी डेटा की नकल करना ( mvया पूरे डेटासेट को किसी अन्य डिवाइस और बैक पर भेजना) शामिल है, लेकिन क्या एक सरल सुरुचिपूर्ण तरीका नहीं होना चाहिए?

बस यह देखते हुए कि मैं इस स्तर पर स्नैपशॉट की परवाह नहीं करता (देखभाल करने के लिए अभी तक कोई नहीं हैं)।

जवाबों:


4

(टिप्पणियों में नोट देखें, यह काम करता है, लेकिन आप कभी भी स्नैपशॉट को हटा नहीं पाएंगे, इसलिए यह एक अच्छा समाधान नहीं है)

जेडएफएस के साथ यह आश्चर्यजनक रूप से सीधा है: बस स्नैपशॉट, क्लोन और फिर आरएम। कोई अतिरिक्त स्थान या कॉपी समय की आवश्यकता नहीं है।

zfs snapshot tank@mydata
zfs clone tank@mydata tank/newname
zfs set mountpoint=/beep/boop tank/newname
rm -rf /tank/*

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

zfs delete tank@mydata

एक प्रशंसनीय उत्तर की तरह लगता है (मैं इसे स्थानांतरित किए बिना किसी नए डेटासेट में डेटा प्राप्त करने का कोई अन्य तरीका नहीं सोच सकता) लेकिन दुर्भाग्य से आप इस मूल स्नैपशॉट को हटा नहीं सकते। क्लोन के कुछ अजीब दुष्प्रभाव हैं। आप टैंक @ mydata को हटा नहीं सकते क्योंकि नया डेटासेट उस पर निर्भर करता है। आप नए डेटासेट को बढ़ावा दे सकते हैं, जो टैंक @ mydata को टैंक / newname @ mydata पर ले जाएगा, लेकिन अब आपने आस-पास की अदला-बदली की है और यदि आप कोशिश करते हैं और नए डेटासेट को हटाते हैं, तो आपको अजीब 'डाटासेट पहले से ही मौजूद हैं' FreeBSD पर, हालांकि मुझे लगता है कि यह संभवतः OS की बजाय ZFS विशिष्ट है)।
USD मैट

@USDMatt: आप पूरी तरह से सही हैं। यह पूरी तरह से काम करता है यदि आप सबफ़ाइल सिस्टम (टैंक / a -> टैंक / एक @ स्नैप -> टैंक / asnap-क्लोन -> टैंक / नामांकित-asap-क्लोन) के साथ काम कर रहे हैं, लेकिन यदि आप रूट पर काम नहीं कर रहे हैं zpool। एक बग जैसा महसूस होता है, इसे अपने पूल के रूट फाइल सिस्टम को कभी नहीं भरने के लिए एक और कारण के रूप में चाक करें)।
नोटरी

4

@USDMatt द्वारा प्रलेखित समस्या को देखते हुए, ZFS भेजना / प्राप्त करना संभवतः जाने का सबसे अच्छा तरीका है।

zfs snapshot tank@snap
zfs send tank@snap | zfs receive tank/anotherfs
zfs set mountpoint=/beep/boop tank/anotherfs
rm -rf /tank/*
zfs destroy tank@snap

Rm -rf चलाते समय देखें कि यदि आप अपने टेंक जंपर में अन्य फाइलसिस्टम नहीं रखते हैं, तो यदि आप आरोह बिंदु को नहीं बदलते हैं। आप नए फ़ाइल सिस्टम (/ टैंक / newname) या किसी अन्य चाइल्ड फ़ाइल सिस्टम (/ टैंक / *) की सामग्री को आकस्मिक रूप से पुन: हटाना नहीं चाहते हैं।


0

मुझे नहीं लगता कि कोई सरल सुरुचिपूर्ण तरीका है ... हालाँकि आप अपना माउंटपॉइंट बदल सकते हैं ...

mkdir /tank
zfs set mountpoint=/tank/mydata <possibly renamed tank set>

या शायद टैंक का नाम बदलें और फिर इसे माउंट करें जहां आपको इसकी आवश्यकता है ...

या तो, या सही जगह पर एक फाइल सिस्टम बनाएं और cp, mv, या zfs भेजें / प्राप्त करें ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.