मैं OverlayFS का उपयोग कैसे करूँ?


53

यह उत्तर और ईमेल संदेश बताता है कि "ओवरलेएफएस" नामक कुछ उबंटू 11.10 में उपलब्ध है और यह उबंटू 12.04 में एयूएफ को जबरदस्ती बदल देगा।

मैं इसे कैसे इस्तेमाल करूं? इसका प्रलेखन कहाँ है?


1
आप और मैं दोनों, भाई। मैं अब तक इस पार आया हूँ mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point:। परे कि मैं अनाड़ी हूं। मैं इसके साथ एक लाइव सिस्टम में छेड़छाड़ कर रहा हूं, लेकिन मैंने इसे अभी तक काम करने में कामयाब नहीं किया है। काश मुझे पता चल सके कि वास्तव में "ऊपरी" और "लोअरडिर" का क्या मतलब है। मुझे कुछ नहीं मिला है।
चक आर

जवाबों:


63

संपादित करें: इस उत्तर को लिखने के बाद, कुछ चीजें ओवरलेफ्स में बदल गई हैं, अर्थात् एक आवश्यक पैरामीटर के अलावा workdir, इस नए पैरामीटर के विस्तृत विवरण के लिए टोट्टी का जवाब नीचे देखें।

मैं अंत में इसे खोजने में कामयाब रहा। मैंने इसे कर्नेल स्रोत में संदर्भित किया, लेकिन किसी कारण से यह कर्नेल ओआरजी पर गिट ट्री में दिखाई नहीं देता है। परंतु! यदि आप उबंटू कर्नेल स्रोत को इस तरह खींचते हैं: apt-get source linux-image-3.0.0-16-genericआप इसे पा सकते हैं linux-3.0.0/Documentation/overlayfs.txt। यह linux-doc पैकेज में भी उपलब्ध है /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz

जैसा कि वास्तविक सहायता प्रलेखन "कैसे काम करता है" के बजाय एक "कैसे इसके साथ माउंट करने के लिए" का अधिक है, यहां एक संक्षिप्त ठहरनेवाला है (कर्नेल प्रलेखन में एक उदाहरण है):

mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]

जहां [माउंट विकल्प] हो सकते हैं:

  • Lowerdir = somedir: lowerdir वह निर्देशिका है, जिस पर आप अपनी नई फ़ाइल सिस्टम को बिछाने जा रहे हैं, यदि डुप्लिकेट हैं तो ये ओवरडाइट द्वारा लिखित (वास्तव में, ऊपरी के संस्करण में छिपे हुए) हैं।
  • अपरडिर = सोमेडिर: अपरडीर वह निर्देशिका है जिसे आप लोअरडिर के साथ ओवरले करना चाहते हैं। अगर डुप्लीकेट फाइलनाम लोअरडिर और अपरडिर में मौजूद हैं, तो अपरडीयर का संस्करण पूर्वता लेता है।
  • मानक माउंट विकल्प। केवल एक ही मैंने कोड से देखा है वह आरओ / आरडब्ल्यू है, लेकिन आप प्रयोग कर सकते हैं।

एक चीज जिसने मुझे पहली बार भ्रमित किया, इसलिए मुझे शायद स्पष्ट करना चाहिए, यह है कि एक ओवरलेफ्स बढ़ते हुए वास्तव में एक फाइल सिस्टम माउंट नहीं करता है। मैं एक overlayfs माउंट का उपयोग कर एक स्क्वाशफ़्स फाइल सिस्टम को माउंट करने की कोशिश कर रहा था, लेकिन यह नहीं है कि यह कैसे काम करता है। आपको पहले (मेरे मामले में स्क्वाशफ़्स) फाइल सिस्टम को एक मनमानी निर्देशिका में माउंट करना होगा, फिर माउंट पॉइंट (एक निर्देशिका) और दूसरी निर्देशिका को तृतीयक निर्देशिका (ओवरलेफ़्स माउंट बिंदु) पर मर्ज करने के लिए ओवरलेफ़्स का उपयोग करना होगा (संपादित करें: "" तृतीयक "निर्देशिका वास्तव में ऊपरी = निर्देशिका हो सकता है)। तृतीयक निर्देशिका वह जगह है जहाँ आप मर्ज किए गए फ़ाइल सिस्टम (या निर्देशिका ट्री - यह लचीला है) देखेंगे।

उदाहरण 1, रूट फाइल सिस्टम को ओवरलेइंग

मैं उबंटू हाइब्रिड बूट डिस्क पर काम कर रहा हूं, जहां आधार उबंटू सिस्टम filesystem.squashfs के रूप में मौजूद है और मेरे पास ubuntu.overlay kubuntu.overlay xubuntu.overlay और lubuntu.overlay नामक फाइलें हैं। .Overlay फाइलें filesystem.squashfs pruned (स्थान बचाने के लिए) की सामग्री के साथ उक्त प्रणालियों का आधार संस्थापन हैं। फिर मैंने सही डिस्ट्रो की .overlay फ़ाइल (बूट पैरामीटर से) को ओवरलेफ़्स और उपर्युक्त विकल्पों का उपयोग करने के लिए init स्क्रिप्ट को संशोधित किया और यह एक आकर्षण की तरह काम करता है!

ये वो पंक्तियाँ हैं जो मैंने अपनी init लिपियों में प्रयोग की हैं (एक बार सभी चर का अनुवाद हो जाने के बाद):

mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

ध्यान दें कि ऊपर filesystem.squashfs एक फाइल द्वारा नहीं बल्कि कैस्पर द्वारा बनाई गई एक निर्देशिका है

ये तीन बयान एक /overlayनिर्देशिका बनाते हैं, निर्देशिका पर एक स्क्वाशफ़्स फ़ाइल सिस्टम को माउंट करते /overlayहैं और फिर ओवरलेफ़्फ़ का उपयोग अनिवार्य रूप से /overlayओवर की सामग्री को मर्ज करने के लिए करते हैं /

उदाहरण 2, दो निर्देशिकाओं का पारदर्शी विलय

प्रत्येक रिलीज़ के लिए अपने लाइव यूएसबी को फिर से बनाने की प्रक्रिया में, मैं समय का एक गुच्छा बचाने के लिए ओवरलेफ़्फ़ का उपयोग करता हूं। मैं ubuntu-base नामक एक निर्देशिका के साथ शुरू करता हूं जिसमें ubuntu-core छवि की सामग्री शामिल है जो सबसे बुनियादी स्थापित है। मैं तब ubuntu, kubuntu, lubuntu, और xubuntu नामक निर्देशिकाएं बनाऊंगा।

फिर, मैं व्यक्तिगत निर्देशिका में ubuntu- बेस शो से फाइल बनाने के लिए OverlayFS का उपयोग करता हूं। मैं कुछ इस तरह का उपयोग करेंगे:

mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu

यह कुबंटु फ़ोल्डर में ubuntu- बेस शो से फाइल बनाता है। तब, मैं chrootkubuntu फ़ोल्डर में कर सकता हूं और कुछ ऐसा कर सकता हूं apt-get install kubuntu-desktop। इस ओवरलेफ़् स माउंट में रहते हुए किए गए कोई भी बदलाव ऊपरी निर्देशिका में रहेंगे, इस मामले में कुबंटु फ़ोल्डर। फिर, एक बार जब मैं ओवरलेएफएस को अनमाउंट करता हूं, तो उन फाइलों को माउंट करता है जो वास्तव में उबंटू-बेस में मौजूद हैं, लेकिन कुबंटु फ़ोल्डर में "मिरर किए गए" हैं जब तक कि उन्हें बदल नहीं दिया गया हो। यह मुझे उबंटू-बेस में फाइलों की कई प्रतियाँ रखने से रोकता है, जबकि अभी भी उनका उपयोग करने में सक्षम है जैसे कि वे प्रत्येक स्थान पर भौतिक रूप से मौजूद हैं।


3
"लेकिन किसी कारण से यह गिरी के पेड़ पर kern.org पर दिखाई नहीं देता है" - ऐसा इसलिए है क्योंकि ओवरलेप्स अपस्ट्रीम कर्नेल में नहीं है, ठीक वैसे ही जैसे कि aufs (और कभी नहीं होगा)। ऐसे संघ फाइलसिस्टम उबंटू कर्नेल टीम द्वारा एकीकृत हैं।
MestreLion

2
OverlayFS जाहिर तौर पर कर्नेल 3.10 में मिल रहा है।
डेविड सी। बिशप

8
अंत में, 3.18 lwn.net/Articles/617099
Rmano

4
@Rmano: मेरी मशीन पर यह केवल काम overlayनहीं करता हैoverlayfs
Janus Troelsen

1
धन्यवाद @austinmarton, मुझे यह थोड़ी देर पहले भी मिला था और इससे पहले कि मैं अपना जवाब अपडेट करूं, टोटी ने इसे नीचे कवर कर दिया, इसलिए मैंने उनके जवाब का श्रेय अपने शीर्ष पर दिया।
चक आर

20

से https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :

ऊपरी और निचला

एक ओवरले फाइल सिस्टम दो फाइल सिस्टम को जोड़ती है - एक 'अपर' फाइलसिस्टम और एक 'लोअर' फाइलसिस्टम। जब कोई नाम दोनों फाइल सिस्टम में मौजूद होता है, तो 'अपर' फाइलसिस्टम में ऑब्जेक्ट दिखाई देता है, जबकि 'लोअर' फाइलसिस्टम में ऑब्जेक्ट या तो छिपा होता है या डायरेक्टरी के मामले में 'अपर' ऑब्जेक्ट में मर्ज हो जाता है।

'फाइलसिस्टम' के बजाय ऊपरी और निचले 'निर्देशिका ट्री' को संदर्भित करना अधिक सही होगा क्योंकि दोनों निर्देशिका पेड़ों का एक ही फाइल सिस्टम में होना काफी संभव है और इसके लिए कोई आवश्यकता नहीं है कि फाइलसिस्टम की जड़ दी जाए या तो ऊपरी या निचला।

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

दो-रीड-ओनली फाइल-सिस्टम का केवल पढ़ने वाला ओवरले किसी भी फाइलसिस्टम प्रकार का उपयोग कर सकता है।

निर्देशिकाएँ

ओवरलेइंग में मुख्य रूप से निर्देशिकाएं शामिल हैं। यदि एक दिया गया नाम ऊपरी और निचले दोनों फ़ाइल सिस्टम में दिखाई देता है और या तो एक गैर-निर्देशिका को संदर्भित करता है, तो निचली वस्तु छिपी हुई है - नाम केवल ऊपरी ऑब्जेक्ट को संदर्भित करता है।

जहाँ ऊपरी और निचले दोनों ऑब्जेक्ट्स डायरेक्टरी होते हैं, एक मर्ज की गई डायरेक्टरी बनती है।

माउंट समय पर, माउंट विकल्प "लोर्डिर" और "अपरडिर" के रूप में दी गई दो निर्देशिकाओं को एक विलय निर्देशिका में जोड़ा गया है:

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged

"वर्कडिर" को ऊपरी फाइल के समान फाइल सिस्टम पर एक खाली निर्देशिका होने की आवश्यकता है।

फिर जब भी ऐसे मर्ज किए गए डायरेक्टरी में लुकअप का अनुरोध किया जाता है, तो प्रत्येक वास्तविक डायरेक्टरी में लुकअप किया जाता है और ओवरले फाइलसिस्टम से संबंधित डेंट्री में संयुक्त परिणाम को कैश किया जाता है। यदि दोनों वास्तविक लुकअप निर्देशिका पाते हैं, तो दोनों संग्रहीत हैं और एक मर्ज की गई निर्देशिका बनाई गई है, अन्यथा केवल एक संग्रहीत है: ऊपरी अगर यह मौजूद है, तो कम है।

केवल निर्देशिकाओं से नामों की सूचियाँ विलय की जाती हैं। अन्य सामग्री जैसे मेटाडेटा और विस्तारित विशेषताएँ केवल ऊपरी निर्देशिका के लिए रिपोर्ट की जाती हैं। निचले निर्देशिका की ये विशेषताएँ छिपी हुई हैं।


4
वर्कडायर पर स्पष्टीकरण के लिए धन्यवाद। यह एक हालिया बदलाव था और जिस भी कारण से मैं 'वर्कडिर' वास्तव में क्या किया था, इसके बारे में कोई भी दस्तावेज नहीं पा सका। पिछली बार जब मैंने देखा तो यह कर्नेल की मदद में नहीं था। IMO को ओवरलेफ़ करने के लिए भ्रम की एक परत जोड़ता है, काश इसके बिना नए संस्करणों का उपयोग किया जा सकता है - यह मेरे वर्कफ़्लो को गड़बड़ कर देता है।
चक आर

7

मैंने इन कलाकृतियों को ओवरलेफ़्स के लिए एक स्क्रिप्ट शामिल करने के लिए बढ़ाया है जो एक रीड-ओनली रूट एफएस सेट करता है।

आशा है ये मदद करेगा।


1
उस काम के लिए धन्यवाद, जो दूसरों ने किया था, डस्टिन और मैंने क्वांटल को 'ओवरलेरोट' नामक एक भोजपत्र पैकेज में जोड़ा है, जो क्लाउड-इनट्रामाफ़्स-टूल्स स्रोत पैकेज का हिस्सा है। /Etc/overlayroot.conf
smoser

2

न्यूनतम रननीय उदाहरण

# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower

# Create the overlay mount.
sudo mount \
  -t overlay \
  -o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
  none \
  overlay \
;

# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay

# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2

# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work

# Cleanup.
sudo umount upper lower

गिटहब ऊपर

lsमाउंट के साथ पहले का आउटपुट :

lower:
lost+found  lower-file

overlay:
lost+found  lower-file  overlay-file  upper-file

upper/upper:
overlay-file  upper-file

upper/work:
work

lsमाउंट के बिना दूसरे का आउटपुट :

lower:
lost+found  lower-file

upper/upper:
overlay-file  upper-file

upper/work:
work

व्याख्या:

  • निचला: ओवरले को लिखने के बाद अपरिवर्तित था
  • ऊपरी: ओवरले करने के लिए संशोधन प्राप्त किया
  • ओवरले: ऊपरी और निचले दोनों से फाइल दिखाता है
  • काम: कुछ यादृच्छिक सामग्री (एक work/निर्देशिका) शामिल है जिसकी हमें परवाह नहीं करनी चाहिए

उदाहरण से अनुकूलित: उदाहरण OverlayFS उपयोग

यहां कई निचली परतों के साथ एक अधिक जटिल उदाहरण दिया गया है: ओवरलेफ्स कई परतों के साथ फिर से लोड होते हैं (aufs से दूर प्रवास)

उबंटू 18.04, लिनक्स कर्नेल 4.15.0 पर परीक्षण किया गया।

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